same code doesn't work in if block

(deleted)

if you enter 5 the code will be stuck in the while

    while (buttonState == HIGH) {
      delay(10);
      buttonState = digitalRead(buttonPin);
    }
    while (buttonState == LOW) {
      delay(10);
      buttonState = digitalRead(buttonPin);
    }

so you need to act on the button at least once to exit.

Also - when x is 4 you have    number = Serial.parseInt();so you are trying to read something but you don't know if that data is available... probably risky business...

may be a better starting point would be something like this:

enum : byte {LED_ON_MODE, LED_OFF_MODE, FLASH_MODE, SQUARE_MODE, BUTTON_MODE} currentMode;

const byte buttonPin = 3;

void handleCommand()
{
  int r = Serial.read(); // -1 if nothing to read
  switch (r) {
    case '1': currentMode = LED_ON_MODE; break;
    case '2': currentMode = LED_OFF_MODE; break;
    case '3': currentMode = FLASH_MODE; break;
    case '4': currentMode = SQUARE_MODE; break;
    case '5': currentMode = BUTTON_MODE; break;
    default: break; // ignore everything else
  }
}

void handleMode()
{
  switch (currentMode) {
    case LED_ON_MODE:
      break;

    case LED_OFF_MODE:
      break;

    case FLASH_MODE:
      break;

    case SQUARE_MODE:
      break;

    case BUTTON_MODE:
      break;

    default: break; // ignore everything else
  }
}

void setup() {
  Serial.begin(9600); // should consider going faster like 11500
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP); // unless you have an external pulldown then inverse logic
}

void loop()
{
  handleCommand();
  handleMode();
}

then once a mode is selected you need to code things in a similar way so that you don't do "blocking" stuff

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.