Problema com serial

Quando escrevo teste e do enter, o uno responde assim:
1
t
4
3
2
1
este

Porque ele não envia a palavra inteira? Ele manda primeiro o t e depois envia o este…
:astonished:

Meu código:
const unsigned int Led = 8;
char Ch;

void setup() {
Serial.begin(9600);
pinMode(8,OUTPUT);
Serial.println(“Sistema pronto!”);
}

void loop(){
String Msg = “”;
if(Serial.available() == 0) return;
while(Serial.available()){
Serial.println(Serial.available());
Ch = Serial.read();
Msg.concat(Ch);
}
Serial.println(Msg);
delay(1000);
}

1.JPG

O teu programa esta a fazer aquilo que mandaste fazer…

Enquanto houver caracteres disponiveis, guarda-os numa String. Quando nao houver, faz print do que recebeu.

O teu programa recebe o t, apenas tem um caracter recebido, imprime o t e volta a ver se ha mais alguma coisa recebida… neste ponto, percebe que tem 4 caracteres recebidos e imprime os 4 caracteres seguidos.

Podes adicionar uma temporizacao para garantir que recebeste tudo… ou entao guardar caracteres e so os imprimir quando receberes um caracter especial como um carriage return, por exemplo.

const unsigned int Led = 8;
char Ch;

void setup() {
  Serial.begin(9600);
  pinMode(8,OUTPUT);
  Serial.println("Sistema pronto!");
}

void loop(){
  String Msg = "";
  if(Serial.available() == 0) return;
  while(Serial.available()){
//Serial.println(Serial.available()); // esta linha imprime 4 3 2 1, que é o valor retornado pela função Serial.available() no seu caso
    Ch = Serial.read();
    Msg.concat(Ch);
  }
  Serial.println(Msg);
  delay(1000);
}