Menu
CoddyTech

Dua LED, Dua Kecepatan

Termasuk bagian Pengaturan Waktu Tanpa Delay dalam perjalanan Arduino di Coddy. Pelajaran 4 dari 18.

Dengan delay(), membuat dua LED berkedip dengan kecepatan berbeda menjadi teka-teki: setiap jeda membuat LED yang lain menunggu. Dengan millis(), semuanya mudah karena tidak ada yang menunggu.

Beri setiap tugas variabelnya sendiri: waktu terakhirnya sendiri dan statusnya sendiri. Lalu beri setiap tugas if sendiri di dalam loop(). Pada setiap perulangan, setiap tugas memeriksa jamnya sendiri dan bertindak hanya saat waktunya tiba:

unsigned long redPrevious = 0;
unsigned long greenPrevious = 0;

void loop() {
  unsigned long now = millis();
  if (now - redPrevious >= 500) {
    redPrevious = now;
    // ubah keadaan LED merah
  }
  if (now - greenPrevious >= 200) {
    greenPrevious = now;
    // ubah keadaan LED hijau
  }
}

Kedua tugas tidak pernah saling mengganggu. Kamu bisa menambahkan tugas ketiga dan keempat dengan cara yang sama: satu set variabel dan satu if untuk setiap tugas.

Jangan pernah menggunakan satu variabel waktu terakhir bersama untuk dua tugas. Tugas yang lebih cepat meresetnya begitu sering sehingga tugas yang lebih lambat tidak pernah mencapai intervalnya.

challenge icon

Tantangan

Mudah

LED merah pada pin 13 sudah berganti setiap 500 ms. Buat LED hijau pada pin 12 berganti setiap 200 ms pada saat yang sama:

  • tambahkan variabel greenPrevious dan greenState
  • tambahkan if kedua di loop() untuk LED hijau

Tekan Run dan lihat keduanya berkedip, lalu tekan Check.

Coba sendiri

const int redLed = 13;
const int greenLed = 12;

unsigned long redPrevious = 0;
int redState = LOW;

// tambahkan dua variabel untuk LED hijau di sini

void setup() {
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
}

void loop() {
  unsigned long now = millis();

  // LED merah berganti keadaan setiap 500 ms
  if (now - redPrevious >= 500) {
    redPrevious = now;
    if (redState == LOW) {
      redState = HIGH;
    } else {
      redState = LOW;
    }
    digitalWrite(redLed, redState);
  }

  // buat LED hijau berganti keadaan setiap 200 ms di sini
}
quiz iconUji dirimu

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

Semua pelajaran di Pengaturan Waktu Tanpa Delay

Latihan sendiri: Playground Arduino