Ошибка Вывода Значений 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