Çoğunlukla küp şeklinde olan, her bir yüzünde 1 ila 6 arasındaki rakamlardan birini temsil eden sayıda nokta bulunan ve rastgele sayı üretmeye yarayan zarlar, genellikle şans oyunlarında kullanılmaktadır. Bu yazımızda zar işlevi gören bir dijital sistem oluşturacağız.
Arduino ile geliştireceğimiz bu eğlenceli uygulamada yer alan ekipmanların tamamı direnc.net stoklarında yer almaktadır. Arduino ile Zar Uygulaması için gereken ürünlerin listesi şöyle:
1 Adet 1K Direnç
6 Adet 5mm’lik LED
2 Adet Bas-Bırak Buton
1 Adet Buzzer
Dileğiniz adet veya özellikte Breadboard
1 adet Arduino Nano
1 Adet LED Display Saat Modül
Şimdi Arduino ile Zar Uygulaması’nın bağlantı şemasına bakalım:
Bağlantı şemasında da görüldüğü üzere, Arduino Nano’nun dijital pinlerine; LED’ler, Display ekranın DIO,CLK uçları ve butonlar bağlanıyor. Şimdi Arduino Nano’ya yükleyeceğimiz kodu inceleyelim. Kod satırlarında yer alan açıklamalar, ilgili kodun işlevini belirtmektedir:
#include <TM1637.h> #define DEBUG 0 int CLK = 9; int DIO = 10; TM1637 tm(CLK,DIO); // 6 adet LED'in bağlı olduğu dijital pinler tanımlanır int bir = 2; int iki = 3; int uc = 4; int dort = 5; int bes = 6; int alti = 7; // buton için pin tanımlanır int button = 12; // butona basılıp basılmadığı kontrol edilir int pressed = 0; void setup() { tm.set(2); // LED'lerin dijital pinleri OUTPUT olarak ayarlanır for (int i=bir; i<=alti; i++) { pinMode(i, OUTPUT); } // Butonun bağlı olduğu pin INPUT olarak ayarlanır pinMode(button, INPUT); // random fonksiyonundan değer belirlenir randomSeed(analogRead(0)); #ifdef DEBUG Serial.begin(9600); #endif } void buildUpTension() { // Zar atıldığında çıkan değer belli olana kadar, // LED'lerde kara şimşek uygulaması başlar // önce soldan sağa for (int i=bir; i<=alti; i++) { if (i!=bir) { digitalWrite(i-1, LOW); } digitalWrite(i, HIGH); delay(100); } // sonra sağdan sola for (int i=alti; i>=bir; i--) { if (i!=alti) { digitalWrite(i+1, LOW); } digitalWrite(i, HIGH); delay(100); } } // zar atıldıktan sonra çıkan rakan ekranda gösterilir void showNumber(int number) { digitalWrite(bir, HIGH); if (number >= 1) { digitalWrite(bir, HIGH); // 4 haneli display ekranın tamamında rakam gözüksün istiyoruz tm.display(3, 1); tm.display(2, 1); tm.display(1, 1); tm.display(0, 1); } if (number >= 2) { digitalWrite(iki, HIGH); tm.display(3, 2); tm.display(2, 2); tm.display(1, 2); tm.display(0, 2); } if (number >= 3) { digitalWrite(uc, HIGH); tm.point(1); tm.display(3, 3); tm.display(2, 3); tm.display(1, 3); tm.display(0, 3); } if (number >= 4) { digitalWrite(dort, HIGH); tm.point(1); tm.display(3, 4); tm.display(2, 4); tm.display(1, 4); tm.display(0, 4); } if (number >= 5) { digitalWrite(bes, HIGH); tm.point(1); tm.display(3, 5); tm.display(2, 5); tm.display(1, 5); tm.display(0, 5); } if (number == 6) { digitalWrite(alti, HIGH); tm.point(1); tm.display(3, 6); tm.display(2, 6); tm.display(1, 6); tm.display(0, 6); } } int throwDice() { // 1 ila 6 arasında random bir rakam verilsin istiyoruz int randNumber = random(1,7); #ifdef DEBUG Serial.println(randNumber); #endif return randNumber; } void setAllLEDs(int value) { for (int i=bir; i<=alti; i++) { digitalWrite(i, value); } } void loop() { // Butona basıldığında zar atılmaya başlar pressed = digitalRead(button); if (pressed == HIGH) { // önceki rakam kaldırılır setAllLEDs(LOW); buildUpTension(); int thrownNumber = throwDice(); showNumber(thrownNumber); } }
Arduino ile Zar Uygulaması’na yukarıdaki kod yüklendikten sonra, sistemimiz hazır hale gelecektir. Şimdi her butona basılma durumunda Buzzer ötecek şekilde tasarlanan devre şemasında, rastgele seçilen sayı değeri hem LED adeti kadar yanacak hem de sayı display’de gösterilecek. Rastgele seçilen sayı 6 olursa, buzzer sürekli ses çıkaracak ve LED’lerin tamamı yanacak. Ayrıca LED’ler yandığında Kara Şimşek düzeninde yanacak.
Arduino Zar Uygulaması’nda karşılıklı 2 kişinin oynayacağı bu oyunda 6 rakamını ilk bulan kazanmış olacak. Direnc.net Youtube kanalımızdan da Arduino ile Zar Uygulaması projesini izleyerek inceleyebilirsiniz:
Bir Sonraki yazıda görüşmek dileğiyle…