Arduino pomaga generować liczby losowe

Możliwość generowania liczb losowych w programie może być bardzo przydatna podczas tworzenia gier i efektów wizualnych. Liczby losowe można wykorzystać na przykład do zaimplementowania kostki do gry lub loterii w systemie Arduino, do utworzenia efektów świetlnych za pomocą diod LED lub do generowania efektów wizualnych i dźwiękowych na potrzeby quizu. Okazuje się jednak, że system Arduino nie oferuje możliwości generowania prawdziwych liczb losowych. Aby generowanie liczb losowych było możliwe, należy przekazać tzw. wartość początkową (ang. seed), czyli dowolną liczbę używaną, jako punkt wyjścia dla generowanych wartości losowych.
Generowanie liczb losowych na podstawie napięcia na wolnym pinie
Najprostszym sposobem wygenerowania liczby losowej w systemie Arduino jest napisanie programu odczytującego napięcie na wolnym (niepodłączonym) pinie analogowym (na przykład na pinie analogowym nr 0) za pomocą następującego wiersza w ciele funkcji void setup():
randomSeed(analogRead(0));
Mimo że do analogowego pinu wejściowego na płytce Arduino nie podłączono żadnych przewodów, zjawisko elektryczności statycznej otoczenia powoduje minimalne, mierzalne napięcie. Wysokość tego napięcia jest niemal losowa.
Oznacza to, że odczyt napięcia na wolnym pinie można wykorzystać w roli wartości początkowej podczas generowania liczby losowej (samą liczbę można uzyskać za pomocą wywołania funkcji random(lower, upper)). Parametry lower i upper umożliwiają określenie odpowiednio minimalnej i maksymalnej wartości liczby losowej. Aby na przykład wygenerować liczbę z przedziału od 100 do 1000, należałoby użyć następującego kodu:
int a = 0;
a = random(100, 1001);
W powyższym kodzie zastosowano wartość maksymalną 1001 (zamiast 1000), ponieważ wyznaczany przedział jest prawostronnie otwarty (wartość maksymalna nie jest zaliczana do tego przedziału). Aby wygenerować liczbę losową z przedziału od 0 do pewnej liczby, wystarczy przekazać tylko wartość maksymalną. Oto przykład generowania liczby losowej z przedziału od 0 do 6:
a = random(7);
Przykładowy szkic pokazany na listingu 1 wygeneruje liczby losowe z przedziału od 0 do 1000 oraz z przedziału od 10 do 50.
Listing 1. Generator liczb losowych
// Listing 1
int r = 0;
void setup()
{
randomSeed(analogRead(0));
Serial.begin(9600);
}
void loop()
{
Serial.print(„Liczba losowa z przedziału od 0 do 1000: „);
r = random(0, 1001);
Serial.println(r);
Serial.print(„Liczba losowa z przedziału od 10 do 50: „);
r = random(10, 51);
Serial.println(r);
delay(1000);
}

rys_1
Wynik wykonania tego szkicu wyświetlony w monitorze portu szeregowego pokazano na rysunku 1.
Jak już poznaliśmy, sposób generowania liczb losowych, w jednym z najbliższych wpisów przekażemy receptę utworzenia elektronicznej kostki do gry. J.W.

pełny materiał w pliku pdf

Komentarze z Facebooka

Komentarze obecnie - OFF.