Мне необходимо получать команду от пользователя через порт и проверять ввел ли он. Если в течение 10 секунд не получаем команду то выводим (ок). код Код (C++): unsigned long time; unsigned long time1; char c; void setup() { Serial.begin(9600); } void loop() { c=Serial.read(); if (c=='4'){ time1=time+10000; time = millis(); if (time1=time){ Serial.print("ok"); } } }
Никита, так работать не будет. Строчку time = millis(); перенесите в самое начало loop() - тогда заработает
Если ничего не вводится - то каждые 10 секунд будет выводить в порт "ОК". Если что-то вводится с интервалами, меньшими чем 10 секунд - то время вывода ОК сдвигается. Анализируйте. Код (C++): uint32_t lastCommandGotAt = 0; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()) { char ch = Serial.read(); lastCommandGotAt = millis(); } if(millis() - lastCommandGotAt > 10000) { lastCommandGotAt = millis(); Serial.println(F("OK")); } }
Добавлю, что операция присваивания ("=") и операция сравнение на равенство ("==") пишутся по-разному. У ТС в ифе "=", и код не будет работать так, как хочет ТС, т.к. после первой проверки времени код не "доползет" до проверки времени, т.к. в следующем цикле loop`а serial.read уже не даст "4". DIYmаn, что такое F("OK")?
http://qaru.site/questions/2139875/using-arduino-f-macro-with-string-arrays Короче, для хранения в PROGMEM по месту использования макроса F();