Arduíno "esquecendo" as variáveis

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 21ele 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

|500x214