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 ответ


Лучший ответ:

2

Ваша строка должна заканчиваться нулевым символом '\0'. Я думаю, что у вас это не так из-за способа заполнения буфера, поэтому вы печатаете весь мусор, который находится в памяти рядом с вашим массивом, в дополнение к самому массиву.

,