Skocz do zawartości

Brak reakcji połowy przekaźników arduino


Lolheadshootpl

Pomocna odpowiedź

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);
   }


}

 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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.

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

(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
Link do komentarza
Share on other sites

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? 

Link do komentarza
Share on other sites

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...

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.