25-06-2024, 10:28
Cześć. Arduino mam od chyba 10 lat. Dwa tygodnie temu go wypakowałem z woreczka , by pierwszy raz użyć jako sterowanie do klimy do roślinki. Ot podlej jeśli trzeba, ogrzej, zapal światło, nawilż powietrze... W sumie wszystko gotowe i nawet działa (no prawie). Problem mam z "czasem".
Chodzi o to, że pompa może się włączać od 9tej do 21szej (na 5 sekund) co godzinę, lampa ma świecić od 6tej do 0(24). Nawilżanie powietrza to powiedzmy co 15 minut (niezależnie od pory dnia), ekran OLED ma się wyłączyć po minucie od ostatniego kręcenia koderem, wiatraczek ma na noc wolniej się kręcić (hałas, podobnie jak pompka).
Póki co, to działa z takim kodem (co pełną godzinę):
albo takim (co kwadrans):
Potem jest w loop funkcja sprawdzająca, czy już wyłączyć mgłę...
(w shouldVal[] są wartości ustawialne na ekranie i zapisane w EEPROM, takie jak wartości zadane dla sensorów, czasy akcji, godziny...)
No i to działa ale... "nie podobasz mi się".
Przejrzałem sporo bibliotek dotyczących "timingu" na arduino.cc (nie wszystkie, bo jest ich od ch..olery). Żadna nie spełnia wszystkich wymagań (albo jej nie znalazłem). Do "timeout" ekranu działa wyśmienicie biblioteka "TaskScheduler" (choć to armata na muchę). Ale wszystkie inne jej funkcje są na "millis" a nie na RTC. Do uruchamiania "na godzinę" idealny byłby CronAlarms, ale ten z kolei nie obsługuje opcji "9-21 * * *" a generowanie 12 "cronów" do jednej pompki też nie jest eleganckie. TimeAlarms - chyba najbardziej mi pasuje. Nie ogarnę nią timeout'u, czasu np. pompowania ani zakresu godzin, ale same alarmy + timer są proste do ogarnięcia (pozostaje wyłączenie timera o pewnej godzinie, ale to załatwi po prostu inny alarm).
A jakich bibliotek do ogarniania czasu/timerów/alarmów/timeoutów Wy używacie? Coś polecicie może, co załatwi moje potrzeby za jednym zamachem?
Pozdrawiam
Tadek
Chodzi o to, że pompa może się włączać od 9tej do 21szej (na 5 sekund) co godzinę, lampa ma świecić od 6tej do 0(24). Nawilżanie powietrza to powiedzmy co 15 minut (niezależnie od pory dnia), ekran OLED ma się wyłączyć po minucie od ostatniego kręcenia koderem, wiatraczek ma na noc wolniej się kręcić (hałas, podobnie jak pompka).
Póki co, to działa z takim kodem (co pełną godzinę):
Kod:
if ((now.hour() == i) && (now.minute() == 0) && (now.second() == 0)) { ...}
albo takim (co kwadrans):
Kod:
DateTime now = rtc.now();
uint8_t m = now.minute();
uint8_t s = now.second();
if (sensorLFNow < shouldVal[3] && ((m % 15) + s == 0)) {
digitalWrite(HUMIDIFIER, HIGH);
humStart = now.second(); }
Kod:
if (digitalRead(HUMIDIFIER) && (now.second() >= humStart + shouldVal[5])) digitalWrite(HUMIDIFIER, LOW);
(w shouldVal[] są wartości ustawialne na ekranie i zapisane w EEPROM, takie jak wartości zadane dla sensorów, czasy akcji, godziny...)
No i to działa ale... "nie podobasz mi się".
Przejrzałem sporo bibliotek dotyczących "timingu" na arduino.cc (nie wszystkie, bo jest ich od ch..olery). Żadna nie spełnia wszystkich wymagań (albo jej nie znalazłem). Do "timeout" ekranu działa wyśmienicie biblioteka "TaskScheduler" (choć to armata na muchę). Ale wszystkie inne jej funkcje są na "millis" a nie na RTC. Do uruchamiania "na godzinę" idealny byłby CronAlarms, ale ten z kolei nie obsługuje opcji "9-21 * * *" a generowanie 12 "cronów" do jednej pompki też nie jest eleganckie. TimeAlarms - chyba najbardziej mi pasuje. Nie ogarnę nią timeout'u, czasu np. pompowania ani zakresu godzin, ale same alarmy + timer są proste do ogarnięcia (pozostaje wyłączenie timera o pewnej godzinie, ale to załatwi po prostu inny alarm).
A jakich bibliotek do ogarniania czasu/timerów/alarmów/timeoutów Wy używacie? Coś polecicie może, co załatwi moje potrzeby za jednym zamachem?
Pozdrawiam
Tadek