Skocz do zawartości

Pojazd sterowany przez podczerwień


dzarek13

Pomocna odpowiedź

Cześć,  mam problem z moim pojazdem sterowanym przez podczerwień, jeśli za komentuję  funkcje od kierunku jazdy program bez problemu rozpoznaje przyciski i wysyła komunikat jaki przycisk jest wciśniety. Natomiast jeśli od komentuję funkcje wykrywa dobrze tylko pierwszy wciśnięty przycisk a wartości następnych przycisków  są  inne niż powinny być.  Wszystko widać na zdjęciach.   Sprzęt Arduino UNO + L293D Shield Motor +IR Receiver z ali . Proszę o pomoc i z góry dziękuję.

Do sterownia pojazdu używam pięciu przycisków 

przycisk 2  (551486205) -> do przód 

przycisk 4 (551542815) -> w lewo 

przycisk 5 (551494365) -> stop

przycisk 6 (551510175) -> w prawo

przycisk 8 (551518845) -> do tyłu

 

Niestety nie mogłem wysłać tutaj zdjęć, wyskakiwał jakiś błąd

https://ibb.co/th1Krv2
https://ibb.co/cc5rtLC

 


#include <IRremote.h>
#include <AFMotor.h>

#define irPin 9

//initial motors pin
AF_DCMotor motor1(1); 
AF_DCMotor motor2(2); 
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

IRrecv irrecv(irPin);
decode_results results;
 
void setup() {
   Serial.begin(9600);
   irrecv.enableIRIn();
}
 
void loop() {
   if (irrecv.decode(&results)) {
      Serial.println(results.value);
      
      switch (results.value) {
         case 551542815:
            //left();
            Serial.println("w lewo");
            break;
 
         case 551486205:
            //forward();
            Serial.println("w gore");
            break;
 
         case 551510175:
            //right();
            Serial.println("w prawo");
            break;
 
         case 551518845:
            //back();
            Serial.println("w dol");
            break;
 
         case 551494365:
            //Stop();
            Serial.println("srodek");
            break;
         }
  
   irrecv.resume();
   }
}


void forward()
{
  motor1.setSpeed(255); //Define maximum velocity
  motor1.run(FORWARD); //rotate the motor clockwise
  motor2.setSpeed(255); //Define maximum velocity
  motor2.run(FORWARD); //rotate the motor clockwise
  motor3.setSpeed(255);//Define maximum velocity
  motor3.run(FORWARD); //rotate the motor clockwise
  motor4.setSpeed(255);//Define maximum velocity
  motor4.run(FORWARD); //rotate the motor clockwise
}

void back()
{
  motor1.setSpeed(255); //Define maximum velocity
  motor1.run(BACKWARD); //rotate the motor anti-clockwise
  motor2.setSpeed(255); //Define maximum velocity
  motor2.run(BACKWARD); //rotate the motor anti-clockwise
  motor3.setSpeed(255); //Define maximum velocity
  motor3.run(BACKWARD); //rotate the motor anti-clockwise
  motor4.setSpeed(255); //Define maximum velocity
  motor4.run(BACKWARD); //rotate the motor anti-clockwise
}

void left()
{
  motor1.setSpeed(255); //Define maximum velocity
  motor1.run(BACKWARD); //rotate the motor anti-clockwise
  motor2.setSpeed(255); //Define maximum velocity
  motor2.run(BACKWARD); //rotate the motor anti-clockwise
  motor3.setSpeed(255); //Define maximum velocity
  motor3.run(FORWARD);  //rotate the motor clockwise
  motor4.setSpeed(255); //Define maximum velocity
  motor4.run(FORWARD);  //rotate the motor clockwise
}

void right()
{
  motor1.setSpeed(255); //Define maximum velocity
  motor1.run(FORWARD); //rotate the motor clockwise
  motor2.setSpeed(255); //Define maximum velocity
  motor2.run(FORWARD); //rotate the motor clockwise
  motor3.setSpeed(255); //Define maximum velocity
  motor3.run(BACKWARD); //rotate the motor anti-clockwise
  motor4.setSpeed(255); //Define maximum velocity
  motor4.run(BACKWARD); //rotate the motor anti-clockwise
} 

void Stop()
{
  motor1.setSpeed(0); //Define minimum velocity
  motor1.run(RELEASE); //stop the motor when release the button
  motor2.setSpeed(0); //Define minimum velocity
  motor2.run(RELEASE); //rotate the motor clockwise
  motor3.setSpeed(0); //Define minimum velocity
  motor3.run(RELEASE); //stop the motor when release the button
  motor4.setSpeed(0); //Define minimum velocity
  motor4.run(RELEASE); //stop the motor when release the button
}

 

Edytowano przez dzarek13
Link do komentarza
Share on other sites

Z tego co pamiętam wszystko co zatrzymuje mikrokontroler: delay itd. powodują że w odbiorze podczerwieni powstają problemy. Jeżeli biblioteka ta korzysta z opóźnień to pewnie nie da się ich pogodzić. Możesz spróbować napisać własny kod, a nawet coś al'a bibliotekę, w której zamiast opóźnień używać będziesz warunki i liczniki czasu, które w momencie przepełniania będą ustawiać jakieś zmienne. Zapoznaj się z funkcją millis() Arduino

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Spróbuj zrobić kolejne funkcje które mają w sobie zawarte kilka warunków. Teraz masz np:. że gny naciskasz przycisk odpowiadający ruchowi do przodu to arduino wykona tylko to polecenie (jazda do przodu), resztę ignoruje. Zrób np że jeżeli masz naciśnięty taki i taki przycisk to jedź tam.

Twój:

case 551542815:

//jakiś program np jazda w prawo

itd..

 

Mój:

case 551542815 && i jeszcze jakiś:

//jakiś program

 

Czyli masz program który rozpoznaje czy naciskasz tylko jeden przycisk czy kilka. Gdy naciskasz jeden to dostajesz tylko te przycisk, gdy 2 to dostajesz 2 kody w hexa. Czyli gdy masz naciśnięte 2 przyciski to ma wykonać połączony program. Np: naciskasz górny i prawy to kod wie że nie naciskasz ich osobno tylko razem i wtedy dopasuj resztę programu.

Wiem że kiepsko wytłumaczone bo to nie jest moja mocna strona, jak nie rozumiesz to napisz to postaram się to lepiej powiedzieć i może wyślę przykład.

Link do komentarza
Share on other sites

Dobra widzę o co chodzi. Niestety musisz to tych funkcji użyć kilku różnych przycisków. Np:

- do przodu - 2

-tył - 8

- lewo - 4

-prawo - 6

-góra lewo - 1

-góra prawo - 3

-dół lewo - 7

-dół prawo - 9

 

I wtedy w programie odpowiednio do wybranego kierunku piszesz jak ma się zachować L298.

Powodzenia!

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)

Do sterownia pojazdu używam pięciu przycisków (zapomniałem od razu napisać)

przycisk 2  (551486205) -> do przód 

przycisk 4 (551542815) -> w lewo 

przycisk 5 (551494365) -> stop

przycisk 6 (551510175) -> w prawo

przycisk 8 (551518845) -> do tyłu

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