16-07-2023, 17:58
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:
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ę.
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ę.