Проблема с портом или millis();

Fessar
Offline
Зарегистрирован: 29.07.2015

Здравствуйте. Начал делать эмулятор ЭБУ автомобиля и в самом начале столкнулся с проблемой. Имеется UNO на CH340. К UNO подключен блютус модуль для вывода сооблений на телефон.  Собственно задача: вывести на телефон время нижней полки(diditalRead LOW) на пине RX. 

//Блютус
#include <SoftwareSerial.h> 
#define rxPin 3 
#define txPin 4
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin); 

int i=0, n=0, m=0, k=0, o=0, p=0, r=0, s=0, t=0;
int a=0,b=0,d=0,e=0;
unsigned long time1=0, time2=0, time3=0, time4=0, time5=0;

#define K_IN  0 
#define K_OUT  1

void setup()
{
  //блютус
  pinMode(rxPin, INPUT); 
  pinMode(txPin, OUTPUT); 
  mySerial.begin(9600); 
  mySerial.println("Setup_initialized");
  
  //
  pinMode(K_IN, INPUT); 
  pinMode(K_OUT, OUTPUT);
}

void loop()
{
 switch(a)
{
   case 4:
     exchange();
     break;
   default:
     initialisation();
     break;
 }
}
  
int initialisation()  
  {
    
  time1=millis();
  if (digitalRead(K_IN)==HIGH){c=1;}
  else {c=0;}
  if ((c==1) && (a==0)){time2=millis(); a=1;} // если верхняя полка - начало проверки верхней полки
  if ((time1-time2<200) && (a==1) && (c==0)){a=0;} // возврат к началу если верхняя полка менее 200 мс
  if ((time1-time2>=200) && (a==1) && (c==0)){time3=millis(); a=2;} // если полка равна или больше 200 мс разрешается проверка нижней полки
  if ((time1-time3<24) || (time1-time3>26) && (a==2)  && (c=1)){a=0; b=1;} // возврат к началу если нижняя полка менее 24 мс или более 26 мс
  if (a==3){time4=millis(); d=time4-time3; mySerial.print("Time LOW:"); mySerial.println(d); a=0;}
  if (b==1){time5=millis(); d=time5-time3; mySerial.print("Time LOW_fall:"); mySerial.println(d); a=0; b=0;}
  //digitalWrite(K_OUT, !digitalRead(K_IN)); 
  return a;

}

Далее запускаю дианостическую программу на компьютере(диагностика автомобиля), программа запускает инициализацию(верхняя полка более 200мс, нижняя полка 25 мс, верхняя полка 25 мс) и посылает байты в порт. Но в телефон прилетает Time LOW_fall: 18(бывает 17 или 19). То же самое, если открыть монитор последовательного порта в Arduino IDE и начать что-то слать в ардуину. Так же пробовал подключать к UNO вторую ардуину со следующим кодом (кусок кода):

digitalWrite(K_OUT, HIGH);
delay(250);
digitalWrite(K_OUT, LOW);
delay(25);
digitalWrite(K_OUT, HIGH);
delay(25);

И опять  Time LOW_fall: 18.

Почему 18? Откуда вообще эта цифра берётся?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Fessar пишет:

Почему 18? Откуда вообще эта цифра берётся?

Ну, как откуда? Видимо, time5-time3 как раз равно 18. А что уж это значит, Вам виднее.