[quote="chris18404"]
adasikp napisał: a ja chce po 10 sekund w pętli wilgotnosc i temperaturę)
Jeżeli nie chcesz aby salut powitalny na LCD był ciągle wyświetlany i odświerzany, - umieśc go w części programu wykonywanego jednokrotnie, tylko podczas startu i tak pozostaw, pózniej zadbasz o jego nadpisanie w odpowiednim momencie:
Zaloguj się, aby zobaczyć kod
Stosowanie w programie opóźnień delay() większych niż kilka lub kilkadziesiąt milisekund jest z natury błędną praktyką. W tym czasie program jest zatrzymany i cały program za wyjątkiem interruptów, oraz timerów odczekuje aż to opóźnienie zostaje wypełnione.
Do odmierzenia dłuższych odcinków czasu możesz wykorzystac fukcję millis() , która jest specyficznym dla arduino zegarem obsługiwanym przez timer0 , podobnie jak milisekundy delay(), z tą różnica że millis() nie blokuje processora, bo polega na cyklicznym odpytywaniu (polling) tego zegara i porównywaniu z wartością oczekiwaną.
Potrzebowałbyś na początku wprowadzic dodatkową zmienną przechowującą ostatni znaczący odczyt millis(), na przykład:
Zaloguj się, aby zobaczyć kod
- i w każdym obrocie pętli nieskończonej ‘loop’ porównujesz róznicę: aktualnego odczytu millis, minus ostatni zapamiętany odczyt; do zadanego przedziału . Jezeli ta funkcja warunkowa jest spełniona znaczy że zadany czas upłynął i wywołujesz przygotowaną funkcję nadpisu treści LCD (w tym akurat aspekcie), może to byc zupełnie dowolna funkcja oczekująca upływu czasu. W tej funkcji jednocześnie umieszczasz nową wartośc ostatniego odczytu/(update).
Tu praktycznie nie ma limitu co do długości zadanego przedziału czasu do odmierzenia, gdyż zawsze operujesz tylko różnicą wartości zmiennych.
W pętli głównej powinien pojawic się warunek porównania tych zmiennych i wywołania funkcji wyświetlania:
Zaloguj się, aby zobaczyć kod
To wszystko co potrzebujesz.
e marcus