Ja stosuje harmonogram zadań, nic się nie blokuje loop się kręci z pełną prędkością.
Wywołuje tylko taski co określony czas. Oczywiście zadbać trzeba aby taski były też nieblokujące.
//*****scheduler*************************************
unsigned long previousMillis = 0;
const long sec = 1000;
const uint8_t timeout1 = 1; //time proces1 [sec]
const uint8_t timeout2 = 250; //time proces2 [sec]
boolean proces1 = false;
boolean proces2 = false;
uint8_t time1 = 0;
uint8_t time2 = 0;
void Scheduler() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis < sec) {
return;
}
previousMillis = currentMillis;
if (time1 < timeout1) {
time1 += 1;
}
else {
proces1 = true;
}
if (time2 < timeout2) {
time2 += 1;
}
else {
proces2 = true;
}
}
//************************************************
void loop()
{
Scheduler();
if (proces2 == true) {
// tu dopisujesz to co ma się wykonać co okres timeout2
time2 = 0;
proces2 = false;
}
if (proces1 == true) {
// tu dopisujesz to coma wykonać co okres timeout1
time1 = 0;
proces1 = false;
}
}