Skocz do zawartości

Siłownik elektryczny – problem ze sterowaniem


astony

Pomocna odpowiedź

Witam.

Niby proste a jednak. Chcę zbudować siłownik elektryczny na mostku H . Jeżeli nic się nie dzieje nie mruga LED.

Po przyciśnięciu "up", program  ma sprawdzić czy siłownik doszedł do końca. Jeżeli tak to nie ruszy. Jeżeli nie to rusza aż do krańcówki.

Nastepuje wyłączenie silnika. Niestety w tej chwili silnik nie idzie, dioda nie mruga, a program wydaje się normalny

Program :

  • czy nacisnięto "up - tak/nie
  • czy siłownik jest w pozycji końcowej (N_kon) - tak/nie
  • jezeli tak to "N_motorPrawo",  aż do N_pocz
  • N_motor stop
  • mruga LED

To samo w lewo. Jeżeli nic się nie dzieje nie mruga LED.

//piny 

//2,3,4,5 N_motor
#define N_motorA 2 
#define N_motorB 3
#define N_motorC 4
#define N_motorD 5
//sterowanie up/down
#define N_up  0
#define N_down 1
// krańcówka początek /koniec
#define N_pocz 14
#define N_kon 15

void setup() {
  pinMode (N_motorA, OUTPUT);
  pinMode (N_motorB, OUTPUT);
  pinMode (N_motorC, OUTPUT);
  pinMode (N_motorD, OUTPUT);
  pinMode (N_up,INPUT_PULLUP);//przyciski
  pinMode (N_down,INPUT_PULLUP);
  pinMode (N_pocz,INPUT_PULLUP);//krańcówki
  pinMode (N_kon,INPUT_PULLUP);
  digitalWrite(N_pocz, HIGH);
  digitalWrite(N_kon, HIGH);
  digitalWrite(N_motorA,HIGH);//silnik STOP
  digitalWrite(N_motorD,HIGH);
  digitalWrite(N_motorB,HIGH);
  digitalWrite(N_motorC,HIGH); 
}
void loop() {
 if (digitalRead(N_up)==LOW)
 {
   if(digitalRead(N_pocz)==LOW)
   {
      N_motorLEWO();
     while (digitalRead(N_kon)==LOW) {} 
     N_motorSTOP();
    }
 } 
if (digitalRead(N_down)==LOW){   
 if (digitalRead(N_kon)==LOW){
    N_motorPRAWO();
    while (digitalRead(N_pocz)==LOW) {} 
    N_motorSTOP();
 }
}  
  digitalWrite(13, HIGH);
  delay (500);
  digitalWrite(13, LOW);
  delay(500);
}
void N_motorPRAWO(){   
     digitalWrite(N_motorB,HIGH);
     digitalWrite(N_motorC,HIGH);
     digitalWrite(N_motorA,LOW);
     digitalWrite(N_motorD,LOW);
  }
void N_motorSTOP() {
   digitalWrite(N_motorA,HIGH);//silnik STOP
   digitalWrite(N_motorD,HIGH);
   digitalWrite(N_motorB,HIGH);
   digitalWrite(N_motorC,HIGH);
}   
void N_motorLEWO() {
    digitalWrite(N_motorA,HIGH);
   digitalWrite(N_motorD,HIGH);
   digitalWrite(N_motorB,LOW);
   digitalWrite(N_motorC,LOW);
  }

Dlaczego to nie działa ?

Edytowano przez Gieneq
brak pytania
Link do komentarza
Share on other sites

22 godziny temu, astony napisał:

Niestety w tej chwili silnik nie idzie,

Niezabardzo rozumiem istotę problemu. Chwilowo pomijając cały algorytm i sekwencje ruchu tego siłownika, to czy w ogóle możesz nim sterować? Czy jak podasz sygnały na mostek H to porusza się tak jak powinien?

Link do komentarza
Share on other sites

(edytowany)

Na chwilę obecna podpiąłem LED'y pod piny 2,3 i mam brak reakcji. W moim pytaniu chodziło o to czy algorytm jest prawidłowy. 

Przycisk "up" AND "N_kon" powinno spowodować zaświecenie chociaż jednego LED'a, a tu nic.

Całość mam na płycie shield. Dopiero zaczynam programować i nie wiem jak zachowa się "while". Liczyłem na skontrolowanie przedstawionego kodu.

Siłownik , jeżeli jest na początku (naciska N_pocz), to chociaż nacisnę "N_up", to siłownik ma stać.

Po naciśnięciu "N_down", ma ruszyć, aż naciśnie "N_kon".

Edytowano przez astony
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.