Mengenal fungsi random() pada Arduino

Hallo, selamat datang kembali. pernahkah kamu melihat di stage panggung lampu menyala secara acak tidak beraturan ? atau melihat dadu digital yang dimana ketika tombol dadu itu ditekan, dia bisa menampilkan angka sembarang tanpa kita tahu angka apa yang muncul selanjutnya ? project-project itu bisa kita buat dengan arduino menggunakan fungsi khusus untuk menghasilkan bilangan acak, fungsi itu adalah fungsi random(). ayo kita bahas :

random()

Fungsi random() berfungsi untuk menghasilkan bilangan acak dalam rentang tertentu, yang bisa kita tentukan sesuai kebutuhan. Fungsi ini berguna untuk menciptakan variasi atau keputusan acak dalam suatu program. berikut sintax nya:

				
					random(max)
random(min, max)
				
			
Paramenter:
  • max   : batas atas nilai acak
  • min    : batas bawah nilai acak

Nilai balik fungsi ini adalah bilangan diantara batas bawah dan batas atas dengan tipe data long. Ketika menggunakan fungsi random(), arduino akan membuat angka acak, namun angka acak yang dibuat memiliki urutan yang sama selama program tidak di reset, sehingga hasilnya tidak akan menjadi random lagi. untuk mengatasi ini, Kita bisa menggunakan fungsi randomseed(), fungsi ini akan mengambil suatu nilai (seed) dan menggunakan nilai itu untuk mengganti urutan bilangan acak yang dihasilkan oleh fungsi random(). Sehingga akan tercipta beberapa pola bilangan acak yang berbeda. Namun jika pembuatan angka acak sangat banyak, tetap akan menghasilkan beberapa sequent dengan pengulangan yang sama, sehingga hasilnya masih tetap bisa di prediksi.

Untuk mengatasi masalah itu kita perlu membuat parameter pada randomseed() memiliki nilai nya selalu acak, caranya adalah memasukan fungsi analogRead(pinAnalog) sebagai parameter  fungsi randomseed(), kenapa harus fungsi analogRead()?, itu Karena pin analog yang tidak digunakan tidak memiliki reference voltage, sehingga secara teknis pin tersebut mengalami “floating”, kondisi ini floating ini digunakan oleh fungsi randomseed() untuk menghasilkan sequence angka acak. 

randomseed()

Fungsi randomseed() membuat bilangan acak yang dihasilkan oleh fungsi random() semakin acak, semakin banyak variasi nilai pada parameter randomseed() semakin banyak pula pola bilangan acak yang bisa kita hasilkan. berikut syntaxnya : 

				
					randomSeed(seed)
				
			

Parameter :

  • seed    = bilangan bukan nol  dengan tipe data unsigned long

Kita bisa memasukan nilai berapa pun pada parameternya sesuai kebutuhan kita, jika hanya membutuhkan 3 pola bilangan acak, cukup masukan 3 nilai berbeda sebagai parameter randomseed()

Experiment

Sekarang kita coba membuat program yang bisa mendemonstrasikan kegunaan dari fungsi-fungsi diatas. bahan yang diperlukan hanya arduino UNO, push button, resistor dan kabel jumper, coba buat sesuai rangkaian dibawah :

Kemudian ketik sketch dibawah ini

				
					// Generate Random Number - purwarupa3D

const byte Button_Pin = 2;      
const int delay_Debounce = 50;  

int lastbuttonState = LOW;      
int lastFlickableState = LOW;  
int reading;                    

unsigned long lastDebounceTime = 0;   
unsigned long startTimer;             

void setup() {

Serial.begin(9600);
pinMode (Button_Pin,INPUT);
randomSeed(analogRead(0));

}

void loop() {
reading = digitalRead(Button_Pin); 
int randomNumber = random(100);

if (reading != lastFlickableState) {  
  lastDebounceTime = millis();
  lastFlickableState = reading;       
}

startTimer = millis();
if ((startTimer - lastDebounceTime) > delay_Debounce) {   
  if(lastbuttonState == LOW && reading == HIGH)
    Serial.println (randomNumber);
  lastbuttonState = reading;
}
}


				
			

jika ingin menggunakan simulator silakan klik disini, Upload sketch diatas dan buka serial monitor, kemudian tekan push button beberapa kali dan perhatikan serial monitor, muncul angka acak setiap kita menekan push button kan ? di simulator saya hasilnya seperti ini 

Mari kita bahas sketch nya, untuk saat ini cukup perhatikan saja beberapa baris dibawah ini karena sisanya hanya program debouncing push button(supaya sekali tekan hanya menampilkan 1 nilai acak)

  • Baris 17   : inisiasi randomseed() dengan menggunakan analogRead(A0) sebagai parameter
  • Baris 23   : Deklarasi variabel untuk menyimpan bilangan acak yang dihasilkan fungsi random()
  • Baris 33   : “Ketika push button ditekan, tampilkan nilai variabel randomNumber pada serial monitor

Sekian tutorial kali ini, semoga bermanfaat

Tinggalkan komentar