Olá, estou com o seguinte código no meu Arduíno uno
char corrente = '1';
void setup() {
Serial.begin(9600);
delay(500);
}
void loop() {
if (Serial.available()) {
corrente = Serial.read();
delay(10);
}
//tela2();
Serial.println(corrente);
delay(1000);
}
quando envio um valor no monitor serial (ja tentei char, inteiro, float ...) ele faz a leitura e retorna no monitor serial e logo em seguida o valor some, isso pode ser erro do meu arduino? e qual o motivo disto?

Sim o problema é no seu código. Vamos tentar te explicar:
Todas as vezes que você envia um texto ao arduino via Serial ex: 1 , o arduino recebe 2 caracteres o 1 e o \n, então a variável assume o valor de 1 e depois o valor de \n, esse \n significa fim da linha e pule para a próxima.Se você mandar __21__ele recebe 2\n e depois 1\n vou colocar um código abaixo como exemplo para você estudar:
String corrente = "";
boolean mudarString = true;
void setup() {
Serial.begin(9600);
delay(500);
}
void loop() {
while (Serial.available()) {
char testeChar = (char)Serial.read();
if (mudarString == true){ // aqui ele verifica se pode mudar o valor da String
corrente = testeChar;
mudarString = false;
} else {
corrente += testeChar;// Aqui ele concatena os valores
}
delay(10);
}
if(corrente.indexOf("\n")){ // Aqui ele procura pelo \n
corrente.replace("\n",""); // aqui ele substitui \n por nada
}
Serial.println(corrente);
delay(1000);
mudarString = true; // Aqui ele habilita a alteração do valor da String
}
tecdiego:
Sim o problema é no seu código. Vamos tentar te explicar:
Todas as vezes que você envia um texto ao arduino via Serial ex: 1 , o arduino recebe 2 caracteres o 1 e o \n, então a variável assume o valor de 1 e depois o valor de \n, esse \n significa fim da linha e pule para a próxima.Se você mandar __21__ele recebe 2\n e depois 1\n vou colocar um código abaixo como exemplo para você estudar:
String corrente = "";
boolean mudarString = true;
void setup() {
Serial.begin(9600);
delay(500);
}
void loop() {
while (Serial.available()) {
char testeChar = (char)Serial.read();
if (mudarString == true){ // aqui ele verifica se pode mudar o valor da String
corrente = testeChar;
mudarString = false;
} else {
corrente += testeChar;// Aqui ele concatena os valores
}
delay(10);
}
if(corrente.indexOf("\n")){ // Aqui ele procura pelo \n
corrente.replace("\n",""); // aqui ele substitui \n por nada
}
Serial.println(corrente);
delay(1000);
mudarString = true; // Aqui ele habilita a alteração do valor da String
}
Isto não é bem assim...
Se eu escrever 21 na caixinha do terminal série do Arduino ele envia 21\n... se eu enviar um 2 e depois enviar um 1, então ele faz como tu dizes dependendo de como o terminal série está configurado (pode não enviar nada).
@0800natal
No exemplo que vemos na imagem, que é que enviaste pela caixinha do terminal série? 1112 e carregaste em enviar?
Na janela do terminal série do Arduino na parte de baixo, selecciona para não enviar nenhum terminador de string.
O que acontece é que o teu código imprime sempre independentemente se recebeu algo ou não. Então o último caracter a ser enviado de volta é o \n como o tecdiego referiu. Se passares o Serial.print para dentro do if() isso já não acontece.
Obrigado @bubulindo @tecdiego
percebi que estava enviando no "Nova-linha"
então o \n era colocado na variável e acabava "apagando" a informação que ela tinha salvo
bobeira minha :v