Problem z połączeniem warunków, opóźnieniem i kontaktronem - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: Problem z połączeniem warunków, opóźnieniem i kontaktronem (/watek-problem-z-po%C5%82%C4%85czeniem-warunk%C3%B3w-op%C3%B3%C5%BAnieniem-i-kontaktronem) |
Problem z połączeniem warunków, opóźnieniem i kontaktronem - krulas123 - 06-01-2017 Hej, mam nadzieję, że w miarę dobrze to nazwałem i odpowiedni dział. Do rzeczy. Mam kontaktron w drzwiach od szafy przesuwnej, po otwarciu drzwi, chcę aby załączał się przekaźnik który będzie miał dwie możliwości wyłączenia, albo po zamknięciu drzwi, albo po upływie np minuty. O ile pojedynczo obie metody nie robią problemów o tyle z połączeniem ich mam problem. Poniżej kod na typowy button, jest jakaś prosta opcja go zmodyfikować, na innym forum dostałem tylko odp aby skorzystać z millis() ale nie wiem jak się za to zabrać aby w dalszym stopniu mieć połączone te warunki. Ma ktoś z was jakiś pomysł jak to zrobić z jakimś przykładem, ewentualnie modyfikacją tego kodu Kod: int button = 9; RE: Problem z połączeniem warunków, opóźnieniem i kontaktronem - piotr2393 - 06-01-2017 Opcja z metodą milis(): -deklarujesz nową zmienną, najlepiej typu long i w momencie otwarcia szafy (przy wejściu w odpowiedniego if'a) przypisujesz jej aktualną wartość zwróconą przez milis() - tworzysz kolejnego if'a z warunkiem alternatywy (lub) Warunki wyłączenia czyli wyrzucasz digitalWrite(przekaznik, HIGH) : - po upływie minuty (wartość utworzonej zmiennej + 60*1000ms) LUB - po odczycie stanu LOW na button'ie RE: Problem z połączeniem warunków, opóźnieniem i kontaktronem - krulas123 - 06-01-2017 Jeśli chodzi o takie coś to nie działa wyłączanie po upływie czasu, dopiero po zwarciu kontaktronu wyłącza przekaźnik Kod: unsigned long czas; RE: Problem z połączeniem warunków, opóźnieniem i kontaktronem - Smaczek - 07-01-2017 Witam, Bo tak nie ma prawa działać. Musisz do pierwszej zmiennej zczytac za pomocą millis () czas załączenia a następnie co wykonanie pętli ponownie czytać wartość z millis i sprawdzać czy różnica tych dwóch wartości przekroczyła 300. W Twoim if-ie brakuje wywołania millis. Pozdrawiam. RE: Problem z połączeniem warunków, opóźnieniem i kontaktronem - piotr2393 - 07-01-2017 Dokładnie o to mi chodziło, zmień tylko pierwszy warunek w if'ie wyłączającym na: Kod: if(millis() > czas + 3000 || digitalRead(kontaktron) == LOW) To powinno śmigać tak jak sobie zakładasz, pozdrawiam RE: Problem z połączeniem warunków, opóźnieniem i kontaktronem - krn78 - 10-01-2017 Pisałem już gdzieś o tym i powtarzał będę: o wiele łatwiej i pewniej jest sterować za pomocą przycisków (i, rzecz jasna, kontaktronów i innych elementów stykowych) stanem niskim, nie wysokim. W takim przypadku należy przycisk podłączyć do masy, nie do zasilania, a następnie: Kod: void setup(){ |