Kedipkan Dua LED dengan Kecepatan Berbeda pada Arduino Tanpa delay()
Komponen dan perlengkapan
Arduino UNO × 1
5 mm LED: Merah × 2
Tentang proyek ini
Video ini terinspirasi dari pertanyaan yang saya temukan online tentang cara membuat 2 LED berkedip dengan kecepatan berbeda.
Jika kita ingin membuat satu LED berkedip setiap 1000 milidetik dan yang lain setiap 500 milidetik, kita masih bisa menggunakan delay, seperti ini. Seperti yang Anda lihat, saya membagi delay 1000 milidetik pada LED pertama menjadi berkedip 500 milidetik pada LED kedua.
byte LED2 = 12; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(LED2, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(LED2, HIGH); delay(500); digitalWrite(LED2, LOW); delay(500); digitalWrite(LED_BUILTIN, LOW); digitalWrite(LED2, HIGH); delay(500); digitalWrite(LED2, LOW); delay(500); }
Tetapi apa yang akan terjadi jika kita ingin membuat yang lebih cepat berkedip setiap 300 milidetik alih-alih 500 milidetik? Di sinilah penggunaan delay menjadi sangat rumit, bahkan mustahil.
Jadi, apa yang harus dilakukan? Berhenti menggunakan delay!
Kami bahkan memiliki contohnya di Arduino IDE yang disebut blinkwithoutdelay.
Saya meniru logika LED pertama ke yang kedua dan mengatur delay yang diinginkan.
Cobalah juga, dan tinggalkan delay. Saya akan katakan satu hal terakhir, kode yang saya bagikan jauh dari sempurna, dan saya memikirkan untuk mengubahnya tetapi, karena video ini bertujuan untuk pemula Arduino, saya memilih untuk tidak melakukannya.
Kode
const int ledPin = LED_BUILTIN; int ledState = LOW; unsigned long previousMillis = 0; const long interval = 1000; const int ledPin2 = 12; int ledState2 = LOW; unsigned long previousMillis2 = 0; const long interval2 = 300; void setup() { pinMode(ledPin, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); } //end if if (currentMillis - previousMillis2 >= interval2) { previousMillis2 = currentMillis; if (ledState2 == LOW) { ledState2 = HIGH; } else { ledState2 = LOW; } digitalWrite(ledPin2, ledState2); } //end if } Skema