Arduino Polska Forum

Pełna wersja: Czujnik zmierzchu a elektryczne rolety?
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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.  

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.