Более простой способ, чем IrReceiver.decodedIRData.команда для проверки полученных данных с ИК-пульта дистанционного управления

#c #arduino

Вопрос:

Я относительно новичок в Arduino и пытался создать простой эскиз, который включает светодиодную подсветку, когда я нажимаю стрелку вверх на пульте дистанционного управления, и выключает светодиодную подсветку, когда я нажимаю стрелку вниз. Прямо сейчас, это то, что у меня есть:

 #include <IRremote.h>

int RECEIVER_PIN = 12;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  IrReceiver.begin(RECEIVER_PIN);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(IrReceiver.decode()){    
    
    if(IrReceiver.decodedIRData.command == 0x46) {
      digitalWrite(LED_BUILTIN, HIGH);
    } else if(IrReceiver.decodedIRData.command == 0x15) {
      digitalWrite(LED_BUILTIN, LOW);
    }
    
    IrReceiver.resume();
  }

}
 

Есть ли лучший способ сделать это, или я на правильном пути. Все отзывы приветствуются и ценятся. Спасибо!

Ответ №1:

Я также новичок в Arduino и C, но если бы это был я, я бы использовал «переключатель» вместо «если … тогда … еще … если … и т. Д». :

     #include <IRremote.h>

    int RECEIVER_PIN = 12;

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      pinMode(LED_BUILTIN, OUTPUT);
      IrReceiver.begin(RECEIVER_PIN);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      if(IrReceiver.decode()){    
       switch(IrReceiver.decodedIRData.command){
           case 0x46: Serial.println("UP")                  ; digitalWrite(LED_BUILTIN, HIGH); break;
           case 0x15: Serial.println("DOWN")                ; digitalWrite(LED_BUILTIN, LOW) ; break;
           case 0x0:  Serial.println("Too Fast, Cmd Repeat"); break;
           default:   Serial.println("Ooops, wrong key!");    
        }
        IrReceiver.resume();
      }
    }