Po wstawieniu przerwania za pomocą którego mierzę czas program się notorycznie restaruje. Czasem zdąży się zalogować do sieci a czasem nie .
To jest w setup'ie
Kod: Zaznacz cały
attachInterrupt(digitalPinToInterrupt(WindImpuls), rpm_fan, FALLING);
Kod: Zaznacz cały
void rpm_fan() {
unsigned long static last_event = 0;
if (millis() - last_event < 5) { //debouncing
return;
}
half_revolution_time = (millis() - last_event);
last_event = millis();
}
Kod: Zaznacz cały
if (millis() - lastmillis >= 1000) { //Aktualizuj co sekundę, będzie to równoznaczne z odczytem częstotliwości (Hz)
lastmillis = millis(); // Aktualizacja lastmillis
noInterrupts(); // W trakcie kalkulacji wyłącz obsługę przerwań
if (half_revolution_time>0) rpm = (30000 / half_revolution_time) ;
interrupts() ; //Przywrócenie przerwania
if (rpm>0) {
mph = diameter / 12 * 3.14 * rpm * 60 / 5280;//Odczyt prędkości wiatru w milach/godzinę
mph = mph * 3.5; // Kalibracja błędu odczytu, wartość należy dobrać we własnym zakresie
kmh = mph * 1.609;// Zamiana mil/godzinę na km/h
ms = kmh / 3.6;
}
pomiar[licz_pomiar]=ms;
if ((pomiar[0]==pomiar[1]) and (pomiar[1]==pomiar[2]) and (pomiar[2]==pomiar[3])) {
ms=0;
}
licz_pomiar=licz_pomiar+1;
if (licz_pomiar==4) licz_pomiar=0;
}