#include <Arduino.h>
const int green = 12;
const int red = 11;
const int white = 8;
const int tDelay = 500;
const int red_button = 6;
const int white_button = 7;
//const int interrupt_button = 2;
volatile byte red_state = LOW;
volatile byte white_state = LOW;
volatile bool vital = false;
volatile bool reset = false;
volatile unsigned long nominal_start_time = 0;
volatile unsigned long hr_start_time = 0;
volatile unsigned long rr_start_time = 0;
volatile unsigned long temp_start_time = 0;
volatile byte hr_pin = HIGH;
enum State {
NOMINAL,
ALARM,
VITAL_CHECK
};
State current_state = NOMINAL;
void update_leds() {
switch(current_state) {
case NOMINAL:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(white, LOW);
case ALARM:
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(white, LOW);
break;
case VITAL_CHECK:
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
while (true) {
digitalWrite(white, HIGH);
delay(250);
digitalWrite(white, LOW);
delay(250);
}
}
}
void setup() {
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(white, OUTPUT);
pinMode(red_button, INPUT);
pinMode(white_button, INPUT);
attachInterrupt(digitalPinToInterrupt(2), interrupt, RISING);
Serial.begin(9600);
}
void loop() {
if (!reset || hr_pin == HIGH) {
current_state = ALARM;
update_leds();
} else if (vital || reset || hr_pin == LOW || current_state == NOMINAL) {
unsigned long now = millis();
if (now - nominal_start_time < 10000) {
current_state = NOMINAL;
update_leds();
vital = false;
reset = false;
} else {
current_state = VITAL_CHECK;
update_leds();
nominal_start_time = 0;
}
}
}
void interrupt() {
if (digitalRead(red_button) == HIGH) {
//red_state = !red_state;
//digitalWrite(red, red_state);
reset = true;
hr_pin = LOW;
}
if (digitalRead(white_button) == HIGH) {
//green_state = !white_state;
//digitalWrite(white, white_state);
vital = true;
}
}