Lettura carattere da monitor seriale Arduino

Salve a tutti, ho creato un codice per arduino uno che gestisce un motorino: avanti , indietro e velocità; di per sé è molto facile come codice ma ho riscontrato un problema. Gestisco le azioni attraverso l’input di caratteri da monitor seriale, ad esempio, se inserisco ‘a’ il motore va avanti, ‘i’ va indietro ecc. Il punto è che che quando vado ad eseguire il codice dopo alcuni caratteri inseriti il programma smette di funzionare e mi escono una lista di errori che iniziano con java.***. Il codice è questo:

int enablePin=6;
int motor1Pin = 7;    
int motor2Pin = 8;    
int stato;
int val=250;
char j;
void setup()
{
    pinMode(motor1Pin, OUTPUT);
    pinMode(motor2Pin, OUTPUT);
    pinMode(enablePin, OUTPUT);
    Serial.begin(9600);
    j='a';
}
void loop()
{
   while(j!='e')
    {
      Serial.println("cosa vuoi fare? \n a)Avanti \n i)Indietro \n +)aumenta velocità \n -)decrementa velocità \n s)ferma \n e)esci: ");
      j=leggiChar();    
      if (j=='a')
      {
        Serial.println(val);
        avanti(val);
      }
      if (j=='i')
      {
        indietro(val);
      }
      
      if (j=='+')
      {
        if(val<245)
        {
        val=val+10;
        if (stato==1)
        {
        avanti(val);
        }
        else
        {
          indietro (val);
        }
        }
        else 
        {
          Serial.println("velocità massima");
        }
      }     
      if(j=='-')
      {
        if (val>=10)
        {
        val=val-10;
        if (stato==1)
        {
          avanti(val);
        }
        else
        {
        indietro(val);
        }
        }
        else
        {
          Serial.println("velocità minima");
        }
      }
      
      if(j=='s')
      {
        ferma();
      }
    }
}

char leggiChar() 
{
  char n;
  while(Serial.available()<=0)//attendo finche l'utente non invia qualcosa dal monitor
  {
  }
  if(Serial.available()>0)
  {
    while(Serial.available()>0)//se ci sono valori nel buffer della seriale
    {
      n=Serial.read();//leggo il valore
    }
    Serial.flush();//pulisco il buffer
  }
  Serial.println(n);
  return n;//torno il valore letto
}
        
void avanti (int vel)
{
  analogWrite(enablePin,vel);
  digitalWrite (motor1Pin,HIGH);
  digitalWrite (motor2Pin,LOW);
  stato=1;
}

void indietro (int vel)
{
    Serial.println(vel);
    analogWrite(enablePin,vel);
    digitalWrite (motor1Pin,LOW);
    digitalWrite (motor2Pin,HIGH);
    stato=0;
}
void ferma ()
{
  analogWrite(enablePin,50);
  digitalWrite (motor1Pin,LOW);
    digitalWrite (motor2Pin,LOW);
    val=250;
}

Cosa posso fare? Grazie

Potresti anteporre la lettura di j al ciclo while, che elimineresti (diventa un case dello switch), e sostituire tutti quegli if con un più immediato switch case.

Poi potresti anche presentarti nell'apposito topic e leggere il Regolamento del sito. :grin:

Benvenuto.