Skocz do zawartości

Sterowanie przekaźnikami za pomocą przycisków i Arduino


whitedog169

Pomocna odpowiedź

Na wstępie witam wszystkich i dziękuję za ewentualną pomoc.

Mam 6 sztuk przekaźników które chcę załączać 6 przyciskami, jest taki warunek że po wciśnięciu któregokolwiek z 6 przycisków zawsze załącza się tylko ten przekaźnik do którego jest przypisany przycisk, pozostałe są wyłączone. Nie wiem jakiej komendy użyć aby po naciśnięciu przycisku styk na danym przekaźniku został zamknięty na stałe  dopóki nie zostanie wciśnięty którykolwiek z pozostałych przycisków ( obecny kod załącza styki tylko na czas kiedy przycisk jest wciśnięty) tak mi się wydaje bo jeszcze nie testowałem kodu. W założeniu kod ma dla pewności zachować stan wyłączonych przekaźników odczekaniu 2 sekund przed załączeniem właściwego przekaźnika.  Czy nie pomyliłem stanów LOW/HIGH ?

int relayPin8 = 8; // Wejście modułu przekaźnika podłączone do pinu 8
int relayPin9 = 9; // Wejście modułu przekaźnika podłączone do pinu 9
int relayPin10 = 10; // Wejście modułu przekaźnika podłączone do pinu 10
int relayPin11 =11; // Wejście modułu przekaźnika podłączone do pinu 11
int relayPin12 = 12; // Wejście modułu przekaźnika podłączone do pinu 12
int relayPin13 = 13; // Wejście modułu przekaźnika podłączone do pinu 13
void setup(){
  pinMode(relayPin8,OUTPUT); 
  pinMode(relayPin9,OUTPUT); 
  pinMode(relayPin10,OUTPUT); 
  pinMode(relayPin11,OUTPUT); 
  pinMode(relayPin12,OUTPUT); 
  pinMode(relayPin13,OUTPUT); 
  pinMode(2, INPUT); // pin 2 wejście przełacznika
  pinMode(3, INPUT); // pin 3 wejście przełacznika
  pinMode(4, INPUT); // pin 4 wejście przełacznika
  pinMode(5, INPUT); // pin 5 wejście przełacznika
  pinMode(6, INPUT); // pin 6 wejście przełacznika
  pinMode(7, INPUT); // pin 7 wejście przełacznika
  digitalWrite(8, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
  digitalWrite(9, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
  digitalWrite(10, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
  digitalWrite(11, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
  digitalWrite(12, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
  digitalWrite(13, LOW); // wejścia od 8 do 13 wyłączone przy uruchomieniu
} 
void loop(){
if(digitalRead(2) == HIGH) // jeżeli na pinie 2 zamkniemy przełączmik to..
{
  digitalWrite(relayPin9,LOW); // przekażnik wyłącz
  digitalWrite(relayPin10,LOW); // przekażnik wyłącz
  digitalWrite(relayPin11,LOW); // przekażnik wyłącz
  digitalWrite(relayPin12,LOW); // przekażnik wyłącz
  digitalWrite(relayPin13,LOW); // przekażnik wyłącz
  delay(2000);  // czekaj 2 sekundy
  digitalWrite(relayPin8,HIGH); // przekażnik włącz
}
if(digitalRead(3) == HIGH) // jeżeli na pinie 3 zamkniemy przełączmik to..
{
  digitalWrite(relayPin8,LOW);
  digitalWrite(relayPin10,LOW);
  digitalWrite(relayPin11,LOW);
  digitalWrite(relayPin12,LOW);
  digitalWrite(relayPin13,LOW);
  delay(2000); 
  digitalWrite(relayPin9,HIGH);
}
if(digitalRead(4) == HIGH) // jeżeli na pinie 4 zamkniemy przełączmik to..
{
  digitalWrite(relayPin8,LOW);
  digitalWrite(relayPin9,LOW);
  digitalWrite(relayPin11,LOW);
  digitalWrite(relayPin12,LOW);
  digitalWrite(relayPin13,LOW);
  delay(2000); 
  digitalWrite(relayPin10,HIGH);
}
if(digitalRead(5) == HIGH) // jeżeli na pinie 5 zamkniemy przełączmik to..
{
  digitalWrite(relayPin8,LOW);
  digitalWrite(relayPin9,LOW);
  digitalWrite(relayPin10,LOW);
  digitalWrite(relayPin12,LOW);
  digitalWrite(relayPin13,LOW);
  delay(2000); 
  digitalWrite(relayPin11,HIGH);
}
if(digitalRead(6) == HIGH) // jeżeli na pinie 6 zamkniemy przełączmik to..
{
  digitalWrite(relayPin8,LOW);
  digitalWrite(relayPin9,LOW);
  digitalWrite(relayPin10,LOW);
  digitalWrite(relayPin11,LOW);
  digitalWrite(relayPin13,LOW);
  delay(2000); 
  digitalWrite(relayPin12,HIGH);
}
if(digitalRead(7) == HIGH) // jeżeli na pinie 7 zamkniemy przełączmik to..
{
  digitalWrite(relayPin8,LOW);
  digitalWrite(relayPin9,LOW);
  digitalWrite(relayPin10,LOW);
  digitalWrite(relayPin11,LOW);
  digitalWrite(relayPin12,LOW);
  delay(2000); 
  digitalWrite(relayPin13,HIGH);
}
}

 

Link do komentarza
Share on other sites

@whitedog169 witam na forum 🙂

Jeśli chcesz, aby przyciski włączały i wyłączały przekaźniki na stałe to najprościej będzie dorobić zmienne pomocnicze, które będą trzymały informacje o aktualnym stanie przekaźnika. Wtedy po wciśnięciu przycisku sprawdzasz zmienną, ustawiasz przeciwny stan na przekaźniku i zapisujesz go do zmiennej pomocniczej (to jedno z rozwiązań). Najlepiej będzie jeśli zrobisz testowy program dla jednego przekaźnika - łatwiej zrozumiesz to w praktyce.

Link do komentarza
Share on other sites

OK.Dziękuję. Ogarnąłem to na dwóch przekaźnikach i rozbudowałem do 6 sztuk na swoje potrzeby.

Oto kod który działa.

int pushButton2 =2;// piny dla włączników
int pushButton3 =3;// piny dla włączników
int pushButton4 =4;// piny dla włączników
int pushButton5 =5;// piny dla włączników
int pushButton6 =6;// piny dla włączników
int pushButton7 =7;// piny dla włączników
int pushButton13 =13;// piny dla włączników
int relayPin8 = 8; // Wejście modułu przekaźnika podłączone do pinu 8
int relayPin9 = 9; // Wejście modułu przekaźnika podłączone do pinu 9
int relayPin10 = 10; // Wejście modułu przekaźnika podłączone do pinu 10
int relayPin11 =11; // Wejście modułu przekaźnika podłączone do pinu 11
int relayPin12 = 12; // Wejście modułu przekaźnika podłączone do pinu 12
int relayPinA0 = A0; // Wejście modułu przekaźnika podłączone do pinu A0
int pushed[] ={0,0,0,0,0,0,0};
int relayStatus[] ={HIGH,HIGH,HIGH,HIGH,HIGH,HIGH};
void setup() {
    pinMode(pushButton2, INPUT_PULLUP); // określenie statusu przełącznika na pinie 2 jako wejście sygnału
    pinMode(pushButton3, INPUT_PULLUP); // określenie statusu przełącznika na pinie 3 jako wejście sygnału
    pinMode(pushButton4, INPUT_PULLUP); // określenie statusu przełącznika na pinie 4 jako wejście sygnału
    pinMode(pushButton5, INPUT_PULLUP); // określenie statusu przełącznika na pinie 5 jako wejście sygnału
    pinMode(pushButton6, INPUT_PULLUP); // określenie statusu przełącznika na pinie 6 jako wejście sygnału
    pinMode(pushButton7, INPUT_PULLUP); // określenie statusu przełącznika na pinie 7 jako wejście sygnału
    pinMode(pushButton13, INPUT_PULLUP); // określenie statusu przełącznika na pinie 13 jako wejście sygnału
    pinMode(relayPin8, OUTPUT);   // określenie statusu przekaźnika na pinie 8 jako wyjście sygnału
    pinMode(relayPin9, OUTPUT);   // określenie statusu przekaźnika na pinie 9 jako wyjście sygnału
    pinMode(relayPin10, OUTPUT);  // określenie statusu przekaźnika na pinie 10 jako wyjście sygnału
    pinMode(relayPin11, OUTPUT);  // określenie statusu przekaźnika na pinie 11 jako wyjście sygnału
    pinMode(relayPin12, OUTPUT);  // określenie statusu przekaźnika na pinie 12 jako wyjście sygnału
    pinMode(relayPinA0, OUTPUT);  // określenie statusu przekaźnika na pinie A0 jako wyjście sygnału
    digitalWrite(relayPin8, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
    digitalWrite(relayPin9, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
    digitalWrite(relayPin10, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
    digitalWrite(relayPin11, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
    digitalWrite(relayPin12, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
    digitalWrite(relayPinA0, HIGH);// status przekażnika przy uruchomieniu płytki wyłączony OFF
}
void loop() {
 if(digitalRead(2) == LOW) // jeżeli na pinie 2 zamkniemy przełącznik to..
{
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
  delay(500); 
  digitalWrite(relayPin8,LOW);// przekażnik pinu 8 włączony
}
if(digitalRead(3) == LOW) // jeżeli na pinie 3 zamkniemy przełącznik to..
{
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
  delay(500); 
  digitalWrite(relayPin9,LOW);// przekażnik pinu 9 włączony
}
if(digitalRead(4) == LOW) // jeżeli na pinie 4 zamkniemy przełącznik to..
{
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
  delay(500); 
  digitalWrite(relayPin10,LOW);// przekażnik pinu 10 włączony
}
if(digitalRead(5) == LOW) // jeżeli na pinie 5 zamkniemy przełącznik to..
{
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
  delay(500); 
  digitalWrite(relayPin11,LOW);// przekażnik pinu 11 włączony
}
if(digitalRead(6) == LOW) // jeżeli na pinie 6 zamkniemy przełącznik to..
{
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
  delay(500); 
  digitalWrite(relayPin12,LOW);// przekażnik pinu 12 włączony
}
if(digitalRead(7) == LOW) // jeżeli na pinie 7 zamkniemy przełącznik to..
{
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 włączony
  delay(500); 
  digitalWrite(relayPinA0,LOW);// przekażnik pinu A0 włączony
}
if(digitalRead(13) == LOW) // jeżeli na pinie 13 zamkniemy przełącznik to..
{
  delay(500); 
  digitalWrite(relayPin8,HIGH);// przekażnik pinu 8 wyłączony
  digitalWrite(relayPin9,HIGH);// przekażnik pinu 9 wyłączony
  digitalWrite(relayPin10,HIGH);// przekażnik pinu 10 wyłączony
  digitalWrite(relayPin11,HIGH);// przekażnik pinu 11 wyłączony
  digitalWrite(relayPin12,HIGH);// przekażnik pinu 12 wyłączony
  digitalWrite(relayPinA0,HIGH);// przekażnik pinu A0 wyłączony
}
  }

 

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.