Zar Atıcı
Coddy'nin Arduino Journey'sinin Ekranlar ve Sensörler bölümünün bir parçası. Ders 5 / 24.
random(1, 7), 1 ile 6 arasında bir tam sayı seçer. İlk sayı elde edebileceğin en düşük sayıdır; ikinci sayı ise en yüksek sayıdan bir fazlasıdır.
Tahtanın içinde gerçek bir rastgelelik yoktur. random(), seed adı verilen bir sayıdan başlayarak her sayıyı bir önceki sayıdan hesaplar. Aynı seed ile her çalıştırmada aynı sayıları verir: cihazı her açtığında zarların 2, 2, 6, 3 gelir.
randomSeed() seed değerini ayarlar. İlk düğmeye basma zamanı gibi, her çalıştırmada değişen bir değer ver. micros() saniyenin milyonda biri cinsinden sayar ve kimse aynı mikrosaniyede iki kez düğmeye basmaz:
if (!seeded) {
randomSeed(micros());
seeded = true;
}
int roll = random(1, 7);Seed değerini setup() içinde ayarlamak işe yaramaz: setup() her açılıştan sonra aynı mikrosaniyede çalışır.
Görev
OrtaDüğme 10 numaralı pine bağlı ve başlangıç kodu, düğmenin basıldığı anı zaten algılıyor. Bir zar yap:
- her basışta
random(1, 7)seç veshowDigit()ile göster - yalnızca ilk basışta
randomSeed(micros())çağır; böylece zar sonuçları her çalıştırmada farklı olur
Run düğmesine bas ve düğmeye birkaç kez bas, ardından Check düğmesine bas.
Kendin dene
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// Her rakam için bir desen, sağdan okunur: son bit a segmentidir.
// gfedcba
const byte digits[10] = {
0b0111111, // 0
0b0000110, // 1
0b1011011, // 2
0b1001111, // 3
0b1100110, // 4
0b1101101, // 5
0b1111101, // 6
0b0000111, // 7
0b1111111, // 8
0b1101111 // 9
};
void showDigit(int n) {
for (int i = 0; i < 7; i++) {
if (bitRead(digits[n], i) == 1) {
digitalWrite(segmentPins[i], LOW); // yanıyor
} else {
digitalWrite(segmentPins[i], HIGH); // sönük
}
}
}
const int buttonPin = 10;
bool wasPressed = false;
bool seeded = false;
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP);
showDigit(0);
}
void loop() {
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed != wasPressed) {
if (pressed) {
// düğmeye az önce basıldı: 1 ile 6 arasında bir sayı seç ve göster
}
delay(50); // düğmenin kararlı hâle gelmesini bekle
}
wasPressed = pressed;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Ekranlar ve Sensörler bölümündeki tüm dersler
1Yedi Segmentli Göstergeler
Yedi Segmentli GöstergeBaytlardaki Rakam DesenleriGöstergede SaymaSıfıra Geri SayımZar AtıcıKendi başına pratik yap: Arduino playground