Serial.parseInt работает для первого меню, но теперь в подменю

serial input print

Я пытаюсь использовать последовательный объект для печати некоторых строк, давая пользователям некоторые варианты выбора, введя int. Он работает в этом главном меню. Но когда пользователь выбирает 1, я снова использую Serial для печати некоторых строк и сбора другого int. Но в этом подменю он печатает строку, ждет секунду, а затем возвращается в главное меню. Ниже приведен весь мой скетч:

int menu = 0;

void setup() {
  // put your setup code here, to run once:
  //Starting the serial comm
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (menu == 0) {
    //Prints the menu to the serial port
    Serial.println("Select an option:");
    Serial.println("-----------------");
    Serial.println("1) Do Submenu");

    menu = getSerialInt();
  }

    //Used to calibrate the pen height
  if (menu == 1) {
    int calibrating = 1;
    while (calibrating == 1) {          //While loop that will continue until "0" is sent in the serial port
      Serial.println("Enter a pen value: ");
      int penMove = getSerialInt();
      
      Serial.println("You entered: ");
      Serial.println(penMove);
      if (penMove == 0) {
        calibrating = 0;
      }
    }
    menu = 0;   //Sets the menu variable back to 0
  }
}

int getSerialInt() {
  int retInt;
  Serial.flush();

  while (!Serial.available()) {}  //Waits for an input on the serial device
  retInt = Serial.parseInt();       //Takes the Serial input and looks for an integer
  Serial.flush();
  
  return retInt;
}

Спасибо в advanced за любую помощь в попытке отладить это.

, 👍-1


1 ответ


-1

Основываясь на этой теме: https://forum.arduino.cc/t/parseint-clears-serial-available-but-leaves-terminator-in-serial-buffer/515199/8

И некоторые другие темы, говорящие о возврате каретки, я переписал getSerialInt, чтобы дважды вызвать parseInt (), чтобы избавиться от возврата каретки:

int getSerialInt() {
  int retInt;
  Serial.flush();

  while (!Serial.available()) {}  //Ожидает ввода на последовательном устройстве
  retInt = Serial.parseInt(); //Принимает последовательный ввод и ищет целое число
  Serial.parseInt(); // возврат выброшенного груза
  Serial.flush();
  
  return retInt;
}

Вероятно, есть лучший способ сделать это...

,