Skocz do zawartości

Relay Module/ Przekaźnik terminal


patryczek803

Pomocna odpowiedź

Witam wszystkich podłączyłem relay switcha do mojej starej lampki od biurka. Wszystko działa super za wyjątkiem jednej rzeczy. Mianowicie kiedy uruchamiam pierwszy raz terminal lampka mi sie włącza i wyłącza. Jak tego uniknąć? Tutaj mój kod:

int relayPin = 6;

String receivedData = "";

void setup() {

pinMode(relayPin, OUTPUT);

Serial.begin(9600);

Serial.println("Turn your lamp on or off");

digitalWrite(relayPin, HIGH);

}

void loop() {

if(Serial.available() > 0) {

//If yes, read and save in variable dataReceived

receivedData = Serial.readStringUntil('\n');

if (receivedData == "on") {

digitalWrite(relayPin, LOW); //Turn on Relay/Turn on lamp

Serial.println("Lamp is on");

}

else if (receivedData == "off") { //Turn off Relay,Turn off lamp

digitalWrite(relayPin, HIGH);

Serial.println("Lamp is off");

}

else{

Serial.println("Bad Choice");

Serial.println("You can choose: on or off");

}

}

}

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Link do komentarza
Share on other sites

Nie da się. Arduino jest tak zbudowane, że otwarcie połączenia szeregowego resetuje płytkę. Musiałbyś pokombinować ze znalezieniem ścieżki od linii DTR i przecięciem jej -- ale wtedy będziesz musiał sam naciskać ręcznie reset przy programowaniu.

[ Dodano: 17-01-2017, 01:02 ]

Tak wogóle, to zakładam, że używasz Arduino, bo nie byłeś łaskaw napisać co to jest.

  • Lubię! 1
Link do komentarza
Share on other sites

Hm, dlaczego się nie da? Przecież to tylko kwestia zapewnienia odpowiedniego stanu na pinie procesora podczas resetu aż do czasu pierwszego wysterowania przez program. Jeśli przekaźnik włączany jest w stanem niskim, to daj opornik podciągający na pinie 6 do Vcc, np. coś w granicach 1k-2.2kΩ i po sprawie. Lampka załączy się dopiero po zaprogramowaniu tego pinu na wyjście i wysłaniu tam zera.

Acha, musisz zrobić to blisko siebie i w tej kolejności:

digitalWrite(relayPin, HIGH); 
pinMode(relayPin, OUTPUT);

Wtedy na pewno żadne niechciane zero się nie pojawi 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Hm, dlaczego się nie da? Przecież to tylko kwestia zapewnienia odpowiedniego stanu na pinie procesora podczas resetu aż do czasu pierwszego wysterowania przez program. Jeśli przekaźnik włączany jest w stanem niskim, to daj opornik podciągający na pinie 6 do Vcc, np. coś w granicach 1k-2.2kΩ i po sprawie. Lampka załączy się dopiero po zaprogramowaniu tego pinu na wyjście i wysłaniu tam zera.

Acha, musisz zrobić to blisko siebie i w tej kolejności:

digitalWrite(relayPin, HIGH); 
pinMode(relayPin, OUTPUT);

Wtedy na pewno żadne niechciane zero się nie pojawi 🙂

Dzięki wielkie za odpowiedź. Dopiero zaczynam, co masz na myśli mowiac zeby dodac opornik podciagajacy na pinie 6 do VCC? I jaki jest mechanizm działania zaproponowanego przez Ciebie rozwiazania?

Link do komentarza
Share on other sites

To proste. Linie I/O procesora są domyślnie w trybie INPUT. Po włączeniu zasilania lub po podaniu sygnału RESET procesor samodzielnie (sprzętowo) ustawia je w ten sposób, żeby nikomu na zewnątrz nie zrobić krzywdy. Chwilę potem kontrolę nad płytką przejmuje program bootloadera Arduino a dopiero za kolejną chwilę (gdy akurat nie ładujesz swojego kodu) bootloader startuje Twój program który wgrałeś kiedyś tam wcześniej. I dopiero on ustawia odpowiedni kierunek i stany na liniach I/O w funkcji setup(). I w czasie tych 1-2s linie procesora są wejściami czyli nie wysyłają ani 0 ani 1. Teraz wszystko zależy od podłączonego tam urządzenia. Nie napisałeś co to za "relay switch", ale z tekstu programu domyślam się, że przekaźnik włączasz stanem 0. No i widocznie taki stan pojawia się tam na chwilę, w niekontrolowany sposób włączając przekaźnik jeszcze zanim wystartuje setup() ze swoimi pinMode(). Taką "wiszącą w powietrzu" bo niesterowaną poprawnie linię I/O można zmusić do bycia w stanie 1 lub zero przez podłączenie do niej opornika: jeden jego koniec do linii, drugi do Vcc procesora (5V) - gdy chcesz by była w stanie 1, lub do GND - gdy potrzebujesz stanu 0. Kiedy już program ruszy i zaprogramuje kierunki portów, bez problemu poradzi sobie z "przełamaniem" ciągnącego w którąś stronę opornika.

To wszystko powyższe jest tylko ogólnym opisem. Ponieważ nic nie wiemy o tym co podłączyłeś (schemat, nazwa, link do strony sklepu) może się okazać, że jakaś istotna wada tego czegoś utrudni lub zniweluje działanie opornika podciągającego. Musisz podać więcej informacji. Zawsze w pytaniach opisuj: jakie Arduino, jak je zasilasz i co dokładnie (z nazwy i typu) podłączasz. Schemat też jest mile widziany.

Twoje pytanie trochę mnie martwi, bo "opornik podciągający" i tryby pracy portów to przedszkole elektroniki/Arduino podane na tacy nawet w kursach elektroniki na Forbocie. Zabrałeś się za zdalne sterowania itp na skróty, bez zawracania sobie głowy podstawami?

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.