Arduino Polska Forum
Czujnik zmierzchu a elektryczne rolety? - 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: Czujnik zmierzchu a elektryczne rolety? (/watek-czujnik-zmierzchu-a-elektryczne-rolety)



Czujnik zmierzchu a elektryczne rolety? - apool1998 - 31-01-2018

Witam, mam plan, a nie mam do końca wiedzy i umiejętności aby go zrealizować.Dlatego chciałbym się tutaj dowiedzieć co nieco , a raczej co robię źle. Mój zamysł to rolety elektryczne które same chowały się pod wieczór ,a rozwijały nad ranem, w kwestii czysto mechanicznej mam już wszytko przygotowane. A zaczęły się problemy gdy przyszło napisać program, w internecie szukałem jakiś szablonów , ale wszystkie były na temat " ciemno -pali się światło , jasno - nie pali się światło)a zależy mi na tym aby gdy się robi ciemno ,sygnał był w stanie wysokim przez 5 sec ( bo tyle wynosi potrzebny czas aby silniczek rozwiną/zwiną ) rolety. A po 5 sekundach był w stanie niskim do momentu gdy pewna wartość światła padnie na fotorezystor i znowu wysteruje 5 sec (oczywiście trzeba było zrobić to na 2 wyjścia aby móc silniczkiem sterować w dwie strony , dwoma przekaźnikami).Oto moje wypociny już po tylu modyfikacjach że sam nie mogę dojść tołku.  




RE: Czujnik zmierzchu a elektryczne rolety? - krn78 - 31-01-2018

Przede wszystkim, nie wklejaj obrazków, ale kod programu (wewnątrz znaczników: code).
Wstaw sobie dodatkową zmienną, która przechowuje stan rolet (podniesione lub opuszczone). Może być typu bool, bo więcej nie potrzeba. Potem, w zależności od jej stanu (HIGH lub LOW) decyduj, co program ma robić. W pętlach można łączyć warunki za pomocą AND i OR, wykorzystaj je.
Warto też, żebyś wstawił jakiekolwiek czujniki stanu rolet, które powiedzą, czy roleta jest otwarta, czy zamknięta.

Kolejna rzecz:
Kod:
while(digitalWrite(8, OUTPUT));
Ta linia nie ma sensu z co najmniej dwóch powodów. Pierwszy jest taki, że na końcu linii wstawiłeś średnik. Oznacza to, że jeśli warunek while jest spełniony, wykona się to, co znajduje się za nawiasem zamykającym warunek a średnikiem. Innymi słowy: nic. Ta pętla będzie się wykonywać w nieskończoność, właściwie wieszając program. Drugi powód jest taki, że funkcja digitalWrite przyjmuje jako parametry dwie wartości. Pierwsza to pin, którego ma dotyczyć (w Twoim przypadku: 8), druga to stan pinu, jaki ma być ustawiony (u Ciebie stan pinu to OUTPUT, gdzie powinna być to wartość LOW lub HIGH, ewentualnie 0 lub 1).

Gdybym ja miał napisać taki program, powiedziałbym, że:
1. Jeśli roleta jest opuszczona i odczyt z czujnika światła jest mniejszy niż 100, to podnoś roletę tak długo, aż będzie podniesiona.
2. Jeśli roleta jest podniesiona i odczyt z czujnika światła jest większy niż 100, to opuszczaj roletę tak długo, aż będzie opuszczona.