Menu
CoddyTech

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.

challenge icon

Görev

Orta

Düğ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ç ve showDigit() 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;
}
quiz iconKendini test et

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

Kendi başına pratik yap: Arduino playground