// Rioke Obrimah, 4/29/2024
int greyButton = 2;
int redButton = 3;
int redLED = 12;
int greenLED = 13;
int greyButton_status = LOW;
int redButton_status = LOW;
int oldGreyStatus = LOW;
int oldRedStatus = LOW;
// Used as safeguards to prevent repetition/unwanted functions
int screenPrint = 0;
int holdBlink = 0;
void setup() {
pinMode(greyButton, INPUT);
pinMode(redButton, INPUT);
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
Serial.begin(9600);
}
// Green LED blink for 1 second
void greenBlink(){
digitalWrite(greenLED, HIGH);
delay(200);
digitalWrite(greenLED, LOW);
delay(200);
digitalWrite(greenLED, HIGH);
delay(200);
digitalWrite(greenLED, LOW);
delay(200);
digitalWrite(greenLED, HIGH);
delay(200);
digitalWrite(greenLED, LOW);
}
// Red LED blinks for 1 second
void redBlink(){
digitalWrite(redLED, HIGH);
delay(200);
digitalWrite(redLED, LOW);
delay(200);
digitalWrite(redLED, HIGH);
delay(200);
digitalWrite(redLED, LOW);
delay(200);
digitalWrite(redLED, HIGH);
delay(200);
digitalWrite(redLED, LOW);
}
void loop() {
//Check whether each button is pressed
greyButton_status = digitalRead(greyButton);
delay(100);
redButton_status = digitalRead(redButton);
// Nothing is pressed, displays "Waiting..."
if(screenPrint == 0) {
Serial.println("Waiting...");
screenPrint = 1;
}
// Prevent light from blinking after releasing hold
if(holdBlink == 1){
oldGreyStatus = LOW;
oldRedStatus = LOW;
}
// If button is pressed, old status of button is HIGH
if(greyButton_status == HIGH){
oldGreyStatus = HIGH;
}
if(redButton_status == HIGH){
oldRedStatus = HIGH;
}
// After press and hold, safeguard released once both buttons are unpressed
if (greyButton_status == LOW && redButton_status == LOW && holdBlink == 1){
holdBlink = 0;
screenPrint = 0;
}
// Button A is pressed, green LED blinks, displays "Vending soda"
else if(oldGreyStatus == HIGH && redButton_status == LOW && greyButton_status == LOW && holdBlink == 0){
Serial.println("Vending soda");
greenBlink();
oldGreyStatus = LOW;
oldRedStatus = LOW;
screenPrint = 0;
} // Button B is pressed, green LED blinks, displays "Vending water"
else if(oldRedStatus == HIGH && greyButton_status == LOW && redButton_status == LOW && holdBlink == 0){
Serial.println("Vending water");
greenBlink();
oldRedStatus = LOW;
oldGreyStatus = LOW;
screenPrint = 0;
} // Both buttons are pressed, red LED blinks, displays "Product not available"
else if(oldRedStatus == HIGH && oldGreyStatus == HIGH && greyButton_status == LOW && redButton_status == LOW){
Serial.println("Product not available");
redBlink();
oldGreyStatus = LOW;
oldRedStatus = LOW;
screenPrint = 0;
} // One button is held, other is pressed, red LED blinks, displays "Product not available"
else if(redButton_status == HIGH && oldGreyStatus == HIGH && greyButton_status == LOW){
Serial.println("Product not available");
redBlink();
oldGreyStatus = LOW;
oldRedStatus = LOW;
holdBlink = 1;
} else if(greyButton_status == HIGH && oldRedStatus == HIGH && redButton_status == LOW){
Serial.println("Product not available");
redBlink();
oldRedStatus = LOW;
oldGreyStatus = LOW;
holdBlink = 1;
}
}