Go Down

Topic: Generazione numero a caso e seriale (Read 1 time) previous topic - next topic

contecavour

Il seguente codice mi fa uno scherzo strano:

Code: [Select]
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
Quote
NumeroCaso = random(0, 780);
viene eseguito 2 volte.
Ma il setup non dovrebbe essere eseguito solo una?
N



PaoloP

Se apri il serial monitor Arduino si resetta e il codice riparte da zero.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

contecavour

Ma non c'è qualcosa tipo

Code: [Select]

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

leo72

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

contecavour

Leo, non capisco la tua parte sul seme.

Io ho usato:
Code: [Select]
randomSeed(analogRead(0));

Non è la stessa cosa?

N

PaoloP


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.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

leo72


Leo, non capisco la tua parte sul seme.

Io ho usato:
Code: [Select]
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).

contecavour

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

No..vuoto a prender aria!

Quote
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.

contecavour

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

leo72


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 deve 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.

contecavour

Quote
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:

Quote
mi ripropone un numero diverso


Quote
numero diverso


Quote
diverso


:P

leo72

Diverso. Diverso. Diverso.  :smiley-eek:  :smiley-eek:
Fava. Fava. Fava.  :smiley-sweat: :smiley-sweat:

Lascia perdere i miei ultimi interventi, va'.....  :smiley-yell:

contecavour

Ok Ok Ok.  :)

Comunque mi avevi risposto subito con quel che serviva.
Quote
Si resetta sempre e comunque


Era la cosa che non sapevo.
Grazie

Go Up