Timeout infinito per Serial.readBytes() o alternative

Ciao a tutti, spero che questa sia l'ultima domanda di oggi se no penso che mi bannate :smiley:

Allora, il mio arduino con bluetooth HC 06 deve stare in "standby" in attesa che arrivino sulla seriale 8 byte specifici che indicano che il terminale bluetooth si è connesso.

L'idea era di usare

Serial.readBytes(inMsg, 8)

ma ho scoperto che ha un timeout di 1000ms.

Ho quindi 2 alternative:
1) trovare un modo di settare ad infinito il timeout di Serial.readBytes() e spero vivamente che si possa fare, anche se io non ho trovato il modo
2) settare il timeout ad un valore molto alto (da quanto ho capito è 4294967295ms). Il problema è che se il client sta trasmettendo i fatidici 8 byte e guarda caso (ok, questo evento è ESTREMAMENTE improbabile lo so, ma mi piace fare le cose per bene) il timeout scade proprio durante la trasmissione mi potrei perdere i byte iniziali trasmessi e addio connessione.

Idee?

Mmm ... il codice che gestisce la lettura con timeout richiama questa funzione privata :

// private method to read stream with timeout
int Stream::timedRead()
{
  int c;
  _startMillis = millis();
  do {
    c = read();
    if (c >= 0) return c;
  } while(millis() - _startMillis < _timeout);
  return -1;     // -1 indicates timeout
}

... quindi, ad ogni carattere che riceve, il conteggio dei millis() ricomincia.

Impostando quindi il timeout nella Serial.setTimeout() al valore UINT32_MAX (è un valore definito in <stdint.h> e rappresenta il massimo valore di un unsigend long) ... non dovresti avere alcun problema :wink:

Guglielmo