#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
const int rl = 13;
const int yl = 12;
const int gl = 11;
const int rb = 10;
const int yb = 9;
const int gb = 8;
const int r1 = 5;
const int r2 = 4;
const int r3 = 3;
const int r4 = 2;
int prev_rb_state = HIGH;
int prev_yb_state = HIGH;
int prev_gb_state = HIGH;
void setup() {
// Buttons
pinMode(rb, INPUT_PULLUP); // Using internal pull-up resistors
pinMode(yb, INPUT_PULLUP);
pinMode(gb, INPUT_PULLUP);
// LEDs
pinMode(rl, OUTPUT);
pinMode(yl, OUTPUT);
pinMode(gl, OUTPUT);
// Relays
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(r4, OUTPUT);
// Initialize the LCD
lcd.init();
lcd.backlight();
}
void loop() {
lcd.setCursor(0,0);
lcd.print("AC Motor Control");
int rb_state = digitalRead(rb);
int yb_state = digitalRead(yb);
int gb_state = digitalRead(gb);
if (rb_state != prev_rb_state || yb_state != prev_yb_state || gb_state != prev_gb_state) {
prev_rb_state = rb_state;
prev_yb_state = yb_state;
prev_gb_state = gb_state;
if (rb_state == LOW) { // Button pressed
// Turn off all relays
digitalWrite(r1, LOW);
digitalWrite(r2, LOW);
digitalWrite(r3, LOW);
digitalWrite(r4, LOW);
// Turn on rl LED, turn off others
digitalWrite(rl, HIGH);
digitalWrite(yl, LOW);
digitalWrite(gl, LOW);
// Update LCD
lcd.setCursor(0,0);
lcd.print("AC Motor Control");
lcd.setCursor(0,1);
lcd.print(" OFF STATUS ");
} else if (yb_state == LOW) {
// Turn on r2 and r3 relays, turn off others
digitalWrite(r1, LOW);
digitalWrite(r2, HIGH);
digitalWrite(r3, HIGH);
digitalWrite(r4, LOW);
// Turn on yl LED, turn off others
digitalWrite(rl, LOW);
digitalWrite(yl, HIGH);
digitalWrite(gl, LOW);
// Update LCD
lcd.setCursor(0,0);
lcd.print("AC Motor Control");
lcd.setCursor(0,1);
lcd.print("ON-Reverse State");
} else if (gb_state == LOW) {
// Turn on r1, r3, and r4 relays, turn off others
digitalWrite(r1, HIGH);
digitalWrite(r2, LOW);
digitalWrite(r3, LOW);
digitalWrite(r4, HIGH);
// Turn on gl LED, turn off others
digitalWrite(rl, LOW);
digitalWrite(yl, LOW);
digitalWrite(gl, HIGH);
// Update LCD
lcd.setCursor(0,0);
lcd.print("AC Motor Control");
lcd.setCursor(0,1);
lcd.print("ON-Forward State");
}
}
delay(50); // Delay for button debouncing
}