首页 > 解决方案 > 当我单击遥控器上的下一个按钮时,IR 代码不会更改命令

问题描述

我正在用 Arduino 建造一架 IR 控制的直升机并且代码可以工作,但是当我单击下一个按钮让直升机移动到其他地方时,它会在串行监视器中不断打印相同的东西并且命令不会改变......有人可以吗请帮我?这是我的代码:

#include <IRremote.h>
#define in1 6
#define in2 7
#define in3 4
#define in4 5

int IR_RECEIVE_PIN = 2;
IRrecv IrReceiver(IR_RECEIVE_PIN);
decode_results results;

void setup(){
Serial.begin(9600);
IrReceiver.enableIRIn();

pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop(){
if(IrReceiver.decode(&results))
switch (results.value) {

case 0xFFA857:
Serial.println("case: UP");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
break;

case 0xFFE01F:
Serial.println("case: DOWN");
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
break;

case 0xFF18E7:
Serial.println("case: FORWARD");
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
break;

case 0xFF10EF:
Serial.println("case: LEFT");
break;

case 0xFF5AA5:
Serial.println("case: RIGHT");
break;

case 0xFF48B5:
Serial.println("case: BACKWARDS");
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
break;

}



Serial.println(results.value, HEX);
IrReceiver.resume();
}

标签: arduino

解决方案


尝试在 if 上运行带有大括号的代码:

#include <IRremote.h>
#define in1 6
#define in2 7
#define in3 4
#define in4 5

int IR_RECEIVE_PIN = 2;
IRrecv IrReceiver(IR_RECEIVE_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  IrReceiver.enableIRIn();

  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}
void loop() {
  if (IrReceiver.decode(&results)) {
    switch (results.value) {

      case 0xFFA857:
        Serial.println("case: UP");
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        break;

      case 0xFFE01F:
        Serial.println("case: DOWN");
        digitalWrite(in1, LOW);
        digitalWrite(in2, LOW);
        break;

      case 0xFF18E7:
        Serial.println("case: FORWARD");
        digitalWrite(in3, HIGH);
        digitalWrite(in4, LOW);
        break;

      case 0xFF10EF:
        Serial.println("case: LEFT");
        break;

      case 0xFF5AA5:
        Serial.println("case: RIGHT");
        break;

      case 0xFF48B5:
        Serial.println("case: BACKWARDS");
        digitalWrite(in3, LOW);
        digitalWrite(in4, HIGH);
        break;
    }

    Serial.println(results.value, HEX);
    IrReceiver.resume();
  }
}

推荐阅读