Generazione numero a caso e seriale

Il seguente codice mi fa uno scherzo strano:

void setup() {
  Serial.begin(38400);
  inputString.reserve(200);
  inputStringTastierino.reserve(200);
  pinMode(ledpin, OUTPUT);  
  digitalWrite(ledpin, LOW);
  pinMode (speaker, OUTPUT);
  passo = 0;
  randomSeed(analogRead(0));
  NumeroCaso = random(0, 780); 
  Serial.print("Numero da indovinare "); 
  Serial.println(NumeroCaso); 
  
  lcd.begin(16, 2);
  lcd.print("Numero ");  
  lcd.print(NumeroCaso);  
}

Direi che parte e subito scrive un numero sul display, poi dopo un po la seriale è inizializzata e sembra tutto riparta da caso e mi ripropone un numero diverso. La cosa strana è che direi che il codice

NumeroCaso = random(0, 780);

viene eseguito 2 volte. Ma il setup non dovrebbe essere eseguito solo una? N

Se apri il serial monitor Arduino si resetta e il codice riparte da zero.

Ma non c'è qualcosa tipo

while (!Serial) {
    ; 
  }

Che aspetta finchè non apro la seriale? Si resetterebbe comunque? Comunque se domani uso una seriale normale e non il serial monitor non si resetta, giusto?

Grazie

Si resetta sempre e comunque (a meno di non intervenire a livello fisico sulla scheda…).

Per la questione del numero sempre uguale, devi usare un seme per inizializzare il generatore random dell’Arduino.
Normalmente si usa fare una lettura di un pin analogico flottante (non connesso a niente) e usare tale lettura per inizializzare il generatore con RandomSeed:
http://arduino.cc/en/Reference/RandomSeed

Leo, non capisco la tua parte sul seme.

Io ho usato:

randomSeed(analogRead(0));

Non è la stessa cosa?

N

contecavour: Comunque se domani uso una seriale normale e non il serial monitor non si resetta, giusto?

Se colleghi un convertitore USB-Seriale (con livelli TTL) ai pin 0 e 1, l'Arduino non si resetta.

contecavour:
Leo, non capisco la tua parte sul seme.

Io ho usato:

randomSeed(analogRead(0));

Non è la stessa cosa?

N

Sì, ho scritto senza leggere la tua risposta. Ma hai qualcosa sul pin A0? Hai provato a cambiare pin?
Strano che ti restituisca sempre lo stesso valore (così pare, visto che ottieni sempre lo stesso numero iniziale).

Ma hai qualcosa sul pin A0? Hai provato a cambiare pin?

No..vuoto a prender aria!

Strano che ti restituisca sempre lo stesso valore

Leo, o hai riletto male o mi sono spiegato male. Ho detto che partiva con un valore e poi subito un altro.

Ma come mi ha spiegato PaoloP, è il Serial Monito che resetta Arduino, quindi riparte da capo e rigenera un nuovo numero. Risolto quindi.

Come si fa a cambiare il titolo del Topic che volevo aggiungere RISOLTO?

contecavour: Leo, o hai riletto male o mi sono spiegato male. Ho detto che partiva con un valore e poi subito un altro.

Ma come mi ha spiegato PaoloP, è il Serial Monito che resetta Arduino, quindi riparte da capo e rigenera un nuovo numero. Risolto quindi.

No, se usi un seme sempre diverso la sequenza [u]deve[/u] essere sempre diversa! Si usa una lettura su un pin analogico flottante proprio perché anche la differenza di 1 unità tra una lettura e l'altra genera una sequenza differente. Quindi vuol dire che la lettura su A0 ti restituisce sempre lo stesso seme per cui la sequenza generata è anch'essa sempre uguale. A meno che tu, nella parte di codice che non hai pubblicato, non rimodifichi ulteriormente il generatore.

Direi che parte e subito scrive un numero sul display, poi dopo un po la seriale è inizializzata e sembra tutto riparta da caso e mi ripropone un numero diverso.

Leo, avevo scritto al primo posto:

mi ripropone un numero diverso

numero diverso

diverso

:P

Diverso. Diverso. Diverso. :astonished: :astonished: Fava. Fava. Fava. :sweat_smile: :sweat_smile:

Lascia perdere i miei ultimi interventi, va'..... :stuck_out_tongue_closed_eyes:

Ok Ok Ok. :)

Comunque mi avevi risposto subito con quel che serviva.

Si resetta sempre e comunque

Era la cosa che non sapevo. Grazie