Bab 12 · Arduino Uno R3
Mengatur Terang LED dengan PWM dan Waktu dengan millis
Bedakan PWM dan tegangan analog, lalu buat LED berubah terang sambil tetap membaca tombol tanpa delay.
PWM untuk mengatur terang LED
Pada Uno R3, analogWrite() mengatur pulsa digital yang hidup dan mati dengan cepat. Nilai 0 berarti padam dan 255 berarti menyala penuh. Nilai di antaranya mengubah bagian waktu saat pulsa menyala. Jadi, pin ini tidak menghasilkan tegangan analog stabil seperti keluaran pengatur tegangan.
Rangkai pin 9 → resistor 330 Ω → anoda LED, lalu katoda LED → GND. Hubungkan tombol antara pin 2 dan GND. Gunakan pin 9 karena mendukung PWM.
Mengapa mulai memakai millis?
delay(1000) menahan alur program selama satu detik. Untuk latihan Blink itu cukup, tetapi tombol tidak diperiksa selama menunggu. millis() memberi jumlah milidetik sejak board mulai berjalan. Kita dapat memeriksa apakah waktunya tiba, lalu meneruskan pekerjaan lain.
Contoh utuh: LED meredup dan tombol pemadam
const int PIN_LED = 9;
const int PIN_TOMBOL = 2;
unsigned long sebelumnya = 0;
const unsigned long SELANG = 20;
int terang = 0;
int langkah = 5;
void setup() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_TOMBOL, INPUT_PULLUP);
}
void loop() {
unsigned long sekarang = millis();
if (digitalRead(PIN_TOMBOL) == LOW) {
analogWrite(PIN_LED, 0);
sebelumnya = sekarang;
return;
}
if (sekarang - sebelumnya >= SELANG) {
sebelumnya = sekarang;
terang += langkah;
if (terang >= 255) {
terang = 255;
langkah = -5;
} else if (terang <= 0) {
terang = 0;
langkah = 5;
}
analogWrite(PIN_LED, terang);
}
}LED perlahan menjadi terang lalu redup. Menahan tombol memadamkan LED; melepasnya melanjutkan perubahan terang dari nilai terakhir. return mengakhiri pemanggilan loop saat itu, lalu Arduino memanggil loop lagi. Ini bukan perintah untuk mematikan board.
Membandingkan selisih waktu
Gunakan unsigned long untuk waktu dan bentuk sekarang - sebelumnya >= SELANG. Penghitung millis() akhirnya kembali ke nol setelah sekitar 50 hari; pengurangan bilangan unsigned tetap bekerja melintasi pergantian tersebut untuk selang pendek seperti contoh ini. Hindari menyimpan hasil millis() ke int.
Latihan dan rujukan
Ubah SELANG dari 20 menjadi 50 untuk memperlambat perubahan terang. Lalu coba langkah sebesar 1, termasuk nilai baliknya −1. Satu perubahan setiap percobaan akan membuat pengaruhnya lebih mudah diamati. Lihat panduan PWM Arduino untuk daftar pin pada board lain.