Почему 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().
}

Как получить второго персонажа?

Спасибо.

, 👍0


2 ответа


2

Вы не прочитали второй символ, потому что символ еще не прибыл. Подождите, пока он не станет доступен. read не ждет. parseInt имеет встроенную функцию ожидания.

Вы можете подождать второй символ, прочитав два символа с помощью функции ожидания readBytes. Она будет ждать секунду для следующего символа.

char buff[2];
if (Serial.readBytes(buff, 2) == 2) {
  char input1 = buff[0];
  char input2 = buff[1];
...

Если вы отправляете только один символ, readBytes будет ждать одну секунду следующего и вернет, что был прочитан один символ.

,

3
  if (Serial.available() >0) {

Это как сказать: «Я не пойду в эту комнату, пока там не будет хотя бы одной собаки». Кто-то говорит вам, что там есть собака. Вы заходите в комнату и говорите: «Эй, а почему там не две собаки?».

Если вы хотите прочитать два байта, один из подходов — подождать, пока они станут доступны:

  if (Serial.available() >= 2) {
,