void (*state)() {};


void startState() {
  Serial.println("Press button A to start.");
  state = waitState;
}

void waitState() {
  if (digitalRead(2) == LOW) {
    Serial.println("Entering run state, press B to restart, press C to stop.");
    state = runState;
  }
}

void runState() {
  if (digitalRead(3) == LOW) {
    Serial.println("Restarting.");
    state = startState;
  }
  if (digitalRead(4) == LOW) {
    Serial.println("Entering stop state.");
    state = stopState;
  }
}

void stopState() {}


void setup() {
  Serial.begin(9600);

  for (size_t i {2}; i <= 4; ++i) {
    pinMode(i, INPUT_PULLUP);
  }
  state = startState;
}

void loop() {
  state();
}