Membiarkan hardware "memanggil" programmu — attachInterrupt, ISR, dan volatile.
Bagai kamu yang melihat jam setiap 5 detik untuk tahu apakah sudah jam 12. Boros CPU, dan bisa terlambat jika loop sedang sibuk.
Bagai kamu yang tidur, lalu dibangunkan saat jam berdering. CPU bebas mengerjakan hal lain; hardware "memotong" program saat ada kejadian penting.
attachInterrupt()delay() atau Serial.println()
(di Arduino asli, Serial di dalam ISR = bug klasik). Cukup tandai/hitung;
proses beratnya dilakukan di loop().
volatile untuk variabel yang diubah ISR dan
dibaca loop() — agar compiler tidak "mengoptimalkan" pembacanya.
Perhatikan: simSetPin(2, LOW) di sini berperan seperti "tombol fisik ditekan" —
begitu pin berubah, ISR dipanggil seketika (di simulator: sinkron, sebelum
simSetPin kembali).
Pola paling aman: ISR hanya menandai "ada kejadian", loop() yang
memprosesnya. Ini menghindari bug akibat kerja berat di dalam ISR.
Serial.println() di dalam ISR berbahaya di Arduino asli.