Véletlen szám generálás



Néha igény támadhat véletlen szerű számok használatára, pl.: játék, statisztikai esetleg titkosító programok használatánál. Erre kínál megoldást a random() illetve a randomSeed()    utasítás.
Nem igazi véletlen számokról beszélünk, hanem egy bonyolult számítási függvény által generált számról. A random() utasítás két paramétert tartalmazhat, ha mindkettő be van írva akkor a generálandó szám alsó és felső határát állíthatjuk be velük. Ha csak egy szám van a zárójelek között az mindig a max értéket jelöli(felső határ), de paraméterek nélkül is megadható az utasítás. Pl.:

void setup(){
Serial.begin(9600);
}
void loop(){
int i,k,h;
i = random(100);
k = random(50,100);
h = random();
Serial.println(i);
Serial.println(k);
Serial.println(h);
Serial.println();
delay(1000);
}

Ha elindítjuk a soros monitort láthatjuk, hogy elkezd kiírni különböző számokat 100-ig. Jegyezzük
meg az első hármat, nyomjunk egy resetet, és figyeljük az új számokat. Ugyan azok a számok kezdik a sort mint az első esetben, ez jól példázza, hogy az értékek nem véletlen szerűek hanem egy számítás eredményei. Persze van lehetőség a számok véletlenszerűbb létrehozására a randomSeed() utasítás segítségével, ami a random kezdő értékét állítja be. Ha véletlenszerű kezdőértéket szeretnénk kapni legegyszerűbb egy üres analóg bemenet lekérdezése.


void setup(){
randomSeed(analogRead(0));
Serial.begin(9600);
}
void loop(){
int i;
i = random(1000);
Serial.println(i);
delay(1000);
}


Ha itt megfigyeljük a számokat, minden kezdésnél más és más értékeket kapunk, ez már véletlenszerű. Zárásul egy egyszerű játék ami felhasználja a véletlen szám generálást, lehetne hatékonyabb, lehetne elegánsabb, de legalább a miénk ;)


A kapcsolás:

és a kód:

void setup(){
Serial.begin(9600);
for (int i=2;i<9;i++){
pinMode(i,OUTPUT);
}
pinMode(9,INPUT);
randomSeed(analogRead(0));
}
void loop(){
int i;
if (digitalRead(9)== HIGH){ //nyomógomb lenyomása
for (int k=2;k<9;k++)
digitalWrite(i,LOW); // minden kimenet nullázása

// véletlenszerű felvillanás generálás (gurítás)
for(int k =0;k<100;k++){
i = random(2,9);
Serial.println(i);
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}

// dobot szám kijelzése
i = random(1,7);
switch (i){
case 1:
digitalWrite(5,HIGH);
break;
case 2:
digitalWrite(2,HIGH);
digitalWrite(8,HIGH);
break;

case 3:
digitalWrite(2,HIGH);
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
break;

case 4:
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
break;

case 5:
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(5,HIGH);
break;

case 6:
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
break;
}
}
}

 http://youtu.be/AN175otGSK0