Skocz do zawartości

Brak reakcji połowy przekaźników arduino


Pomocna odpowiedź

Napisano

Witam. Napisałem dość prosty kod (tak mi się wydawało przynajmniej), lecz po jego wgraniu i odpaleniu tylko część działa a druga część nie ma ochoty nawet ruszyć. Kod steruje pracą czterech przekaźników w zależności od wciśniętego przycisku RP i DP oraz krańcówek RK i DK. Problem w tym że przekaźniki działają tylko w połowie po przepięciu ich na gniazda tych co działają zaczynają działać.

 

int przekaznik1 = 0;
int przekaznik2 = 1;
int przekaznik3 = 2;
int przekaznik4 = 3;
int D = 5;
int N = 6;
int R = 7;
int koniecD = 8;
int koniecN = 9;
int koniecR = 10;

int DP;
int DK;
int RP;
int RK;
void setup() 
 {
pinMode(przekaznik1 , OUTPUT);
pinMode(przekaznik2 , OUTPUT);
pinMode(przekaznik3 , OUTPUT);
pinMode(przekaznik4 , OUTPUT);

pinMode(D , INPUT_PULLUP);
pinMode(N , INPUT_PULLUP);
pinMode(R , INPUT_PULLUP);

pinMode(koniecD , INPUT_PULLUP);
pinMode(koniecN , INPUT_PULLUP);
pinMode(koniecR , INPUT_PULLUP);



digitalWrite(przekaznik1 , HIGH);
digitalWrite(przekaznik2 , HIGH);
digitalWrite(przekaznik3 , HIGH);
digitalWrite(przekaznik4 , HIGH);






}

void loop()
{
   DP = digitalRead(D);
   DK = digitalRead(koniecD);
   RP = digitalRead(R);
   RK = digitalRead(koniecR);
   
   
   if(DP == LOW & DK == HIGH) {
    digitalWrite(przekaznik1 , LOW);
    digitalWrite(przekaznik2 , LOW);
   }
   else {  digitalWrite(przekaznik1 , HIGH);
           digitalWrite(przekaznik2 , HIGH);
   
   }

   if(RP == LOW & RK == HIGH) {
    digitalWrite(przekaznik3 , LOW);
    digitalWrite(przekaznik4 , LOW);
   }
   else {  digitalWrite(przekaznik3 , HIGH);
           digitalWrite(przekaznik4 , HIGH);
   }


}

 

(edytowany)

Cześć, trochę za mało danych o Twoim systemie napisałeś, może po prostu nie jest spełniony warunek dla zadziałania tej pary przekaźników która "nie działa".

 Poza tym ja bym zamiast tak:

if(RP == LOW & RK == HIGH)

zapisał to tak:

if((RP == LOW) && (RK == HIGH))

Poczytaj o AND:

https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicaland/

Edytowano przez SOYER
  • Lubię! 1

Fakt mogłem troszkę bardziej go opisać. Więc tak cały system ma sterować kierunkiem obrotu silnika DC. Do przełączania mają służyć dwa przyciski opisane kolejno w kodzie D i R ( N narazie pomijam bo to nie jest ważne). Silnik sterujemy pewnym wałem który przesuwa ośką do przodu i do tyłu i do ograniczenia ruchu służą dwie krańcówki koniecD i koniecR ( koniec N narazie pomijam). Arduino podpięte jest pod cztery przekaźniki i po naciśnięciu przycisku D mają się załączyć dwa pierwsze a gdy wałek dotknie krańcówki to ma się wyłączyć, a drugi przycisk steruje analogicznie drugim zestawem przekaźników i krańcówką. Mam nadzieje że w miare przejrzyście wyjasniłem.

(edytowany)

Zamieniłem te ify i dalej to samo a warunki są na pewno dobrze spełnione bo zamieniając w kodzie numery przekaźników tak samo działa tylko ta część :

 if((DP == LOW) && (DK == HIGH)) {
    digitalWrite(przekaznik1 , LOW);
    digitalWrite(przekaznik2 , LOW);
   }
   else {  digitalWrite(przekaznik1 , HIGH);
           digitalWrite(przekaznik2 , HIGH);

a ta nie działa :

  if((RP == LOW) && (RK == HIGH)) {
    digitalWrite(przekaznik3 , LOW);
    digitalWrite(przekaznik4 , LOW);
   }
   else {  digitalWrite(przekaznik3 , HIGH);
           digitalWrite(przekaznik4 , HIGH);

 

Edytowano przez Lolheadshootpl
12 minut temu, Lolheadshootpl napisał:

dalej to samo a warunki są na pewno dobrze spełnione

 

Jesteś pewny, że przycisk DP i krańcówkę DK masz podpiętą w ten sam sposób co RP i RK? 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...