I'm writing a program with three different cases. Case one an LED is off, in another it is on and in the last case the brightness is controlled by a potentiometer. Each case works as I press the button. The issue I am having is with the third case. The potentiometer is read only once and the LED is set accordingly. I would like the LED to be adjusted continuously until the button is pushed again and the case is switched to off. I used the Serial.print to see the valves read from the potentiometer. I verified its only read once on each cycle through the different cases. I also changed from a SWITCH/CASE to If statements and it only reads the potentiometer once.
static enum { OFF, ON, POT } state;
unsigned long now = millis();
// Switch state on button press.
if (button_press()) switch (state) {
case OFF:
analogWrite(LED_PIN, 255);
state = ON;
break;
case ON:
analogWrite(LED_PIN, 0);
state = POT;
break;
case POT:
val = (analogRead(pot) / 4);
analogWrite(LED_PIN, val);
Serial.println(val);
state = OFF;
break;
}