Skocz do zawartości

Raspberry Pi jako sterownik światła, czyli jak działa funkcja SLEEP


GrzegorzSz

Pomocna odpowiedź

Moja malinka chodzi sobie od 2 lat i nic nie robi (ale też się ani razu nie zawiesiła!), ale w końcu życie zmusza mnie, żebym zaprzągł ją do roboty.

Kupiłem sterownik światła na klatce schodowej (system często stosowany w Skandynawii) o następującej funkcjonalności:

przyciski dzwonkowe (monostabilne) impulsem zapalają i gaszą światło

po ustawionym czasie (np. 5min) światło automatycznie gaśnie

przytrzymanie włącznika przez 2s załącza światło na stałe.

Generalnie spełnia oczekiwania, ale to, co jest główną zaletą dla zapominalskich, czyli wyłączanie po czasie, jest również jego największą wadą - światło nagle gaśnie i niespodziewanie lądujemy w ciemnościach, co jest i nieprzyjemne, i niebezpieczne. Potrzebne jest ostrzeżenie w formie przygaszenia światła (co jednak wymagałoby wymiany wszystkich żarówek na ściemnialne), albo zgaszenie np. 10s przed końcem na 0,5 - 1 sekundę, co pozwoli podejść do wyłącznika i uruchomić ponowne odliczanie czasu.

Nie znalazłem odpowiedniego sterownika na rynku, więc uważam że jest to dobry pomysł na wykorzystanie malinki.

Znalazłem na https://projects.raspberrypi.org/en/projects/physical-computing/7 sympatyczną obsługę wejść w klasie Button:

button.when_pressed = led.on

button.when_released = led.off

co powinno dać obsługę załączenia, wyłączenia i wykrywania 2 sekundowego przytrzymania. Jednak do obsługi 5 minut świecenia muszę od razu uruchomić jakiś timer i tu mam pewne obawy. Większość programów opiera się na pętli odliczającej czas i wykorzystują funkcję SLEEP. Można by również w pętli pobierać np. bieżący czas i porównywać go z wyliczoną wartością.

Chciałbym spytać bardziej doświadczone osoby, używanie SLEEP nie zablokuje malinki , bo w czasie uśpienia 1s ktoś może akurat nacisnąć przycisk. I tak samo czy kręcenie w pętli nie zarżnie procesora, który będzie mielił setki czy tysiące razy porównując czasy ze sobą.

Ponieważ przewiduję dla niej również wiele innych prac, chciałbym zastosować sensowne i eleganckie rozwiązania.

Z góry dziękuję za wszelkie wskazówki.

 

 

Link do komentarza
Share on other sites

Dnia 8.03.2023 o 21:05, GrzegorzSz napisał:

Chciałbym spytać bardziej doświadczone osoby, używanie SLEEP nie zablokuje malinki , bo w czasie uśpienia 1s ktoś może akurat nacisnąć przycisk.

Z docsów:

Cytat

time.sleep(secs) - Suspend execution of the calling thread for the given number of seconds.

Używanie sleep zatrzymuje jedynie wątek wykonywania skryptu, cała reszta systemu będzie działać normalnie. Ale też skrypt nie będzie na nic reagować kiedy będzie zatrzymany.

 

Jak tak myślę, to mógłbyś zainteresować się tematem asynchroniczności i concurrency w Pythonie, to brzmi jak dobry usecase na życie tego. Tutaj masz wprowadzenie: https://realpython.com/python-async-features/ Osobiście nigdy nie siedziałem w tych tematach, więc za dużo nie poradzę więcej.

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.