Pages: [1]   Go Down
Author Topic: Generazione numero a caso e seriale  (Read 988 times)
0 Members and 1 Guest are viewing this topic.
Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il seguente codice mi fa uno scherzo strano:

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


Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma non c'è qualcosa tipo

Code:
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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 331
Posts: 22785
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Leo, non capisco la tua parte sul seme.

Io ho usato:
Code:
randomSeed(analogRead(0));

Non è la stessa cosa?

N
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 331
Posts: 22785
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Leo, non capisco la tua parte sul seme.

Io ho usato:
Code:
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).
Logged


Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 331
Posts: 22785
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

 smiley-razz
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 331
Posts: 22785
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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


Milan
Offline Offline
Sr. Member
****
Karma: 0
Posts: 375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok Ok Ok.  smiley

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

Era la cosa che non sapevo.
Grazie
Logged

Pages: [1]   Go Up
Jump to: