Проблема с портом или 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? Откуда вообще эта цифра берётся?