#define STATE_OFF 0
#define STATE_DIM 1
#define STATE_NORMAL 2
#define STATE_ALERT 3
int count = STATE_OFF;
void setup() {
pinMode(13, INPUT_PULLUP);
pinMode(12, OUTPUT);
pinMode(A0, INPUT);
}
void loop() {
checkTransitions();
executeState();
}
boolean isUp = true;
boolean wasUp = true;
void checkTransitions() {
isUp = digitalRead(13);
if (wasUp != isUp) {
delay(20);
if (!isUp) {
int nextState = count + 1;
if (nextState > STATE_ALERT) {
nextState = STATE_OFF;
}
changeState(nextState);
}
}
wasUp = isUp;
}
void changeState(int newState) {
if (newState < STATE_OFF || newState > STATE_ALERT) {
newState = STATE_OFF;
}
count = newState;
}
void executeState() {
int save = analogRead(A0);
if(count == STATE_OFF){
if(save > 400){
analogWrite(12, 255);
}else{
analogWrite(12, 0);
}
}else if (count == STATE_DIM){
if(save > 400){
analogWrite(12, 255);
}else{
analogWrite(12, 0);
}
}else if (count == STATE_NORMAL){
if (save > 400){
analogWrite(12, 255);
}else{
analogWrite(12, 255);
}
}else if (count == STATE_ALERT){
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
}
}