Чтение с интерфейса (Serial.read()) в одну строку

Vir
Offline
Зарегистрирован: 04.12.2012

Всем привет!

Есть следующий код: 

void io_init() {
  Serial.begin(9600);
}

void io_loop() {
  String data = io_read();
  
  if (data != "") {
    Serial.println(data);
  }
}

String io_read() {
  String io_string = "";
  
  while (Serial.available() > 0) {
    char io_char = Serial.read();
    io_string.concat(io_char);
  }

  return io_string;
}

void io_print(String data) {
  Serial.println(data);
}

В init() выполняется io_init(), а в loop() соответсвенно io_loop(). При передаче на интерфейс текста (например: "тест"), на выходе получаю:

т
е
с
т

То есть, такое впечатление, что из io_read() я получаю лишь один символ, а не всю строку целиком. Подскажите пожалуйста, где я туплю?

Vir
Offline
Зарегистрирован: 04.12.2012

Заменил код на следующую конструкцию:

void io_init() {
  Serial.begin(9600);
}

void io_loop() {
  String data = io_read();
  
  if (data != "") {
    Serial.println(data);
  }
}

String io_read() {
  String io_string = "";
  
  if (Serial.available() > 0) {
    io_string = Serial.readStringUntil('\n');
  }

  return io_string;
}

void io_print(String data) {
  Serial.println(data);
}

Оказывается есть метод readStringUntil. Помогло. Но честно говоря, хотелось бы всё таки узнать, почему не работал мой первый вариант?

art100
Offline
Зарегистрирован: 09.03.2014

Vir пишет:

 

    char io_char = Serial.read();
   

char это у на что массив? или

полный он уже