Serial.print изменяет последовательный вывод перед вызовом
Я делаю проект с SD-картой, где пользователь вводит имя файла через последовательный порт, а затем aduino что-то делает с этим файлом. Прямо сейчас я работаю над тем, чтобы последовательный ввод заработал, но один Serial.print() каким-то образом изменяет переменную/вывод другого Serial.print(), но еще до того, как он будет вызван. Вот мой код: символьный ввод, вывод;
void setup() {
// поместите сюда ваш код настройки для однократного запуска:
Serial.begin(115200);
Serial.println("Ready\nEnter input text");
while (!Serial.available()); // ждем, пока серийный номер станет доступен
delay(2000);
byte avail = Serial.available() - 1;//лишний символ новой строки в конце, который нам не нужен
char inBuf[avail];
//Serial.println(avail);
Serial.readBytes(inBuf, avail);
Serial.read();
Serial.print("'");
Serial.print(inBuf);
Serial.println("'");
delay(1000);
Serial.println(avail);//проблемная строка
}
void loop() {
// поместите сюда свой основной код для многократного выполнения:
}
Когда я раскомментирую строку, вывод будет таким:
Ready
Enter input text
'asd&.'
4
Когда все, что я набрал, это «asd» (без кавычек). Если закомментировать строку, вывод будет таким, как и ожидалось:
Ready
Enter input text
'asd'
Я понятия не имею, как это происходит, и это должно быть физически невозможно, поскольку код изменяется до того, как вызывается.
@, 👍0
1 ответ
Лучший ответ:
Ваша строка должна заканчиваться нулевым символом '\0'
. Я думаю, что у вас это не так из-за способа заполнения буфера, поэтому вы печатаете весь мусор, который находится в памяти рядом с вашим массивом, в дополнение к самому массиву.
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора