Menjauh Dari Penundaan
Komponen dan persediaan
| | × | 1 | |
| | × | 2 | |
Tentang proyek ini
Video ini terinspirasi dari pertanyaan yang saya tabur secara online. tentang cara mengedipkan 2 LED dengan kecepatan berbeda.
Jika kita ingin mengedipkan sebuah led setiap 1000 milis dan yang kedua setiap 500 milis, kita masih bisa menggunakan penundaan, seperti ini, seperti yang Anda lihat, saya membagi penundaan 1000 milis dari LED pertama menjadi 500 milis kedipan pada kesepakatan kedua.
byte LED2 =12; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(LED2, OUTPUT);}void loop() { digitalWrite(LED_BUILTIN, TINGGI); digitalWrite(LED2, TINGGI); penundaan (500); digitalWrite(LED2, RENDAH); penundaan (500); digitalWrite(LED_BUILTIN, RENDAH); digitalWrite(LED2, TINGGI); penundaan (500); digitalWrite(LED2, RENDAH); penundaan (500); }
Tapi apa jadinya jika kita ingin mengedipkan yang lebih cepat dalam 300 milis daripada yang 500 milis. Di sinilah penggunaan delay membuatnya sangat rumit hingga tidak mungkin.
Jadi apa yang harus dilakukan? Berhenti menggunakan penundaan!
Kami bahkan mendapat contoh untuk itu di Arduino IDE dan disebut blinkwithoutdelay.
Saya menduplikasi logika LED pertama ke yang kedua dan mengatur penundaan yang diinginkan.
Jadi cobalah juga, dan hindari penundaan. Saya akan mengatakan satu hal terakhir, kode yang saya bagikan jauh dari sempurna, dan saya berpikir untuk mengubahnya, tetapi karena video ini ditujukan untuk orang-orang yang baru mengenal arduino, Saya memilih menentangnya.
Kode
Contoh Kode Arduino
const int ledPin =LED_BUILTIN;int ledState =RENDAH; unsigned long beforeMillis =0; interval panjang const =1000; const int ledPin2 =12;int ledState2 =RENDAH; unsigned lama sebelumnyaMillis2 =0; interval panjang const2 =300; void setup() { pinMode(ledPin, OUTPUT); pinMode(ledPin2, OUTPUT);}void loop() { unsigned long currentMillis =millis(); if (Millis saat ini - Mili sebelumnya>=interval) { Mili sebelumnya =Milis saat ini; if (ledState ==LOW) { ledState =TINGGI; } else { ledState =RENDAH; } digitalWrite(ledPin, ledState); } //end if if (Millis saat ini - sebelumnyaMillis2>=interval2) { sebelumnyaMillis2 =sewaMillis saat ini; if (ledState2 ==RENDAH) { ledState2 =TINGGI; } else { ledState2 =RENDAH; } digitalWrite(ledPin2, ledState2); } //akhiri jika }
Skema