Synchronizowanie przekaźnika z wyświetlaczem LCD i modułem RTC - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Synchronizowanie przekaźnika z wyświetlaczem LCD i modułem RTC (/watek-synchronizowanie-przeka%C5%BAnika-z-wy%C5%9Bwietlaczem-lcd-i-modu%C5%82em-rtc) |
Synchronizowanie przekaźnika z wyświetlaczem LCD i modułem RTC - Lepl39 - 03-02-2022 Dzień dobry, Niedawno zbudowałam swój pierwszy projekt z Arduino UNO, jakim jest zegar z intencjonalnym glitchem. Dołączyłam do niego przekaźnik w celu wydawania dźwięku klikania. Chciałabym go zsynchronizować z zegarem w taki sposób, żeby klikał razem z sekundami, poza na sekundy z końcówką 9, czyli np. gdy jest godzina 22:36:29. Wtedy miałby być cicho. Schemat projektu: [attachment=1189] Oraz kod: Kod: #include "virtuabotixRTC.h"//Library used Kod: #include "virtuabotixRTC.h"//Library used Jednak to wchodzi w interakcję z pracą zegara, tworzy dziwaczny błąd. Zgaduję, że rozwiązanie byłoby z funkcją prevSeconds = myRTC.seconds jako nowicjuszka niestety nie mam pojęcia jak ją zaadaptować do kodu. Byłabym niezmiernie wdzięczna za pomoc. RE: Synchronizowanie przekaźnika z wyświetlaczem LCD i modułem RTC - kaczakat - 04-02-2022 Zanim podłączysz przekaźnik użyj LED lub buzera, może jakiś głośnik i generator dźwięku zastąpi przekaźnik w ogóle. A jeśli program zadziała, lecz tylko z przekaźnikiem będą problemy wyszukaj w Google "gasik przekaźnika", RC, był niedawno taki temat na innym forum, są opisy na blogach. Nie jestem przekonany, że dobrze używasz tego zegara, może sam zegar jest po prostu do bani. Czytanie czasu w każdym obiegu loop sprawi, że 99% czasu działania tego programu pochłonie sprawdzanie jaka jest godzina, czy minęła już sekunda. A i tak będzie to mocno przybliżone, bo przecież jest opóźnienie, zegar musi przekazać dość dużo danych, zanim trafi w tę konkretną chwilę może być zajęty czymś innym. Robię tak z millis(), ale uC nie gada wtedy z urządzeniem zewnętrznym, nie muszę mu wysłać polecenia, odebrać wiadomości, przeanalizować w funkcjach i użyć wyników, cała funkcja czas() z millis() trwa kilka us. Albo zrobiłbym to używając millis(), przykłady zobaczysz w ostatnich moich postach, czas z RTC synchronizował okresowo, może co minutę. Albo wziąłbym zegar RTC z wyjściem sygnału prostokątnego 1Hz, jak zegar odliczy nową sekundę to zmienia stan pinu, podłączasz to pod przerwanie zewnętrzne i informacja jest przekazana do Arduino w czasie nanosekund. Jak nie chcesz używać millis, bo tu dokładność też będzie zależeć co jeszcze się pojawi w kodzie, można użyć dwóch wolnych timerów z UNO i ich przerwań. [attachment=1190] Nie wszystkie RTC mają wyprowadzone ten sygnał, a Twój nie ma go raczej wcale. Używasz modulo, ta sekcja Kod: if(myRTC.seconds %10) Można przeprowadzić takie działanie i porównanie, że jeśli reszta z dzielenia przez 10 jest równa 9 to zrób cośtam (lub tylko wtedy nie rób), może tego bardziej szukasz? |