Почему Serial.read() не считывает несколько символов?
Я использовал несколько функций Serial.read() и Serial.parseInt() для получения символов и числа (например, «xy123») на Arduino UNO. Затем я проверил результат на последовательном мониторе.
К сожалению, мне не удалось получить символ с помощью второго Serial.read().
Вот код:
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() >0) {
// Я хочу получить символы типа "xy123"
char input1 = Serial.read();
char input2 = Serial.read();
int value = Serial.parseInt();
Serial.println(input1); // ок
Serial.println(input2); // * нехорошо * (-1)
Serial.println(value); // ок
// Запись некоторых кодов с input1, input2 и value ...
}
// Я не хочу использовать delay().
}
Как получить второго персонажа?
Спасибо.
@flowerbox, 👍0
2 ответа
Вы не прочитали второй символ, потому что символ еще не прибыл. Подождите, пока он не станет доступен. read
не ждет. parseInt
имеет встроенную функцию ожидания.
Вы можете подождать второй символ, прочитав два символа с помощью функции ожидания readBytes
. Она будет ждать секунду для следующего символа.
char buff[2];
if (Serial.readBytes(buff, 2) == 2) {
char input1 = buff[0];
char input2 = buff[1];
...
Если вы отправляете только один символ, readBytes будет ждать одну секунду следующего и вернет, что был прочитан один символ.
if (Serial.available() >0) {
Это как сказать: «Я не пойду в эту комнату, пока там не будет хотя бы одной собаки». Кто-то говорит вам, что там есть собака. Вы заходите в комнату и говорите: «Эй, а почему там не две собаки?».
Если вы хотите прочитать два байта, один из подходов — подождать, пока они станут доступны:
if (Serial.available() >= 2) {
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор