attendere che ci siano caratteri sulla seriale[risolto]

ciao,
come da titolo vorrei sapere se è possibile far attendere arduino che ci siano dati sulla seriale prima di continuare ad eseguire le altre operazioni.

si certo!
Nel loop puoi inserire un controllo if

void loop(){
if(Serial.available() >0){
....fai qualcosa
}
}

Esatto ...
whteice, fai sempre riferimento al ... "reference" : Serial.available() - Arduino Reference :wink:

Guglielmo

si scusate non ho specificato bene
if(Serial.available() >0) lo conosco
ma se non è available arduino esegue il codice successivo
io vorrei sapere se è possibile farlo attende che if(Serial.available() >0) sia vera prima di fare qualunque cosa.
Ad esempio non ho capito bene SerialEvent(), qualcuno me la spiega?
grazie e scusate le domande banali.

Una cosa del tipo:

while(!(Serial.available()){
//attendo
}
//resto del codice

?

ho provato questo

void leggoseriale()
{ 
  Serial.println("inserire valori");
  while (!Serial.available()){
  //attesa di valori seriale  
  }
  while (Serial.available()>0);
   
    for (int i=0;i<3;i++)
    { 
      cifre[i]=Serial.read();
      cifre[i+1]=0;
    }
  
  

}

ma purtroppo rimane fermo ad attendere anche in presenza di dati

Scusa come fai a sapere dove si ferma? Non hai messo neanche una Serial.print tranne che all'inizio.
Comunque vabè quel codice non l'avevo provato (ora non posso) l'ho buttato giù di getto :disappointed_relieved:

Vediamo se qualcun'altro da suggerimeti

si scusa era per non incasinare con il codice troppo lungo
all'esterno della funzione c'è il print dei valori
cmq credo che l'idea sia quella giusta

Questo codice a me funziona:

void setup() {    
Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps  
}

void loop() {
  leggoseriale();
}
char incomingByte = 0;   // for incoming serial data

void leggoseriale()
{ 
  Serial.println("inserire valori");
  while (!Serial.available()){
  //attesa di valori seriale  
  }
  while (Serial.available()>0){
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte);
  }
}

Occhio che nel tuo codice c'è un ";" di troppo secondo me:
while (Serial.available()>0);
penso sia questa istruzione a non farti uscire più dal ciclo.

Fammi sapere.

funziona ma bisogna mettere un delay mentre attende altrimenti se il passo 3 numeri ne legge solo uno, il primo.
non ho capito bene il motivo ma mdificando così

void leggoseriale()
{ 
  Serial.println("inserire valori");
  while (!Serial.available()){
  delay(1000);//attesa di valori seriale  
  }
  while (Serial.available()>0){
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte);
  }
}

funziona perfettamente
grazie a tutti :slight_smile:

Allora metti risolto nel titolo del primo post.

whteice:
... non ho capito bene SerialEvent(), qualcuno me la spiega?
grazie e scusate le domande banali.

Arrivo tardi, comunque nel main site Arduino c'e' un tutorial con un esempio:

grazie ci guardo subito