Skocz do zawartości
dzarek13

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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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!

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
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!

Gość
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...