#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// constants ---------------------------------------------------
const int LED_PIN_1 = 9; // 500 mL LED
const int LED_PIN_2 = 8; // 750 mL LED
const int LED_PIN_3 = 7; // 1000 mL LED
const int LED_PIN_4 = 6; // Alarm LED
const int Button_PIN_1 = 5; // 500 mL Button
const int Button_PIN_2 = 4; // 750 mL Button
const int Button_PIN_3 = 3; // 1000 mL Button
const int Button_PIN_4 = 2; // Alarm Button
const int Button_PIN_5 = 11; // ON/OFF Button
const int Buzzer_PIN = A2; // Buzzer Button
const int Sensor_PIN = 10; // Sensor Button
// variables ---------------------------------------------------
int Sensor_State = LOW; // inital No motion state
int Level = 0; // Pin Status
int ledState_1 = LOW; // current state of LEDs
int ledState_2 = LOW;
int ledState_3 = LOW;
int ledState_4 = HIGH;
int lastButtonState_1; // previous state of buttons
int lastButtonState_2;
int lastButtonState_3;
int lastButtonState_4;
int lastButtonState_5;
int currentButtonState_1; // current state of buttons
int currentButtonState_2;
int currentButtonState_3;
int currentButtonState_4;
int currentButtonState_5;
// SETUP --------------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(LED_PIN_1, OUTPUT); // set arduino pin to output mode
pinMode(LED_PIN_2, OUTPUT);
pinMode(LED_PIN_3, OUTPUT);
pinMode(LED_PIN_4, OUTPUT);
pinMode(Button_PIN_1, INPUT_PULLUP); // set arduino pin to input pull-up mode
pinMode(Button_PIN_2, INPUT_PULLUP);
pinMode(Button_PIN_3, INPUT_PULLUP);
pinMode(Button_PIN_4, INPUT_PULLUP);
pinMode(Button_PIN_5, INPUT_PULLUP);
pinMode(Sensor_PIN, INPUT);
pinMode(Buzzer_PIN, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Device ON");
lcd.setCursor(0, 1);
lcd.print("Select Bag Size");
}
// MAIN ---------------------------------------------------------
void loop() {
lastButtonState_1 = currentButtonState_1; // save the last state
lastButtonState_2 = currentButtonState_2;
lastButtonState_3 = currentButtonState_3;
lastButtonState_4 = currentButtonState_4;
lastButtonState_5 = currentButtonState_5;
currentButtonState_1 = digitalRead(Button_PIN_1); // read new state
currentButtonState_2 = digitalRead(Button_PIN_2);
currentButtonState_3 = digitalRead(Button_PIN_3);
currentButtonState_4 = digitalRead(Button_PIN_4);
currentButtonState_5 = digitalRead(Button_PIN_5);
Level = digitalRead(Sensor_PIN); // read Sensor input
//-----------------------------------------------------------------Alarm Button Code
if (Level == HIGH) {
if (Sensor_State == LOW) { // Sensor activated
digitalWrite(LED_PIN_4, HIGH); // turn LED ON
tone(Buzzer_PIN, 600);
Sensor_State = HIGH;
Serial.println("DRIP LEVEL LOW... ALARM!");
lcd.setCursor(1, 0);
lcd.print("---LEVEL LOW");
}
if (lastButtonState_4 == HIGH && currentButtonState_4 == LOW) {
ledState_4 = !ledState_4;
digitalWrite(LED_PIN_4, ledState_4);
noTone(Buzzer_PIN);
ledState_4 = !ledState_4;
Serial.println("ALARM deactivated");
lcd.setCursor(1, 0);
lcd.print("---Alarm OFF");
}
}
else {
digitalWrite(LED_PIN_4, LOW); // turn LED OFF
if (Sensor_State == HIGH) { // Sensor deactivated
Serial.println("LEVEL Corrected");
noTone(Buzzer_PIN);
Sensor_State = LOW;
}
}
//------------------------------------------------------------------Bag Size Code
if (lastButtonState_1 == HIGH && currentButtonState_1 == LOW) {
ledState_1 = !ledState_1;
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_1, ledState_1);
ledState_1 = !ledState_1;
Serial.println("500 mL");
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bag: 500 mL");
lcd.setCursor(0, 1);
lcd.print("Empty in: 8 mins");
}
else if (lastButtonState_2 == HIGH && currentButtonState_2 == LOW) {
ledState_2 = !ledState_2;
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_2, ledState_2);
ledState_2 = !ledState_2;
Serial.println("750 mL");
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bag: 750 mL");
lcd.setCursor(0, 1);
lcd.print("Empty in: 10 mins");
}
else if (lastButtonState_3 == HIGH && currentButtonState_3 == LOW) {
ledState_3 = !ledState_3;
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, ledState_3);
ledState_3 = !ledState_3;
Serial.println("1000 mL");
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Bag: 1000 mL");
lcd.setCursor(0, 1);
lcd.print("Empty in: 12 mins");
}
//--------------------------------------------------------------------ON/OFF Code
if (lastButtonState_5 == HIGH && currentButtonState_5 == LOW) { // OFF State
digitalWrite(LED_PIN_1, LOW);
digitalWrite(LED_PIN_2, LOW);
digitalWrite(LED_PIN_3, LOW);
digitalWrite(LED_PIN_4, LOW);
noTone(Buzzer_PIN);
Serial.println("Systems OFF");
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Device: OFF");
lcd.setCursor(0, 1);
lcd.print("----------------");
}
}