#include "Servo.h"
#define DECODE_NEC // DECODE_NEC
#include <IRremote.hpp> // Do not change header order.
//
// Global constants
//
constexpr uint8_t irRecvPin {2};
constexpr uint8_t servoPin {5};
constexpr int servoPos[] {0, 90, 180};
//
// Global objects / variables
//
enum class Index : uint8_t {down, mid, up};
Servo servo;
//
// Function(s)
//
uint16_t irReceive() {
uint16_t received{0};
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort(&Serial);
if (IrReceiver.decodedIRData.protocol == UNKNOWN) {
// We have an unknown protocol here, print more info
IrReceiver.printIRResultRawFormatted(&Serial, true);
}
if (IrReceiver.decodedIRData.protocol == NEC) {
received = IrReceiver.decodedIRData.command;
Serial.print("Command: 0x");
Serial.println(received, HEX);
}
IrReceiver.resume();
}
return received;
}
//
// Main
//
void setup()
{
Serial.begin(115200);
IrReceiver.begin(irRecvPin);
Serial.print(F("Ready to receive IR signals at pin "));
Serial.println(irRecvPin);
servo.attach(servoPin);
servo.write(servoPos[static_cast<uint8_t>(Index::mid)]);
}
void loop()
{
switch(irReceive()) {
case 0x90: servo.write(servoPos[static_cast<uint8_t>(Index::up)]); break;
case 0xA8: servo.write(servoPos[static_cast<uint8_t>(Index::mid)]); break;
case 0xE0: servo.write(servoPos[static_cast<uint8_t>(Index::down)]); break;
}
}Press ->
<- this 3 Buttons