Корректор электронного (стрелочного) спидометра на ARDUINO

все по электропроводке и оборудованию
brat4791
Сообщения: 4
Зарегистрирован: 15 май 2021, 01:28
Бус: Vista sv32

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение brat4791 »

Что то я не увидел там про спидометр,тахометр.
Разве тупо подавать на вход сигнал. Должно быть некий код дописан
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Ну это уже самостоятельно надо изобретать. По ссылке там этот драйвер подключен к ардуино и рулит мотором, кусок кода с примером как им рулить. Остальное сам изобретай, скетч пиши.
8(928)376-99-75
Аватара пользователя
Андрюха Бух
Сообщения: 9
Зарегистрирован: 18 апр 2017, 22:29
Бус: Volkswagen Caravelle T-3
Откуда: Луганск (ЛНР)

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Андрюха Бух »

Ребята всем привет,может у кого есть эскиз с размерами диска на шрус для индуктивного датчика.Не знаю как он правильно называется.
Аватара пользователя
Андрюха Бух
Сообщения: 9
Зарегистрирован: 18 апр 2017, 22:29
Бус: Volkswagen Caravelle T-3
Откуда: Луганск (ЛНР)

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Андрюха Бух »

Изображение
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

нету
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

UPDATE:
Для тех, у кого не заработал корректор тахометра - сделайте подтяжку 12 вольт через резистор 10кОм к проводу на тахометр после транзистора кс238. Опробовано на приборке от Golf 3.
Приборка не видит сигнал, т.к. фактически ардуино просто отключает-включает массу, уровень сигнала 0 вольт, а должно быть 12 вольт. УАЗ приборы работают, фольц не хочет. Резистор устраняет проблему.
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

123.jpg
Подозреваю, что на некоторых прибоках подтяжка на 12 вольт понадобится и для спидометра тоже.

Отправлено спустя 34 минуты 42 секунды:
Подключение тахометра
123.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Новая схема подключения датчика скорости. (или сигнала тахометра)

подключение к ардуино.png
По такой же схеме нужно подключать и тахометр, только на 2 pin.

Была проблема, что сигнал не мог пройти через оптопару, в итоге ничего не работало. Исправил.
Schematic_speedometr-taho_2021-07-14.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Резистор R7 на схеме делает притяжку к 5 вольтам.
Для тахометра гольф 3 притяжка к 12 вольтам.
R8 для спидометра гольф 3 отсутствует.
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

ОБНОВЛЕННЫЙ СКЕТЧ.
- Убран баг с танцами стрелок во время запуска.
ПОКАЗАТЬ ИСХОДНЫЙ КОД

Код: Выделить всё


//ТАХОМЕТР
volatile unsigned long    micros_th1 = 0;
volatile boolean          sttaho = false;       //триггер тахометра
volatile byte             sztaho = 0;           //счетчик обнуления
volatile unsigned int     sptaho = 0;           //кол-во оборотов

//КОРРЕКЦИЯ ТАХОМЕТРА
volatile unsigned int     InputTaho = 0;
volatile unsigned int     OutputTaho = 0;
double                    popravkaTaho = 0.667;   //ДЛЯ двигателя 4ц приборка от 6ц - коэффициент 1.5


//СПИДОМЕТР
volatile unsigned long    micros_sp = 0;
volatile byte             sz = 0;               //счетчик обнуления
volatile unsigned int     sp = 0;               //скорость
volatile boolean          st = false;           //триггер

//КОРРЕКЦИЯ СПИДОМЕТРА
volatile unsigned int     InputSpeed = 0;
volatile unsigned int     OutputSpeed = 0;
double                    popravka = 1;

//ВРЕМЯ РАБОТЫ ОСНОВНОЙ ПРОГРАММЫ (каждые 50 миллисекунд - указано в loop)
unsigned long timing;

//ГЕНЕРАТОР ИМПУЛЬСОВ СПИДОМЕТРА
unsigned long             timing2;
unsigned long             Period; 
unsigned long             Skvajnost;
bool                      Status=0;

//ГЕНЕРАТОР ИМПУЛЬСОВ ТАХОМЕТРА
unsigned long             timing3;
unsigned long             PeriodTaho=0; 
unsigned long             SkvajnostTaho=0;
bool                      StatusTaho=0;


//ПИНЫ 
int                       OUTSPEEDPIN=4;        //ПИН ВЫХОДА - НА СПИДОМЕТР
int                       OUTTAHOPIN=7;         //ПИН ВЫХОДА - НА ТАХОМЕТР
#define PIN_POT           A0                    //ПИН СИГНАЛА ОТ ПОТЕНЦИОМЕТРА ПОПРАВКИ


//********************************************************************
void setup(){
Serial.begin(115200);                                      //инициализация ком порта
attachInterrupt(1, speedometr, RISING);                    //прерывание спидометра по фронту импульса
attachInterrupt(0, tahometr, RISING);                      //прерывание тахометр по фронту импульса
pinMode(PIN_POT, INPUT);
pinMode(OUTSPEEDPIN, OUTPUT); 
pinMode(OUTTAHOPIN, OUTPUT); 
digitalWrite(OUTSPEEDPIN, LOW);
digitalWrite(OUTTAHOPIN, LOW);
}
//********************************************************************


void loop()
{  
 if (millis() - timing > 50)
 { 
  timing = millis(); 

//Считаем спидометр:
  if (sz != 0)
  {
    sz--;
  }
  else
  {
    sp = 0;
  }
  InputSpeed=sp;                                          //Можно задать для проверки любую скорость
  popravka=map(analogRead(PIN_POT),0,1023,0,200)*0.01;    //Коэффициент умножения входящего сигнала от 0.00 до 2.00. 
  OutputSpeed=InputSpeed*popravka;                        //Вычисление правильной скорости
  
  if((OutputSpeed>1)&&(OutputSpeed<220))
  {
    Period=600000/OutputSpeed;  
  }
  else
  {
  Period=0;                             //Вычисление периода импульса
  }

//Считаем тахометр
  if (sztaho != 0)
  {
    sztaho--;
  }
  else
  {
    sptaho = 0;
  }
  InputTaho=sptaho;                                    
  
  
  OutputTaho=InputTaho*popravkaTaho;                      //Вычисление правильной скорости
  int MPHfromSEC=OutputTaho*50;
  
  
  if((OutputTaho>1) && (OutputTaho<200))
  {
  PeriodTaho=600000/OutputTaho;    
  }
  else{
  PeriodTaho=0;                                       //Вычисление периода импульса
  }
  
Serial.println("");
Serial.print("Скорость:    ");  
Serial.print(OutputSpeed);
Serial.print("км/ч;      Коэффициент: ");
Serial.println(popravka);
Serial.print("Обороты ДВС: ");
Serial.print(MPHfromSEC);
Serial.print("об/сек;     Коэффициент: ");
Serial.println(popravkaTaho);
Serial.println("");

 }


//Генерируем импульсы для СПИДОМЕТРА
Skvajnost= Period/2 ;                                     //такая скважность называется меандр  
   if (Status==0) {
    if ( (micros()-timing2)>= Skvajnost) {
      timing2 = micros(); 
      digitalWrite(OUTSPEEDPIN, HIGH); 
      Status=1;
    }
  }
 
  if (Status==1) {
    if ( (micros()-timing2)>= (Period-Skvajnost) ){
      timing2 = micros(); 
      digitalWrite(OUTSPEEDPIN, LOW); 
      Status=0;
    }
  }




//Генерируем импульсы для ТАХОМЕТРА
SkvajnostTaho=PeriodTaho/2 ;                                     
   if (StatusTaho==0) {
    if ( (micros()-timing3)>= SkvajnostTaho) {
      timing3 = micros(); 
      digitalWrite(OUTTAHOPIN, HIGH); 
      StatusTaho=1;
    }
  }
 
  if (StatusTaho==1) {
    if ( (micros()-timing3)>= (PeriodTaho-SkvajnostTaho) ){
      timing3 = micros(); 
      digitalWrite(OUTTAHOPIN, LOW); 
      StatusTaho=0;
    }
  }




}
//********************************************************************
void speedometr(){                                        //измеряем частоту на входе спидометра по прерыванию
if(!st){micros_sp = micros();}
else {sp = (600000/(micros() - micros_sp));}
st = !st;
sz = 30;
}


void tahometr(){                                          //измеряем частоту на входе тахометра по прерыванию
if(!sttaho){micros_th1 = micros();}
else {sptaho = (600000/(micros() - micros_th1));}
sttaho = !sttaho;
sztaho = 30;
}

У вас нет необходимых прав для просмотра вложений в этом сообщении.
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Во время первой настройки, вышлел первый сюрприз. Оказывается некоторые спидометры имеют разные коээфиициенты поправок при разных скоростях. Причем нелинейным образом.
Т.е. условно при 20км поправка равна 0.6, при 40кмч поправка 0.51, а при 120кмч, вообще 0.75.

Я вношу сейчас изменения в код, чтобы была возможность калибровать прибор на разных скоростях. Чтобы стрелка показывала точные показания в сравнении с GPS
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Видео работы нового скетча с картой поправок:


Объяснение каким образом откатать поправки при помощи GPS в смартфоне.


Отправлено спустя 16 минут 21 секунду:
СВЕЖИЙ СКЕТЧ от 21 июля 2021г с картой поправок для спидометра
Теперь можно очень точно установить для каждой скорости отдельную поправку. Я внёс плавное изменение поправки от точки до точки, т.е. не ступенчато. Себе я выкатал скорости 0, 20, 40, 60, 80, 100, 120, 140 км/ч. Вы можете откатать другие. Причём количество точек может быть произвольным, их число вносится в скетч. Чтобы скетч скомпилировался, вы должны не просто поменять число точек Lengthkalibr, но и внести такое же количество элементов в массивах "kalibrsp"(скорость от датчика) и массив поправок kalibrporv (коэффициенты на что умножить, чтобы прибор показал нужную скорость):
У меня вот такие значения при датчике на 11 импульсов на оборот колеса резина R16/215, спидометр Golf3 (с максималкой 220кмч)
у вас могут быть другие значения, в зависимости от резины и используемого датчика

Код: Выделить всё

const int Lengthkalibr=8;
int kalibrsp[Lengthkalibr]={0, 19, 37, 55, 73, 92, 112, 133};         //ТАБЛИЦА КАЛИБРОВОК - ВХОДЯЩАЯ СКОРОСТЬ
int kalibrporv[Lengthkalibr]={38, 38, 52, 60, 65, 67, 69, 70};        //ТАБЛИЦА КАЛИБРОВОК - ПОПРАВКА 
//(в функции GetKalibr это число умножается на 0.01 на выходе имеем коэффициент умножения по таблице скорости) 
СКАЧАТЬ СКЕТЧ
korrektor.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
8(928)376-99-75
genzemarta
Сообщения: 4
Зарегистрирован: 16 мар 2021, 18:55
Бус: Фольксваген транспортер 3

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение genzemarta »

Очень круто!
На старой прошивке и на старой схеме с оптопарой накатал уже 2500км, всё отлично! Штрафов с камер нет!☺ Сменил главную пару, посчитал коффициент для новой пары, и просто записал его, не откатывая по gps потом проверил с gps 2500об/мин =100км/ч и всё совподает! Рад как удав😆.
Последний раз редактировалось genzemarta 31 июл 2021, 00:08, всего редактировалось 1 раз.
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Здравствуйте. Я повторил схему. Ардуино Нано. Вход на оптроне транзистор 3102, выход на одном резисторе и транзисторе кт315. Питание - регулируемое на 5В.
Есть проблемы. Их две.
1. Количество герц (сигнал) учитывается приборкой в 2 раза больше. Скорость указана в скетче, скажем 50, на спидометре 100.
2. Стрелка дергается. От "туда-сюда" до "ложится". Все это на столе, конечно.
Видео этого дела:
https://youtu.be/_R6ii7nAo7w
Что-то посоветуете в этой ситуации, плиз?
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

По первой проблеме: в мониторе порта отображается скорость которую ардуино приняла от датчика скорости. Это условное значение, ни с прибором спидометра, ни с реальной скоростью никак не связано. Вычисляется по формуле СКОРОСТЬ=600000/ВХОДЯЩИЕ ИМПУЛЬСЫ.
Т.е. так и должно быть.
arristo писал(а): 04 авг 2021, 15:59 Скорость указана в скетче, скажем 50, на спидометре 100.
это ты уже будешь потенциометр крутить в дороге, по GPS искать нужный коэффициент поправки. Оно и не должно совпадать.

По второй проблеме. Тут есть варианты. Давай через ватсап или вконтакте. Номер мой в подписи к сообщению написан.


В скетче в разделе кода СЧИТАЕМ СПИДОМЕТР, найди строку:

Код: Выделить всё

InputSpeed=sp;
popravka=popravka=GetKalibr(InputSpeed); 
И ЗАМЕНИ НА

Код: Выделить всё

InputSpeed=100;
popravka=1;
Отцепи потенциометр. (можно и не отцеплять, после изменения кода он просто не учитывается)
залей скетч в ардуино.
У тебя должна стрелка стать на какую либо отметку как вкопанная, без колебаний. Это изменение отключит вход и ардуинка вместо корректора станет простым генератором импульсов. тем самым можно проверить хорошо ли работает выход


Нужно выцепить, откуда появляются помехи (на входе, ошибка в скетче или на выходе).

Попробуй эту схему выхода
123.jpg
Кроме того, я не пробовал КТ315 в качестве выходного. КС238 немного мощнее, немного другие параметры. Некоторые спидометры начинают так глючить из-за не правильного напряжения подтяжки (т.е. 5 вольт вместо 12), прибор от гольф 3 отказался работать, если включить в разрыв резистор больше чем 0,7кОм, в пограничном режиме прыгал, на 1кОм не работал вовсе.
Проверял работу датчика скорости светодиодной лентой. Минус сегмента светодиодной ленты на сигнал от датчика, Плюс на +12вольт.

Нужно проверить не прыгает ли у тебя сигнал от потенциометра. Что очень может быть.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

По проблеме прыганья стрелки разобрался. Это скакал потенциометр. ЕГо надо подключать как RC-фильтр, то есть сигнал через 10 ком, и мелкая (0.1) емкость с сигнала после резистора на GND, тогда дребезжание будет фильтроваться. Я его отключил совсем, и все стало гут.

Проблема не тех показаний разбилась на две проблемы:
1. Я экспериментирую на мильной приборке с переразметкой шкалы под километры. Пробег считается в милях, поэтому подсчет импульсов будет в 1.7 раза ниже (выше). А стоит рабочая приборка - километровая. Хз, короче. Придется возить ноут рядом с километровой приборкой и смотреть все это на экране с отработкой на месте.

2. ввиду брехания приборки на фиксированное количество километров, не получилось ввести коэффициент-множитель. Пришлось тупо применить поправку суммирующую. Вроде показывает, но опять-таки мили брешут, скорее всего.

Короче, всё подошло к тому, что надо отсекать по GPS на ходу поправки на спидометр и на действительную скорость и вычислять либо множитель (что представляется проблематичным), либо делать массив граничных значений.
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

А вот еще вопрос.
Вот этот момент:
//Генерируем импульсы для СПИДОМЕТРА
Skvajnost= Period/2 ; //такая скважность называется меандр
if (Status==0) {
if ( (micros()-timing2)>= Skvajnost) {
timing2 = micros();
digitalWrite(OUTSPEEDPIN, HIGH);
Status=1;

Serial.println("out High");
}
}

if (Status==1) {
if ( (micros()-timing2)>= (Period-Skvajnost) ){
timing2 = micros();
digitalWrite(OUTSPEEDPIN, LOW);
Status=0;
Serial.println("out Low");
}
}

Это должно писаться попеременно после каждого вычисления скорости? Или должно писаться сразу друг за другом, сперва High, потом Low?
У меня получается так:

Speed=70Скорость 1=70Скорость 2=78
out High
Speed=70Скорость 1=70Скорость 2=78
out Low


Вычисляется сперва одна скорость, пишется High, потом вычисляется вторая скорость, пишется Low. У меня идет смена скоростей через 1.5 секунды, опрос идет раз в 50 миллисек.

Собственно вот скетч без опроса спидометра, только поправка:


//СПИДОМЕТР
volatile unsigned long micros_sp = 0;
volatile byte sz = 0; //счетчик обнуления
volatile unsigned int sp = 0; //скорость
volatile boolean st = false; //триггер

//КОРРЕКЦИЯ СПИДОМЕТРА
volatile unsigned int InputSpeed = 0;
volatile unsigned int Speed = 0;
volatile unsigned int OutputSpeed = 0;
double popravka = 1;

//ВРЕМЯ РАБОТЫ ОСНОВНОЙ ПРОГРАММЫ (каждые 50 миллисекунд - указано в loop)
unsigned long timing,timer;

//ГЕНЕРАТОР ИМПУЛЬСОВ СПИДОМЕТРА
unsigned long timing2;
unsigned long Period;
unsigned long Skvajnost;
bool Status=0;
int rotator,rotaprev, promro;
String ss;

//ПИНЫ
int OUTSPEEDPIN=4; //ПИН ВЫХОДА - НА СПИДОМЕТР
int INPEEDPIN=7; //ПИН ВЫХОДА - имитатор датчика скорости
#define PIN_POT A7 //ПИН СИГНАЛА ОТ ПОТЕНЦИОМЕТРА ПОПРАВКИ

//********************************************************************
void speedometr(){ //измеряем частоту на входе спидометра по прерыванию
if(!st){micros_sp = micros();}
else {sp = (600000/(micros() - micros_sp));}
st = !st;
sz = 30;
}
//********************************************************************
void setup(){
Serial.begin(115200); //инициализация ком порта
attachInterrupt(1, speedometr, RISING); //прерывание спидометра по фронту импульса

pinMode(PIN_POT, INPUT);
pinMode(OUTSPEEDPIN, OUTPUT);

digitalWrite(OUTSPEEDPIN, LOW);

}
//********************************************************************


void loop()
{



if (millis() - timing > 50)
{
timing = millis();

if (millis() - timer > 1500) //циклическое изменение скорости
{
timer = millis();
Speed=Speed+10;
InputSpeed=Speed;
}

OutputSpeed=InputSpeed+8; //*popravka; //Вычисление правильной скорости


if (OutputSpeed>110 ) //зацикливание вывода скорости
{
Speed=0;
OutputSpeed=0;
InputSpeed=0;
}
else
{

if (OutputSpeed>1) //если скорость положительная, то делаются все вычисления и вывод в монитор
{
Period=600000/OutputSpeed;

ss="Speed="+String(Speed)+" Скорость 1="+String(InputSpeed)+" Скорость 2="+String(OutputSpeed);
Serial.println(ss);

//Генерируем импульсы для СПИДОМЕТРА с периодичностью 50 мсек
Skvajnost= Period/2 ; //такая скважность называется меандр
if (Status==0) {
if ( (micros()-timing2)>= Skvajnost) {
timing2 = micros();
digitalWrite(OUTSPEEDPIN, HIGH);
Status=1;

Serial.println("out High");
}
}

if (Status==1) {
if ( (micros()-timing2)>= (Period-Skvajnost) ){
timing2 = micros();
digitalWrite(OUTSPEEDPIN, LOW);
Status=0;
Serial.println("out Low");
}
}

}
else
{
Period=0; //Вычисление периода импульса
}

}
}
}
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Ну позвони мне, или напиши.

Блин, ну зачем ты тронул код генерации импульсов, это вообще не так работает. Я не пойму зачем ты написал вывод в порт смену hight и low. Что ты хочешь этим посмотреть? Этот код генерирует шим с 50% скважности от периода. Период вычисляется по формуле 600000/входящую скорость. Его вообще не трогай. И убери вывод в порт. Hight low формирует импульс. Вычисляется период, сколько времени длится импульс, допустим 2 милисекунды. Значит 1 миллисекунду надо подавать +12 вольт ( hight) и 1 миллисекунду НОЛЬ (low).

Позвони, обьясню.

Отправлено спустя 13 минут 29 секунд:
Зачем ты сделал сдвиг +8. ?

Отправлено спустя 2 минуты 16 секунд:

Код: Выделить всё


if (OutputSpeed>110 ) //зацикливание вывода скорости
{
Speed=0;
OutputSpeed=0;
InputSpeed=0;
}
else

Зачем это?
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Немного не понял трагизма ситуации.

Вывод в порт вывел просто посмотреть как исполняются команды записи импульса. Получилось, что длительность импульса устанавливается в цикле опроса спидометра в строке
if (millis() - timing > 50) //ведь это цикл опроса?
{
timing = millis();
Потому как пишется сперва 12 в, потом ввиду того, что Status изменился, уходит на новый цикл и только потом пишется low.
чтобы писать именно импульс, надо делать delay на длину импульса.

Зацикливание вывода скорости - чтобы менялась скорость на выводе. Доводилась до предельной и опять обнулялась. Чисто тестовый параметр, чтобы не перезаливать прогу с заменой скорости каждый раз.

Сдвиг 8 это и есть постоянная поправка, чтобы не умножать, а тупо прибавлять. Тестовый параметр.
-------------------
Это простые тестовые решения для теста работы скетча, ничего глобального они не делают. А вот исполнение полупериода реального импульса это странно. Или я чего-то не понимаю.
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

digitalWrite(OUTSPEEDPIN, HIGH);
delayMicroseconds(Skvajnost);
digitalWrite(OUTSPEEDPIN, LOW);
Ответить