• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ArUNO/IR/L293D
#1
Cześć, więc ogólnie powiem, że jestem dosyć świeży jeżeli chodzi o sprawy programowania i opieram się w głównej mierze już na istniejących programach próbując je przerabiać tak żeby spełniał moje oczekiwania.

Po wielokrotnej próbie odkodowania przycisków pilota IR finalnie mi się udało. Następnym moim krokiem jest zarządzanie sterownikiem L293D za pomocą tego otóż pilota tak żeby mój projekt wykonywał kolejno skręty w prawo i lewo, jechał do przodu i do tyłu oraz się zatrzymywał, czyli pięć przycisków.

Odkodowałem sobie te przyciski w wartościach HEX, DEC i jeszcze mam je zapisane jako liczby dziesiętne 70/64 itd..

Po 3-4 nockach zabawy z ctrl+c i ctrl+v przeróżnych kodów natrafiłem na jakiś kod, na który w jakikolwiek sposób silniczki reagowały i tak przystąpiłem do przerabiania go (pewnie źle). 

Wyszło mi to tak, że arduino reaguje na każdy przycisk z pilota, a nie tylko określone w programie (5).

Ogólnie dużo programów już istniejących opiera się na tej starej bibliotece IR, w tym właśnie przypadku nic mi nie działa.

W serial monitorze dla tej starej biblioteki jest poradnik jak przekonwertować program 2.0 dla 4.0 dla IRremote ale nieudolnie próbuje przez to przebrnąć.

Mój obwód wygląda następująco: https://www.tinkercad.com/things/7W6tBfb...te-control

Zamiast pojedynczej diody IR, zakupiłem taki mniejszy moduł: https://botland.com.pl/odbiorniki-podcze...8kEALw_wcB



Cały kod zamieszczam poniżej:

Kod:
#include <IRremote.hpp>
#include <IRremote.h>
#define SUPPRESS_ERROR_MESSAGE_FOR_BEGIN

int IR_RECEIVE_PIN = 2;
int motor_pin1 = 13;    // Left motor
int motor_pin2 = A4;
int motor_pin3 = A2;    // Right motor
int motor_pin4 = A1;

void setup ()
{
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  pinMode(motor_pin1,OUTPUT);    // Left motor
  pinMode(motor_pin2,OUTPUT);
  pinMode(motor_pin3,OUTPUT);    // Right motor
  pinMode(motor_pin4,OUTPUT);
  Serial.begin(9600);
}

void loop() {
 
  //if some date is sent, reads it and saves in state
   if (IrReceiver.decode()) {
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.printIRResultShort(&Serial);
    IrReceiver.printIRSendUsage(&Serial);
    IrReceiver.resume();   // Receive the next value
    }
 
   if (IrReceiver.decode(0xB946FF00) ) {   // VOL+ this is where you put in your IR remote button #
    digitalWrite(motor_pin1,LOW);      // Left motor forward
    digitalWrite(motor_pin2,HIGH);
    digitalWrite(motor_pin3,LOW);      // Right motor forward
    digitalWrite(motor_pin4,HIGH);
    {
      Serial.println("Go Forward!");
      }
    }
   
  //if some date is sent, reads it and saves in state   
  if (IrReceiver.decode()) {
    IrReceiver.resume();   // Receive the next value
    }

    if (IrReceiver.decode(0xEA15FF00))
    { 
      digitalWrite(motor_pin1,HIGH);      // Left motor backward
      digitalWrite(motor_pin2,LOW);
      digitalWrite(motor_pin3,HIGH);      // Right motor backward
      digitalWrite(motor_pin4,LOW);
      {
        Serial.println("Go Backward!");
      }
    }


 
  if (IrReceiver.decode())
  {
    IrReceiver.resume();   // Receive the next value
  }
 
    if (IrReceiver.decode(0xBB44FF00)) {
      digitalWrite(motor_pin1,HIGH);      // Left motor backward
      digitalWrite(motor_pin2,LOW);     
      digitalWrite(motor_pin3,LOW);       // Right motor forward
      digitalWrite(motor_pin4,HIGH);
      {
        Serial.println("Turn Left!");
      }
    }
   
 
  if (IrReceiver.decode()) {
    IrReceiver.resume();   // Receive the next value
    }
   
    if (IrReceiver.decode(0xBC43FF00)) {
      digitalWrite(motor_pin1,LOW);       // Left motor forward
      digitalWrite(motor_pin2,HIGH);   
      digitalWrite(motor_pin3,HIGH);      // Right motor backward
      digitalWrite(motor_pin4,LOW);
      {
        Serial.println("turn Right!");
      }
    }

  //if some date is sent, reads it and saves in state
  if (IrReceiver.decode()) {
    IrReceiver.resume();   // Receive the next value
    }
   
    if (IrReceiver.decode(0xBF40FF00)) {
      digitalWrite(motor_pin1,LOW);      
      digitalWrite(motor_pin2,LOW);   
      digitalWrite(motor_pin3,LOW);      
      digitalWrite(motor_pin4,LOW);
      {
        Serial.println("Stop!");
      }
    }
}



Cały post zamieszczam z prośbą/pytaniem o ewentualne poprawki bądź nakreślenie w którą stronę z tym kodem zmierzać, z góry dziękuję.
 
Odpowiedź
  


Wiadomości w tym wątku
ArUNO/IR/L293D - przez BartoReyon - 16-07-2023, 17:58
RE: ArUNO/IR/L293D - przez kaczakat - 17-07-2023, 01:18
RE: ArUNO/IR/L293D - przez MadMrQ - 18-07-2023, 09:38

Skocz do:


Przeglądający: 1 gości