Ошибка Вывода Значений Arduino Serial.print
Я экспериментирую со следующей программой, которую я нашел в Интернете (с небольшими изменениями):
int x;
void setup() {
Serial.begin(9600);
Serial.setTimeout(1);
}
void loop() {
while (!Serial.available());
x = Serial.readString().toInt();
int y = x + 1;
Serial.print(y);
}
Я сталкиваюсь с ошибкой в выводе последовательного монитора; если я ввожу 1
, то печатаю 21. Я думаю, что происходит то, что каждая цифра в числе увеличивается на 1, а затем
1
по какой-то причине ставится в конце. Например, если я ввожу 234
, то на выходе получается 3451
. Я думаю , что ошибка кроется в строке x = Serial.ReadString().toInt ();
, но не знаю, как это исправить. Спасибо!
@Sony, 👍1
Обсуждение1 ответ
Лучший ответ:
Здесь есть две проблемы.
Во-первых, вы вводите не "234", а "2", затем "3" и, наконец, "4". Ваш действительно маленький тайм-аут не дает цифрам достаточно времени, чтобы прибыть.
Во-вторых, окончание вашей строки принимается и интерпретируется как "не число", которое возвращается как 0 с помощью функции .toInt()
.
Что вам нужно сделать, так это:
- Не устанавливайте короткий тайм - аут-вы можете полностью удалить эту строку.
- Используйте
.readStringUntil('\n')
для чтения до тех пор, пока ваша строка не закончится на одном дыхании.
Это сработало, спасибо вам тоже за то, что все объяснили! Если я полностью удалю тайм-аут, произойдет заметная задержка ввода, поэтому я просто увеличил время ожидания до 100. Есть ли в этом какой-то недостаток?, @Sony
Да, вы получаете задержку. Используйте readStringUntil('\n')
, и время ожидания не используется, поэтому вы не получаете задержек., @Majenko
Спасибо - попробовал, и это работает потрясающе., @Sony
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Библиотека DHT.h не импортируется
- ошибка: ожидаемое первичное выражение перед токеном ','
Почему такой короткий тайм-аут?, @Edgar Bonet
@EdgarBonet спасибо, что указали на это! Я не уверен, почему учебник сделал это, но изменение тайм-аута на 100 мс, похоже, исправляет эту ошибку!, @Sony