Serial.parseInt работает для первого меню, но теперь в подменю
Я пытаюсь использовать последовательный
объект для печати некоторых строк, давая пользователям некоторые варианты выбора, введя 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 за любую помощь в попытке отладить это.
@androidAwesome, 👍-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;
}
Вероятно, есть лучший способ сделать это...
- Чтение из Serial
- Почему я не могу распечатать значения логических переменных (0 и 1) с помощью функции println?
- Печать массива с помощью функции печати и последовательной записи в Arduino Uno
- Arduino Serial.ReadString() проблема
- Запись нескольких входов в последовательный порт с использованием цикла while
- Serial.print печатает, а lcd.print - нет.
- Создание строк с символами UTF-8 из данных
- Serial Monitor печатает странные значения и пропускает строки