При нажатии на любую кнопку ИК-пульта получаю код FFFFFFFF

Купил детям Keyestudio 4WD BT Multi-purpose Car V2.0

Собрал. Ардуино установил, библиотеки.
Но при подключению к компьютеру в мониторе вижу один и тот же код FFFFFFFF на какую бы кнопку не нажимал. И с одного и с другого пульта.

Помогите пожалуйста разобраться в чем дело. Новичок в Ардуино, да и вообще в программировании.

КОД НИЖЕ:

//*******************************************************************************

/*

keyestudio 4wd BT Car

lesson 14

IR remote Control Car

*/

#define SCL_Pin A5 //Set the clock pin to A5

#define SDA_Pin A4 //Set data pin to A4

//Array, used to store the data of pattern, can be calculated by yourself or obtained from the modulus tool

unsigned char start01[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

unsigned char front[] = {0x00,0x00,0x00,0x00,0x00,0x24,0x12,0x09,0x12,0x24,0x00,0x00,0x00,0x00,0x00,0x00};

unsigned char back[] = {0x00,0x00,0x00,0x00,0x00,0x24,0x48,0x90,0x48,0x24,0x00,0x00,0x00,0x00,0x00,0x00};

unsigned char left[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x10,0x44,0x28,0x10,0x44,0x28,0x10,0x00};

unsigned char right[] = {0x00,0x10,0x28,0x44,0x10,0x28,0x44,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00};

unsigned char STOP01[] = {0x2E,0x2A,0x3A,0x00,0x02,0x3E,0x02,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x0A,0x0E,0x00};

unsigned char clear[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

#include <Arduino.h>

#include <IRremote.h>//function library of IR remote control

int RECV_PIN = 3;//set the pin of IR receiver to D3

IRrecv irrecv(RECV_PIN);

long irr_val;

decode_results results;

int left_ctrl = 2;//define the direction control pins of group B motor

int left_pwm = 5;//define the PWM control pins of group B motor

int right_ctrl = 4;//define the direction control pins of group A motor

int right_pwm = 6;//define the PWM control pins of group A motor

#include <Servo.h>

Servo servo_A3;//set the pin of servo to A3

unsigned char data_line = 0;

unsigned char delay_count = 0;

void setup() {

Serial.begin(9600);//

// In case the interrupt driver crashes on setup, give a clue

// to the user what’s going on.

Serial.println(“Enabling IRin”);

irrecv.enableIRIn(); // Start the receiver

Serial.println(“Enabled IRin”);

pinMode(left_ctrl,OUTPUT);//set direction control pins of group B motor to OUTPUT

pinMode(left_pwm,OUTPUT);//set PWM control pins of group B motor to OUTPUT

pinMode(right_ctrl,OUTPUT);//set direction control pins of group A motor to OUTPUT

pinMode(right_pwm,OUTPUT);//set PWM control pins of group A motor to OUTPUT

servo_A3.attach(A3);

servo_A3.write(90);//the angle of servo is 90 degree

delay(300);

pinMode(SCL_Pin,OUTPUT);// Set the clock pin to output

pinMode(SDA_Pin,OUTPUT);//Set the data pin to output

matrix_display(clear);

matrix_display(start01); //display start01 expression pattern

}

void loop()

{

if (irrecv.decode(&results))

{

irr_val = results.value;

Serial.println(irr_val, HEX);//serial prints the read IR remote signals

switch(irr_val)

{

case 0xFF629D : car_front(); //Receive 0xFF629D,the car goes forward

matrix_display(clear);

matrix_display(front);

break;

case 0xFFA857 : car_back(); //Receive 0xFFA857,the car goes back

matrix_display(clear);

matrix_display(back);

break;

case 0xFF22DD : car_left(); //Receive 0xFF22DD,the car left rotates

matrix_display(clear);

matrix_display(left);

break;

case 0xFFC23D : car_right();//Receive 0xFFC23D,the car right rotates

matrix_display(clear);

matrix_display(right);

break;

case 0xFF02FD : car_Stop();//Receive 0xFF02FD,the car stops

matrix_display(clear);

matrix_display(STOP01);

break;

}

irrecv.resume(); // Receive the next value

}

}

void car_front()//define the state of going front

{

digitalWrite(left_ctrl,HIGH);

analogWrite(left_pwm,105);

digitalWrite(right_ctrl,HIGH);

analogWrite(right_pwm,105);

}

void car_back()//define the status of going back

{

digitalWrite(left_ctrl,LOW);

analogWrite(left_pwm,150);

digitalWrite(right_ctrl,LOW);

analogWrite(right_pwm,150);

}

void car_left()//set the status of left turning

{

digitalWrite(left_ctrl, LOW);

analogWrite(left_pwm, 100);

digitalWrite(right_ctrl, HIGH);

analogWrite(right_pwm, 155);

}

void car_right()//set the status of right turning

{

digitalWrite(left_ctrl, HIGH);

analogWrite(left_pwm, 155);

digitalWrite(right_ctrl, LOW);

analogWrite(right_pwm, 100);

}

void car_Stop()//define the state of stop

{

digitalWrite(left_ctrl,LOW);

analogWrite(left_pwm,0);

digitalWrite(right_ctrl,LOW);

analogWrite(right_pwm,0);

}

//this function is used for dot matrix display

void matrix_display(unsigned char matrix_value[])

{

IIC_start(); //the function that calls the data transfer start condition

IIC_send(0xc0); //select address

for (int i = 0; i < 16; i++) //the pattern data is 16 bytes

{

IIC_send(matrix_value[i]); //Transmit the data of the pattern

}

IIC_end(); //End pattern data transmission

IIC_start();

IIC_send(0x8A); //Display control, select 4/16 pulse width

IIC_end();

}

//Conditions under which data transmission begins

void IIC_start()

{

digitalWrite(SDA_Pin, HIGH);

digitalWrite(SCL_Pin, HIGH);

delayMicroseconds(3);

digitalWrite(SDA_Pin, LOW);

delayMicroseconds(3);

digitalWrite(SCL_Pin, LOW);

}

//Indicates the end of data transmission

void IIC_end()

{

digitalWrite(SCL_Pin, LOW);

digitalWrite(SDA_Pin, LOW);

delayMicroseconds(3);

digitalWrite(SCL_Pin, HIGH);

delayMicroseconds(3);

digitalWrite(SDA_Pin, HIGH);

delayMicroseconds(3);

}

//transmit data

void IIC_send(unsigned char send_data)

{

for (byte mask = 0x01; mask != 0; mask <<= 1) //Each byte has 8 bits and is checked bit by bit starting at the lowest level

{

if (send_data & mask) { //Sets the high and low levels of SDA_Pin depending on whether each bit of the byte is a 1 or a 0

digitalWrite(SDA_Pin, HIGH);

} else {

digitalWrite(SDA_Pin, LOW);

}

delayMicroseconds(3);

digitalWrite(SCL_Pin, HIGH); //Pull the clock pin SCL_Pin high to stop data transmission

delayMicroseconds(3);

digitalWrite(SCL_Pin, LOW); //pull the clock pin SCL_Pin low to change the SIGNAL of SDA

}

}

//*******************************************************************************

Прежде чем что то писать (вываливать) на форум - научитесь читать !

В чтении того, что написано ПЕРЕД НОСОМ, в том самом месте, куда ты вводил код, ты тоже новичок, да?
Я всё про те самые “три обратных апострофа”. Или желание отрыгнуть на форум затмевает способность читать?

А что продавец отвечает?

@Alash

Такое вываливание кода в форум это неуважение к участникам.
Почитайте, как правильно вставить код на форум и исправьте сообщение.

Тоже у подобной машинки пульт с кнопок давал при каждом нажатии новые коды. Просто пульт другой возьмите от бытовой техники и поправьте скетч.

Сам сегодня первый раз в жизни взял в руки ардуино, подключил датчик считывания ИК сигнала, установил библиотеку IRremote v4.3.1 и, используя следующий скетч, получал " FFFFFFFF" со всех пультов.

Проблема решилась, откатом библиотеки на версию 3.0.0

Сам скетч:

#include <IRremote.h>

// Define the IR receiver pin
const int IR_PIN = 11;

// Define the IR receiver object
IRrecv irrecv(IR_PIN);

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  // Check if the IR receiver has received a signal
  if (irrecv.decode()) {
    // Print the HEX value of the button press
    Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
    
    // Reset the IR receiver for the next signal
    irrecv.resume();
  }
}

то есть это ты тему открыл чтобы поделится инфой?

Открою тебе секрет. Дело не в том, что версия 4 библиотеки плохая, а в том что ты по глупости взял код примера для третьей версии.

На сайте библиотеки есть специальный раздел, где подробно обьяснено, чем отличаются версии 3 и 4

1 лайк

Я свою задачу выполнил и поделился способом, поскольку этой теме решения не увидел. Может кому-то поможет получить требуемые значения.

Ты всего лишь исправил свою же ошибку.
Кому кроме тебя это может быть интересно?

Тому, кто будет использовать этот же код из популярной инструкции по выдаче гугла.

Т.е. тому, кто поленится использовать код из примеров библиотеки.

1 лайк

да лана вам, выложил пацан и фиг с ним

2 лайка

Вроде прикопать надо, ну или присыпать чем то )))