#include <IRremote.hpp>
#include <Servo.h>
const int IR_RECEIVE_PIN = 2;
const int SERVO_PIN = 6;
Servo myServo;
int angle = 90; // Default mid-position
void setup() {
Serial.begin(9600);
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
myServo.attach(SERVO_PIN);
myServo.write(angle); // Set initial position
Serial.println("IR Remote Servo Control Ready");
}
void loop() {
if (IrReceiver.decode()) {
unsigned long keyCode = IrReceiver.decodedIRData.command;
Serial.print("Received key code: 0x");
Serial.println(keyCode, HEX);
switch (keyCode) {
case 0x90:
angle = min(angle + 10, 180);
Serial.println("Direction: RIGHT → +10°");
break;
case 0xE0:
angle = max(angle - 10, 0);
Serial.println("Direction: LEFT → -10°"); break;
case 0xA8: angle = 90; Serial.println("Set to CENTER (90°)"); break; // PLAY/PAUSE
case 0x02: angle = 0; Serial.println("PLUS → 0°"); break;
case 0x98: angle = 180; Serial.println("MINUS → 180°"); break;
// Numeric buttons to set predefined angles
case 0x30: angle = 10; Serial.println("Button 1 → 10°"); break;
case 0x18: angle = 30; Serial.println("Button 2 → 30°"); break;
case 0x7A: angle = 50; Serial.println("Button 3 → 50°"); break;
case 0x10: angle = 70; Serial.println("Button 4 → 70°"); break;
case 0x38: angle = 90; Serial.println("Button 5 → 90°"); break;
case 0x5A: angle = 110; Serial.println("Button 6 → 110°"); break;
case 0x42: angle = 130; Serial.println("Button 7 → 130°"); break;
case 0x4A: angle = 150; Serial.println("Button 8 → 150°"); break;
case 0x52: angle = 170; Serial.println("Button 9 → 170°"); break;
case 0x68: angle = 180; Serial.println("Button 0 → 180°"); break;
default:
Serial.println("Button: Unknown / Unmapped");
}
// Write new angle to servo
myServo.write(angle);
Serial.print("Servo Angle Set To: ");
Serial.println(angle);
Serial.println("---------------");
IrReceiver.resume();
}
}