#include <Servo.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
#include <Ultrasonic.h>
#include <Wire.h>
#include <DS3231.h>
#define PIR_PIN 2 // PIR Sensor pin
#define BUTTON_PIN 3 // Push button pin
#define RGB_LED_PIN 4 // RGB LED pins (Red: 5, Green: 6, Blue: 7)
#define IR_RECEIVE_PIN 8 // IR Receiver pin
#define LCD_ADDR 0x27 // I2C address of LCD
#define LCD_COLS 20 // LCD columns
#define LCD_ROWS 4 // LCD rows
#define SERVO1_PIN 9 // Servo 1 pin
#define SERVO2_PIN 10 // Servo 2 pin
#define SERVO3_PIN 11 // Servo 3 pin
#define SERVO4_PIN 12 // Servo 4 pin
#define SERVO5_PIN 13 // Servo 5 pin
#define SERVO6_PIN 14 // Servo 6 pin
#define ULTRASONIC_TRIG_PIN_1 A0 // Ultrasonic sensor 1 trigger pin
#define ULTRASONIC_ECHO_PIN_1 A1 // Ultrasonic sensor 1 echo pin
#define ULTRASONIC_TRIG_PIN_2 A2 // Ultrasonic sensor 2 trigger pin
#define ULTRASONIC_ECHO_PIN_2 A3 // Ultrasonic sensor 2 echo pin
#define ULTRASONIC_TRIG_PIN_3 A4 // Ultrasonic sensor 3 trigger pin
#define ULTRASONIC_ECHO_PIN_3 A5 // Ultrasonic sensor 3 echo pin
#define JOYSTICK_X A6 // Joystick X-axis pin
#define JOYSTICK_Y A7 // Joystick Y-axis pin
#define JOYSTICK_BUTTON 15 // Joystick button pin
#define MODE_TOGGLE_PIN 16 // Mode toggle push button pin
Servo servo1, servo2, servo3, servo4, servo5, servo6;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLS, LCD_ROWS);
Ultrasonic ultrasonic1(ULTRASONIC_TRIG_PIN_1, ULTRASONIC_ECHO_PIN_1);
Ultrasonic ultrasonic2(ULTRASONIC_TRIG_PIN_2, ULTRASONIC_ECHO_PIN_2);
Ultrasonic ultrasonic3(ULTRASONIC_TRIG_PIN_3, ULTRASONIC_ECHO_PIN_3);
DS3231 rtc;
enum Mode { AUTO, MANUAL, REMOTE };
Mode currentMode = AUTO;
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(RGB_LED_PIN, OUTPUT);
pinMode(JOYSTICK_BUTTON, INPUT);
pinMode(MODE_TOGGLE_PIN, INPUT_PULLUP);
irrecv.enableIRIn();
lcd.init();
lcd.backlight();
servo1.attach(SERVO1_PIN);
servo2.attach(SERVO2_PIN);
servo3.attach(SERVO3_PIN);
servo4.attach(SERVO4_PIN);
servo5.attach(SERVO5_PIN);
servo6.attach(SERVO6_PIN);
Wire.begin();
rtc.begin();
Serial.begin(9600);
}
void loop() {
// Check for mode toggle button press
if (digitalRead(MODE_TOGGLE_PIN) == LOW) {
toggleMode();
}
// Read sensors and inputs based on the current mode
switch (currentMode) {
case AUTO:
// Implement auto mode logic
break;
case MANUAL:
// Implement manual mode logic
break;
case REMOTE:
// Implement remote mode logic
break;
}
delay(1000);
}
void toggleMode() {
switch (currentMode) {
case AUTO:
currentMode = MANUAL;
break;
case MANUAL:
currentMode = REMOTE;
break;
case REMOTE:
currentMode = AUTO;
break;
}
}