• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujnik zmierzchu a elektryczne rolety?
#1
Question 
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.  



Załączone pliki Miniatury
   
 
Odpowiedź
#2
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości