Menu
CoddyTech

Simulator Lempar Dadu

Termasuk bagian Layar dan Sensor dalam perjalanan Arduino di Coddy. Pelajaran 5 dari 24.

random(1, 7) memilih bilangan bulat dari 1 sampai 6. Angka pertama adalah nilai terendah yang bisa kamu dapatkan, angka kedua adalah satu lebih banyak daripada nilai tertinggi.

Papan ini tidak memiliki keacakan sungguhan di dalamnya. random() menghitung setiap angka dari angka sebelumnya, dimulai dari angka yang disebut seed. Dengan seed yang sama, fungsi ini memberikan angka yang sama setiap kali dijalankan: dadu milikmu akan menunjukkan 2, 2, 6, 3 setiap kali kamu menyalakannya.

randomSeed() mengatur seed. Berikan sesuatu yang berubah setiap kali dijalankan, seperti waktu tombol pertama kali ditekan. micros() menghitung dalam satuan sepersejuta detik, dan tidak ada yang menekan tombol pada mikrodetik yang sama dua kali:

if (!seeded) {
  randomSeed(micros());
  seeded = true;
}
int roll = random(1, 7);

Mengatur seed di setup() tidak membantu: setup() berjalan pada mikrodetik yang sama setiap kali perangkat dinyalakan.

challenge icon

Tantangan

Sedang

Tombol berada di pin 10 dan kode awal sudah mendeteksi saat tombol ditekan. Buat dadu:

  • setiap kali tombol ditekan, pilih random(1, 7) dan tampilkan dengan showDigit()
  • hanya pada tekanan pertama, panggil randomSeed(micros()) agar hasil lemparan berbeda setiap kali program dijalankan

Tekan Jalankan dan tekan tombol beberapa kali, lalu Periksa.

Coba sendiri

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// Satu pola untuk setiap angka, baca dari kanan: bit terakhir adalah segmen a.
//                     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);   // menyala
    } else {
      digitalWrite(segmentPins[i], HIGH);  // mati
    }
  }
}

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) {
      // tombol baru saja ditekan: pilih angka acak dari 1 hingga 6 lalu tampilkan
    }
    delay(50);  // tunggu hingga tombol stabil
  }
  wasPressed = pressed;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Layar dan Sensor

Latihan sendiri: Playground Arduino