Как отобразить всю входящую строку с serial monitor в arduino ide?

это мой первый вопрос на этом форуме.

Мне нужно получить строку от последовательного монитора Arduino и отобразить ее, когда связь закончится. У меня есть аналогичная проблема, подобная той, которая обсуждалась в этой теме:

https://electronics.stackexchange.com/questions/45543/how-do-i-receive-an-entire-string-as-opposed-to-1-character-at-a-time-on-the-ard

Только я использую последовательный монитор Arduino вместо RaspberryPi для отправки строк, поэтому я не могу запрограммировать отправителя на прикрепление идентификатора типа '\n' в конце строки.

char inData[20];
char inChar=-1;
byte index = 0;

while (Serial.available() > 0){
  ending[1]=ending[1]+1;
  if(index < 19){

      inChar = Serial.read();
      inData[index] = inChar;
      index++;
      inData[index] = '\0';
      Serial.flush();   
  }
  Serial.print(inData);Serial.print("\t");Serial.println();
}

То, что я получаю в консоли, выглядит следующим образом:

M
Me  
Mes 
Mess    
Messa   
Messag
Message

Мне нужно отобразить только последнюю строку

Message

Код должен знать, когда входящая строка закончилась, а затем отобразить ее один раз.

Я был бы очень признателен за любую помощь, которую смогу получить.

, 👍4

Обсуждение

У вас есть два варианта. Самое надежное-это решить, что конкретный символ будет служить индикатором окончания сообщения. "\n " - это обычный выбор, но вы можете выбрать все, что не собираетесь использовать в самом сообщении. Другой вариант - иметь тайм-аут: если в течение xxx мс больше не было получено никаких символов, то предположим, что сообщение завершено., @Edgar Bonet


1 ответ


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

2

Если вам действительно нужна веревочка. Попробуйте использовать Serial.ReadString(). Он вернет полную строку.

Код может выглядеть так:

if(Serial.available()  > 0)
{
  String message = Serial.readString();
  Serial.println(message);
}
,

Стоит отметить, что Stream::ReadString() работает с таймаутом, который по умолчанию составляет 1 секунду, но может быть изменен с помощью setTimeout()., @Edgar Bonet

Спасибо, это именно то, что мне было нужно. Теперь вывод на последовательный монитор-это весь ввод текста. Первый пост, первая проблема решена. Я вам очень благодарна., @Daniel Maydana