/* Program done on 13/02/2024 by AMALJITH A --
Using limit switches(LS), LED's (Blue, Red, Green), Potentiometer as Load, Push button(Start_button), and Relay's (BO, BC, HU, HD)
1- All LED's and Relays are off
2- LS = 1 and Load >= 30Kg; Hold the previous condition 1
3- if (Start_button = High to Low(pressed) && LS = 0 && Load > 10 Kg) then Blue- ON, HD- ON
else got to condition 1:
4- if load <= 10Kg , BLUE led ON and HD OFF
5- when push button pressed again go to step condition 3: */
// Assigning pin for potentiometer
int Load_pin = A0;
// Assign pins for limit switches (LS)
int LS_pin = 2;
// Assigning pins for Relays
int BO_relay = 4;
int BC_relay = 5;
int HU_relay = 6;
int HD_relay = 7;
// Assign pin for push button
int Start_button = 8;
// Assign pins for LEDs
int Blue_led = 10;
int Red_led = 11;
int Green_led = 12;
// assigning flags for push button and limit switch
bool buttonPressed = false;
bool LS_state = false;
int Load = 0;
bool cond_3 = false; // Flag to keep track of condition 3 execution
// Function to set all LEDs and Relays to OFF state condition 1:
void Initial_setup() {
digitalWrite(BO_relay, LOW);
digitalWrite(BC_relay, LOW);
digitalWrite(HU_relay, LOW);
digitalWrite(HD_relay, LOW);
digitalWrite(Blue_led, LOW);
digitalWrite(Red_led, LOW);
digitalWrite(Green_led, LOW);
}
void setup() {
// Set pin modes
pinMode(LS_pin, INPUT);
pinMode(Start_button, INPUT);
pinMode(BO_relay, OUTPUT);
pinMode(BC_relay, OUTPUT);
pinMode(HU_relay, OUTPUT);
pinMode(HD_relay, OUTPUT);
pinMode(Blue_led, OUTPUT);
pinMode(Red_led, OUTPUT);
pinMode(Green_led, OUTPUT);
// Initialize all components to OFF state
Initial_setup();
// Begin serial communication
Serial.begin(9600);
}
void loop() {
// Call push button to check button state
PB_Button();
// to monitor the load cell
Loadcell();
// Check for condition 2:
if (LS_state == HIGH && Load >= 30) {
// Hold the previous condition (All LEDs and Relays OFF)
Initial_setup();
}
// Check for condition 3:
if (buttonPressed && LS_state == LOW && Load > 10) {
digitalWrite(Blue_led, HIGH);
digitalWrite(HD_relay, HIGH);
cond_3 = true;
}
// Check for condition 4:
if (cond_3 && Load <= 10) {
digitalWrite(HD_relay, LOW);
digitalWrite(Blue_led, HIGH);
}
// To reset the flag and achieve condition 3 when push button is pressed
if (digitalRead(Start_button) == LOW && !buttonPressed) {
cond_3 = false;
}
}
void Loadcell() {
// Read the state of the limit switch
LS_state = digitalRead(LS_pin);
// Read the value from the potentiometer (load cell)
int potValue = analogRead(Load_pin);
// Map the potentiometer value from its current range to the desired range 0-200 assuming it as Load in Kg
Load = map(potValue, 0, 1023, 0, 200);
Serial.println("Load: " + String(Load) + " Kg");
delay(500);
}
// Function for the push button
void PB_Button() {
// Check if the button is pressed
if (digitalRead(Start_button) == LOW && !buttonPressed) {
// Set buttonPressed flag to true
buttonPressed = true;
// Update Load value
Loadcell();
} else if (digitalRead(Start_button) == HIGH && buttonPressed) {
// Reset buttonPressed flag when button is released
buttonPressed = false;
}
}