Pelajaran 14/31-2: Contoh pengkodean Arduino millis() 2 dengan event
Dalam tutorial ini, Anda akan mempelajari cara menggunakan fungsi millis() Arduino untuk memicu tindakan hanya setelah periode waktu tertentu berlalu, tanpa memblokir bagian lain dari program Anda. Ini adalah teknik mendasar untuk membuat proyek Arduino yang responsif di mana beberapa tugas perlu berjalan secara bersamaan, seperti mengedipkan LED sambil membaca sensor atau memantau penekanan tombol. Contoh spesifik ini berfokus pada memicu peristiwa setelah lima detik, tetapi logikanya dapat diterapkan pada banyak skenario dunia nyata.
Berikut adalah beberapa contoh praktis bagaimana Anda dapat menggunakan pola ini dalam proyek Anda sendiri:
- Aktivasi tertunda: Menyalakan kipas atau pompa hanya setelah sistem berjalan selama waktu yang ditentukan.
- Interlock keselamatan: Mengharuskan tombol ditekan dan ditahan selama durasi tertentu sebelum melakukan tindakan berbahaya, seperti menyalakan motor.
- Peringatan berbasis waktu: Memicu alarm atau notifikasi jika pembacaan sensor tidak berubah dalam jendela waktu tertentu.
- Timer non-blocking: Membuat timer "watchdog" yang mereset perangkat jika menjadi tidak responsif.
Masalah inti yang dipecahkan oleh ini adalah keterbatasan fungsi delay(). Saat Anda menggunakan delay(5000), Arduino berhenti mengeksekusi kode lain selama lima detik tersebut. Ini baik untuk sketsa sederhana, tetapi menjadi masalah besar dalam proyek yang lebih kompleks di mana Anda perlu membaca sensor, memperbarui tampilan, atau mendengarkan penekanan tombol sambil menunggu. Fungsi millis(), yang menghitung milidetik sejak papan dinyalakan, memungkinkan Anda memeriksa waktu tanpa menjeda program.
Perangkat Keras yang Dibutuhkan
- Papan Arduino (Uno, Nano, Mega, dll.)
- Sebuah tombol tekan
- Kabel jumper
Panduan Pengkabelan
Pengkabelan untuk contoh ini sangat sederhana. Ini menggunakan resistor pull-up internal, jadi tidak diperlukan resistor eksternal untuk tombol.
- Hubungkan satu kaki tombol tekan ke pin GND pada Arduino.
- Hubungkan kaki lainnya dari tombol tekan ke pin digital 2 pada Arduino.
Karena kita menggunakan INPUT_PULLUP dalam kode, pin akan membaca HIGH saat tombol tidak ditekan dan LOW saat ditekan, menghubungkan pin ke ground. (dalam video pada 08:29)
Memahami Kode
Kode ini mendemonstrasikan timer berbasis peristiwa yang sederhana. Program terus mencetak nilai millis() saat ini ke Serial Monitor. Ketika tombol tekan ditekan dan ditahan, dan Arduino telah berjalan setidaknya selama 5 detik, ia akan mencetak "Take action" ke Serial Monitor. Kuncinya adalah bahwa pemeriksaan millis() tidak menghentikan pencetakan waktu yang berkelanjutan.
Mari kita uraikan bagian kode yang dapat dikonfigurasi oleh pengguna:
unsigned long event = 5000;// 5 detik
Ini adalah variabel yang paling penting untuk dikonfigurasi. Ini mendefinisikan durasi "peristiwa" Anda dalam milidetik. Dalam contoh ini, diatur ke 5000, yang sama dengan 5 detik. Untuk mengubah penundaan, cukup ubah angka ini. Misalnya, mengaturnya ke 10000 akan membuat tindakan dipicu setelah 10 detik. Sangat penting untuk menggunakan tipe data unsigned long, karena nilai millis() dapat tumbuh sangat besar dan akhirnya akan melebihi nilai maksimum dari variabel int standar, menyebabkan kesalahan dalam perbandingan. (dalam video pada 05:46)
pinMode(2,INPUT_PULLUP);
Baris ini mengonfigurasi pin digital 2 sebagai input dan mengaktifkan resistor pull-up internalnya. Ini adalah langkah konfigurasi kunci yang memungkinkan Anda menghubungkan tombol tanpa resistor eksternal. Pin akan membaca HIGH secara default dan akan menjadi LOW saat tombol ditekan, menghubungkannya ke ground. Jika Anda ingin menggunakan pin yang berbeda, ubah angka 2 di sini dan di baris digitalRead(2) dalam loop. (dalam video pada 08:46)
Logika di dalam loop() sederhana. Ini membaca status tombol. Jika tombol ditekan (pb == LOW), maka ia memeriksa apakah waktu saat ini (millis()) lebih besar dari atau sama dengan waktu event yang Anda tentukan. Jika kedua kondisi benar, ia mencetak pesan tindakan. Sisa loop, yang mencetak waktu, terus berjalan tanpa gangguan, menunjukkan kekuatan millis() dibandingkan dengan delay().
Contoh ini memeriksa waktu sejak Arduino dimulai. Contoh ketiga dalam seri video membangun ini dengan merekam waktu penekanan tombol pertama dan memicu tindakan hanya jika penekanan kedua terjadi setidaknya 5 detik kemudian. Logika itu dibahas dalam Pelajaran 14/31-3: Contoh coding Arduino millis() 3 dengan tombol tekan.
Demonstrasi Proyek Langsung
Setelah Anda mengunggah kode dan membuka Serial Monitor (pada 9600 baud), Anda akan melihat aliran angka yang berkelanjutan, mewakili milidetik sejak papan dinyalakan. Jika Anda menekan dan menahan tombol tekan sebelum 5 detik berlalu, tidak akan terjadi apa-apa. Namun, jika Anda menekan dan menahan tombol setelah tanda 5 detik, Anda akan melihat pesan "Take action" dicetak di Serial Monitor. Tindakan akan terus dicetak selama tombol ditahan. Ini menunjukkan timer non-blocking yang memungkinkan kode lain (pencetakan) berjalan dengan lancar. (dalam video pada 10:52)
Proyek terkait dari video ini
Video ini adalah bagian dari seri multi-bagian tentang fungsi waktu dan pemetaan Arduino. Jelajahi tutorial lain yang dibuat dari sumber materi yang sama ini:
- Pelajaran 14/31-1: Arduino Millis (tanpa delay) dan fungsi map | SunFounder Robojax
- Pelajaran 14/31-3: Contoh kode Arduino millis() 3 dengan tombol tekan
- Pelajaran 14/31-4: Contoh kode Arduino map() 1
- Pelajaran 14/31-5: Contoh kode Arduino map() 2
Bab
- [00:00] Pengenalan millis() dan Kit SunFounder
- [01:19] Apa itu millis() dan mengapa menggunakannya daripada delay()?
- [03:06] Demonstrasi praktis: mencetak nilai millis()
- [05:46] Membuat event dengan millis() dan unsigned long
- [08:29] Merangkai dan membuat kode tombol tekan dengan INPUT_PULLUP
- [10:52] Menjalankan contoh event dengan tombol tekan
- [12:14] Pratinjau contoh 3: mendeteksi penekanan tombol kedua
- [17:20] Pengenalan fungsi map()
- [19:47] Membuat kode dan mendemonstrasikan fungsi map() dengan LED
/*
Lesson 14/31: Arduino coding millis() example 2 with event
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
unsigned long event = 5000;// 5 seconds
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// Robojax.com millis() example 1
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW)
{
if(millis() >= event)
{
Serial.println("Take action");
}// if end
}// if end
}// loop end
Hal-hal yang mungkin Anda butuhkan
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Lainnya
Sumber daya & referensi
-
EksternalPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Berkas📁
Panduan Pengguna
-
Manual perakitan SunFounder 3-in-1 Arduino Smart CarDokumen ini menunjukkan perakitan langkah demi langkah SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB