Проблема с портом или millis();
- Войдите на сайт для отправки комментариев
Здравствуйте. Начал делать эмулятор ЭБУ автомобиля и в самом начале столкнулся с проблемой. Имеется 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? Откуда вообще эта цифра берётся?
Почему 18? Откуда вообще эта цифра берётся?