Вопрос по таймеру
- Войдите на сайт для отправки комментариев
Ср, 18/12/2019 - 20:09
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
boolean temp_flag;
boolean styleLCD = 1;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(2, DHT11);
void setup() {
dht.begin();
lcd.init();
lcd.backlight();
lcd.print("IHOR 1-V");
lcd.setCursor(0, 1);
lcd.print("AKIT");
}
void loop() {
if (millis() - 0 >= 10000 && temp_flag == 0) temp_flag = 1;
if (millis() % 15000 == 0 && temp_flag == 1) styleLCD = !styleLCD;
if (millis() % 1000 == 0 && temp_flag == 1) {
int temp_graph = map(dht.readTemperature(), 14, 30, 0, 16);
if (styleLCD == 1) styleLCD1();
else styleLCD2(0, 1, 16, temp_graph);
}
}
void styleLCD1() {
lcd.clear();
lcd.print(millis() / 1000);
lcd.setCursor(0, 1);
lcd.print(dht.readTemperature());
lcd.print(" C\xDF");
}
void styleLCD2(byte start_pos, byte row, byte bar_length, byte fill_percent) {
lcd.clear();
lcd.print("15-30 C\xDF");
byte infill = round((float)bar_length * fill_percent / 16);
lcd.setCursor(start_pos, row);
if (infill == 0) lcd.write(16);
else lcd.write(255);
for (int n = 1; n < bar_length - 1; n++) {
if (n < infill) lcd.write(255); if (n >= infill) lcd.write(16);
}
if (infill == bar_length) lcd.write(255);
else lcd.write(16);
}
Проблема в том, что плата раз через раз пропускает проверку millis()%15000==0(строка подсвечена) и не меняет значение переменной.Почему?Ардуино китайская
Проблема в том, что плата раз через раз пропускает проверку millis()%15000==0(строка подсвечена) и не меняет значение переменной.Почему?
Потому что код выполняется некоторое время, и между вызовами loop некоторые значения millis() - уже тю-тю, в смысле - пропускаются. Лучше интервалы измерять интервалами, а не остатком от деления ;)