#include <Servo.h>
#include <IRremote.h>
// === Pins ===
#define IR_PIN 11
#define TRIG_PIN 8
#define ECHO_PIN 7
#define RED_LED 12
#define R_PIN A0
#define G_PIN A1
#define B_PIN A2
// === Objects ===
Servo servo1, servo2, servo3, servo4;
IRrecv irrecv(IR_PIN);
decode_results results;
// === Variables ===
long duration;
int distance;
// === Setup ===
void setup() {
Serial.begin(9600);
// Servos
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
// LEDs
pinMode(RED_LED, OUTPUT);
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
// Ultrasonic
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// IR
irrecv.enableIRIn();
Serial.println("System Ready!");
}
// === Loop ===
void loop() {
// Distance check
distance = getDistance();
Serial.print("Distance: ");
Serial.println(distance);
if (distance < 15) {
stopServos();
setRGB(255, 0, 0); // Red warning
digitalWrite(RED_LED, HIGH);
} else {
digitalWrite(RED_LED, LOW);
setRGB(0, 255, 0); // Green = safe
}
// Check for IR signal
if (irrecv.decode(&results)) {
Serial.print("IR Code: ");
Serial.println(results.value, HEX);
handleIR(results.value);
irrecv.resume(); // Receive next signal
}
delay(100);
}
// === Ultrasonic Function ===
int getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
int dist = duration * 0.034 / 2;
return dist;
}
// === IR Remote Actions ===
void handleIR(unsigned long code) {
// Change these codes to match your remote
switch (code) {
case 0xFFA25D: // Power
moveServos(0);
break;
case 0xFF629D: // Up
moveServos(45);
break;
case 0xFFE21D: // Down
moveServos(90);
break;
case 0xFF22DD: // Left
moveServos(135);
break;
case 0xFF02FD: // Right
moveServos(180);
break;
case 0xFFC23D: // Play/Pause
setRGB(random(255), random(255), random(255));
break;
default:
break;
}
}
// === Helper Functions ===
void moveServos(int pos) {
servo1.write(pos);
servo2.write(pos);
servo3.write(pos);
servo4.write(pos);
}
void stopServos() {
servo1.detach();
servo2.detach();
servo3.detach();
servo4.detach();
}
void setRGB(int r, int g, int b) {
analogWrite(R_PIN, r);
analogWrite(G_PIN, g);
analogWrite(B_PIN, b);
}