• 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
Sterowanie ośmioma przekaźnikami
#1
Witam od jakiegoś czasu próbuje napisać program do sterowania 8 przekaźnikami z różnymi skutkami ( raczej mizernymi )
Potrzebuję wysterować przekaźniki na płytce 8 relay module przycisk zapala po kolei przekaźniki od 1 do 8 z opóźnieniem 1 s i ponowne naciśnięcie przycisku wyłącza przekaźniki od 8 do 1 z opóźnieniem 2 s
załączenie udało się napisać a w drugą stronę to już nie działa,po zaniku napięcia i powrocie układ za łącza przekaźniki (coś namieszałem w programie)
Próbowałem nawet w programach graficznych to zrobią ale nic nie wyszło
Jeżeli ktoś mógł by coś takiego napisać albo podesłać link do programu lub podobnego rozwiązania będę bardzo wdzięczny
bo już zaczynam siwieć

Płytka arduino nano + 8 relay module

Z góry dziękuje i pozdrawiam Piotr
 
Odpowiedź
#2
Pokaż kod programu, który napisałeś. Kod umieszcza się w znacznikach syntax.
Pokaż schemat jak to wszystko podłączyłeś. Schemat ma być elektryczny a nie świąteczne malowanki.
 
Odpowiedź
#3
Programem graficznym próbowałeś zaprogramować Arduino? Nic dziwnego że mizerny skutek...


Wysłane z mojego Neffos Y5s przy użyciu Tapatalka
 
Odpowiedź
#4
ten program załącza przekaźniki

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, INPUT_PULLUP); //Przycisk jako wejście
  digitalWrite(11, INPUT_PULLUP); //Włączenie przekaźnika
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
}

void loop()
{
  if (digitalRead(11) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(2, LOW); //Włącz przekaźnik
    delay(1000); //Czekamy 1 sekund
    digitalWrite(3, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(4, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(5, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(6, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(7, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(8, LOW); //Włącz
    delay(1000); //Czekamy 1 sekund
    digitalWrite(9, LOW); //Włącz

  }
a w drugą stronę ani rusz (ostatni projekt najbardziej skopany nie zapisałem )

a programem graficznym próbowałem bo robiłem kiedyś w systemie drabinkowym a txt to dla mnie czarna magia
 
Odpowiedź
#5
A niby co ma robić w druga stronę jak nic nie napisałeś?

Polecam ten kurs - https://forbot.pl/blog/kurs-arduino-srod...owac-id936

Tam sie wszystkiego dowiesz...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#6
Jeśli to ma być sterowanie jednym przyciskiem, to powinieneś nim zmieniać jakąś flagę.
Może być taka: bool flaga = false;

Kod:
if (digitalRead(11) == LOW) !flaga;

A dalej sprawdzaj stan flagi:

if(flaga) sekwencja włączania światełek;
else sekwencja wyłączania światełek;
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#7
No tak ale przewidział tak zw."drgania styków"?

Wiec takie if (digitalRead(11) == LOW) - wykonaj coś jest do .........
Lepiej użyć jakiejś biblioteki , lub samemu coś wykonać if (digitalRead(11) == LOW) odczekaj chwilę , jeśli nadal if (digitalRead(11) == LOW) wykonaj coś. I nawet jeśli maja być flagi lepiej żeby pamiętał ostatni stan, zeby sie wykonało jednorazowo..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#8
(22-09-2019, 21:41)Jarewa0606 napisał(a): No tak ale przewidział tak zw."drgania styków"? 

Wiec takie if (digitalRead(11) == LOW)  - wykonaj coś jest do ......... 
Lepiej użyć jakiejś biblioteki , lub samemu coś wykonać  if (digitalRead(11) == LOW) odczekaj chwilę , jeśli nadal if (digitalRead(11) == LOW) wykonaj coś. I nawet jeśli maja być flagi lepiej żeby pamiętał ostatni stan, zeby sie wykonało jednorazowo..

Oczywiście, że masz rację.Ja nigdy nie daję gotowego rozwiązania, mogę jedynie naprowadzić na rozwiązanie.
Mogłem napisać to w pseudokodzie aby było jaśniej.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#9
(22-09-2019, 21:41)Jarewa0606 napisał(a): No tak ale przewidział tak zw."drgania styków"? 
Drgania styków to jedno a to, że reakcja na przycisk, przy kodzie napisanym sposobem zaprezentowanym w #4 nastąpi po nawet 14 sekundach, to inna sprawa. Przed autorem postu jeszcze długa nauka podstaw.
 
Odpowiedź
#10
Tak czy inaczej bez choćby umiejętności używania millis() trudno będzie Ci to zrobić. W tamtym kursie na forbocie jest to ostatnia lekcja, a tu na forum mnóstwo przykładów z użyciem millis do zarządzania czasem.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości