Есть 4 метода Clock();Data();Temp();Hum();. Кусочек кода надо сделать без delay(). Как это можно реализовать? Не получается. Например сначала срабатывает Clock(),потом Hum(),снова Clock(),потом Temp() и Hum(). Код:
Clock();
delay(5000);
Data();
delay(2000);
Temp();
delay(2000);
Hum();
delay(2000);
Моя 1 попытка:
void loop() {
if (round(millis() / 5000) % 2 == 0) {
Clock();
}
if (round(millis() / 2000) % 2 == 0) {
Data();
}
if (round(millis() / 2000) % 2 == 0) {
Temp();
}
if (round(millis() / 2000) % 2 == 0) {
Hum();
}
}
2 попытка:
if ( millis() - time1 > 5000)
{
Clock();
time1 = millis();
}
if ( millis() - time2 > 2000)
{
Data();
time2 = millis();
}
if ( millis() - time3 > 2000)
{
Temp();
time3 = millis();
}
if ( millis() - time4 > 2000)
{
Hum();
time4 = millis();
}
3 попытка:
if ( millis() - time1 > 5000)
{
Clock();
time1 = millis();
}
else
{
Data();
}
if ( millis() - time2 > 2000)
{
Temp();
time2 = millis();
}
else
{
Hum();
}
Я бы сделал как-то так:
void loop() {
uint8_t cycle = (millis() / 1000) % 11;
if (cycle < 5) { Clock(); }
else if (cycle < 7) { Data(); }
else if (cycle < 9) { Temp(); }
else { Hum(); }
}
round(millis() / 1000)
Здесь деление и так целочисленное. Дополнительно округлять результат не нужно.
Вы можете использовать для каждого метода:
if( millis()-time > 2000) //2 сек к примеру
Сборка персонального компьютера от Artline: умный выбор для современных пользователей