#define STATE_OFF 0
#define STATE_DIM 1
#define STATE_NORMAL 2
#define STATE_ALERT 3
const int button = 2;
const int photo = A0;
const int led = 9;
int currentState == STATE_OFF;
boolean lastButtonState = true;
void setup() {
pinMode(button, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
checkTransitions();
executeState();
delay(100);
}
void changeState(int newState) {
currentState = newState;
}
void executeState() {
switch(currentState) {
case STATE_OFF:
analogWrite(led, 0);
break;
case STATE_DIM:
analogWrite(led, 64);
break;
case STATE_NORMAL:
analogWrite(led, 255);
break;
case STATE_ALERT:
if (millis() % 400 < 200) {
analogWrite(led, 255);
} else {
analogWrite(led, 0);
}
break;
}
}
void checkTransitions() {
boolean buttonState = digitalRead(button);
if (buttonState == LOW && lastButtonState == HIGH) {
delay(50);
currentState = (currentState + 1) % 4;
}
// lastButtonState = buttonState;
int lightLevel = analogWrite(photo);
if (lightLevel < 500 && currentState == STATE_OFF) {
currentState = STATE_DIM;
}
}