Как исправить код, чтобы он считывал текст с последовательного монитора?

serial string input

Я создал код, который должен распечатать "Введите true, чтобы отключить тревогу" в последовательном мониторе, затем сохранить ответ пользователя и напечатать "alarm off", если они вводят true и "alarm on" в противном случае. Тем не менее, он возвращает "alarm on" каждый раз, даже если я ввожу true. Вот мой код:

String deactivate = "";
void setup() {
  Serial.println("Enter \"true\" to deactivate alarm");
}
void loop() {
  while (Serial.available() == 0){}
  deactivate = Serial.readString();
  if (deactivate.equals("true")) 
  {
    Serial.println("alarm off");
  }
  else
  {
    Serial.println("alarm on");
  }
}

Любая помощь здесь была бы очень признательна, я новичок в Arduino, и мы застряли на этом шаге в течение нескольких недель; Я просто в растерянности, пытаясь понять, почему это не работает.

, 👍2


2 ответа


1

Вы не установили последовательный порт:

Serial.begin(9600);

Добавьте это в функцию настройки. Также проверьте на своем последовательном мониторе, равны ли скорости.

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

Затем, если это символ пробела, используйте функцию для удаления пробела или изменения сравнения.

,

1

Часто кодеры добавляют "отладочные" операторы печати, чтобы помочь понять, что происходит в их коде. Распечатка того, что вы получили, может помочь понять неожиданные результаты.

Тем не менее, рассмотрите возможность использования Serial.readStringUntil() вместо Serial.ReadString(). Со страницы, на которую дана ссылка:

ВОЗВРАТ

Вся строка считывается из последовательного буфера, вплоть до символа терминатора

,