Witam, bardzo dziękuję za odpowiedź.
Faktycznie, tak jak pisałeś, pętla for i zastępczo if, która miała odliczyć ilość uruchomień, za szybko powodowała inkrementację. Problem z 5-krotnym wykonaniem pętli rozwiązałem w poniższy sposób:
Jednak zdaję sobie sprawę, że nie jest to do końca dobre rozwiązanie i tylko częściowo spełniające moje założenia.
Najlepszym rozwiązaniem dla mnie byłoby aby program sprawdzał częstotliwość na wejściu i na jej podstawie sterował grzałką, i tak:
- jeśli częstotliwość jest mniejsza niż 200 Hz, program nie włącza grzałki
- jeśli częstotliwość jest w granicach 200 -15000 Hz wtedy program włącza grzałkę według scenariuszy 1-3. W każdym ze scenariuszy można przyjąć na stałe, iż grzałka jest 5-krotnie włączana na okres czas1 (docelowo na 5 min) po czym wyłączana na okres czas2 (docelowo 10 min) i jeśli w tym czasie nie zmniejszy się częstotliwość o próg niżej (np. z 3->2) czeka godzinę i ponownie uruchamia 5-krotne powtórzenie włącz/wyłącz. Natomiast jeśli w międzyczasie spadnie do progu niżej, program wchodzi do założeń niższego progu i dalej 5-krotnie wykonuje włączenie i wyłączenie grzałki... itd.
Mam nadzieję, że nie namieszałem za bardzo
Faktycznie, tak jak pisałeś, pętla for i zastępczo if, która miała odliczyć ilość uruchomień, za szybko powodowała inkrementację. Problem z 5-krotnym wykonaniem pętli rozwiązałem w poniższy sposób:
Kod:
if ((frequency>200)&&(frequency<2000)&&(k1<6))
{
if (millis()<(czas+czas1))
{
digitalWrite(Out, HIGH);
k1++;
}
if (millis()>(czas+czas1)&&(millis()<(czas+czas2)))
{
digitalWrite(Out, LOW);
}
if (millis()>(czas+czas1+czas2)) czas=millis();
}
else
{
digitalWrite(Out, LOW);
czas=millis();
}
Jednak zdaję sobie sprawę, że nie jest to do końca dobre rozwiązanie i tylko częściowo spełniające moje założenia.
Najlepszym rozwiązaniem dla mnie byłoby aby program sprawdzał częstotliwość na wejściu i na jej podstawie sterował grzałką, i tak:
- jeśli częstotliwość jest mniejsza niż 200 Hz, program nie włącza grzałki
- jeśli częstotliwość jest w granicach 200 -15000 Hz wtedy program włącza grzałkę według scenariuszy 1-3. W każdym ze scenariuszy można przyjąć na stałe, iż grzałka jest 5-krotnie włączana na okres czas1 (docelowo na 5 min) po czym wyłączana na okres czas2 (docelowo 10 min) i jeśli w tym czasie nie zmniejszy się częstotliwość o próg niżej (np. z 3->2) czeka godzinę i ponownie uruchamia 5-krotne powtórzenie włącz/wyłącz. Natomiast jeśli w międzyczasie spadnie do progu niżej, program wchodzi do założeń niższego progu i dalej 5-krotnie wykonuje włączenie i wyłączenie grzałki... itd.
Mam nadzieję, że nie namieszałem za bardzo