Skocz do zawartości

Pojazd sterowany przez podczerwień


Pomocna odpowiedź

Napisano (edytowany)

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
(edytowany)

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

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.

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!

(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

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