Pelajaran 14/31-3: Contoh kode Arduino millis() 3 dengan tombol tekan
Pernahkah Anda perlu Arduino Anda untuk mengingat kapan sesuatu terjadi—seperti penekanan tombol—dan kemudian mengambil tindakan pada jumlah waktu yang tepat kemudian, sambil menjaga seluruh program Anda berjalan lancar? Ini adalah tantangan klasik dalam pemrograman Arduino, dan solusinya adalah fungsi millis(). Tutorial ini, bagian dari kursus Arduino Robojax, menunjukkan contoh praktis: mendeteksi apakah tombol tekan ditekan untuk kedua kalinya setelah penundaan 5 detik berlalu sejak penekanan pertama. Teknik ini adalah dasar untuk membuat proyek responsif dan non-blocking di mana waktu sangat penting.
Pola penggunaan millis() untuk melacak waktu tanpa menghentikan program ini sangat penting untuk berbagai aplikasi dunia nyata. Berikut adalah beberapa ide untuk menginspirasi proyek Anda sendiri:
- Antarmuka Tombol dengan Debounce: Terapkan sistem di mana tombol harus ditahan selama durasi tertentu (misalnya, 3 detik) untuk menyalakan perangkat, mencegah penekanan yang tidak disengaja.
- Aksi Berurutan: Buat sistem di mana satu peristiwa, seperti pemicu sensor gerak, mengaktifkan aksi sekunder yang hanya terjadi jika peristiwa lain terjadi dalam jendela waktu tertentu.
- Timer Interaksi Pengguna: Bangun proyek yang memerlukan input "konfirmasi" (seperti penekanan tombol kedua) dalam waktu yang ditentukan untuk menjalankan fungsi penting, seperti mengirim perintah atau menyalakan motor.
- Gerbang Sensor: Gunakan sinyal pertama dari sensor untuk memulai jendela waktu, di mana pembacaan sensor kedua yang berbeda dianggap valid atau diabaikan.
Perangkat Keras yang Diperlukan
Proyek ini menggunakan komponen dari kit Arduino SunFounder 3-in-1, yang merupakan sumber daya yang bagus untuk belajar. Anda akan membutuhkan:
- Papan Arduino (Uno, Nano, dll.)
- Tombol tekan momen
- Kabel jumper
Panduan Pengkabelan
Pengkabelan untuk contoh ini sangat sederhana, berkat resistor pull-up internal Arduino, yang menghilangkan kebutuhan akan resistor eksternal. (Dalam video pada 08:29)
- Hubungkan satu kaki tombol tekan ke pin GND di Arduino.
- Hubungkan kaki lainnya dari tombol tekan ke pin digital 2 di Arduino.
Dengan menggunakan INPUT_PULLUP, pin terhubung secara internal ke 5V, sehingga membaca HIGH secara normal. Saat tombol ditekan, itu menghubungkan pin ke GND, menyebabkan pembacaan LOW. Ini adalah logika yang akan kita gunakan dalam kode.
Penjelasan Kode
Inti dari proyek ini adalah logika yang melacak penekanan tombol pertama dan kemudian memeriksa penekanan kedua setelah interval waktu tertentu. Kode dirancang untuk non-blocking, artinya tidak akan menjeda eksekusi tugas lain dalam loop() Anda.
Di bagian atas sketsa, Anda akan menemukan variabel kunci yang dapat dikonfigurasi pengguna yang mengontrol perilaku waktu:
unsigned long event = 5000;// 5 detik
unsigned long buttonPushed =0;
event: Ini adalah variabel waktu yang penting. Ini mengatur durasi penundaan dalam milidetik. Dalam contoh ini, diatur ke5000, yang sama dengan 5 detik. Anda dapat mengubah nilai ini ke durasi lain sesuai kebutuhan proyek Anda.buttonPushed: Variabel ini digunakan sebagai penanda dan stempel waktu. Ini dimulai pada0dan diperbarui ke nilaimillis()saat pertama kali tombol ditekan. Waktu yang tersimpan ini kemudian digunakan untuk menghitung selisih untuk pemeriksaan penekanan kedua.
Logika dalam fungsi loop() bekerja dalam dua tahap. Pertama, ia membaca status tombol dan, jika ditekan untuk pertama kalinya (pb == LOW && buttonPushed == 0), ia mencatat waktu saat ini melalui millis() ke dalam variabel buttonPushed. Tahap kedua memeriksa apakah tombol masih ditekan dan apakah penekanan pertama telah dicatat. Jika demikian, ia menghitung selisih waktu antara waktu saat ini dan waktu penekanan pertama. Jika selisih ini lebih besar dari atau sama dengan waktu event Anda, ia menjalankan aksi—dalam kasus ini, mencetak pesan ke Serial Monitor.
Demonstrasi Proyek Langsung
Dalam video, kode diunggah ke Arduino, dan Serial Monitor dibuka untuk mengamati perilaku. (Dalam video pada 16:03) Anda akan melihat nilai millis() terus mencetak, menunjukkan waktu sejak program dimulai. Saat Anda menekan tombol untuk pertama kalinya, pesan seperti Penekanan pertama pada:5019 dicetak. Jika Anda menekan tombol lagi dan menahannya selama lebih dari 5 detik dari penekanan pertama, pesan Aksi setelah 5 detik dari penekanan pertama dicetak. Ini menunjukkan bahwa aksi hanya dipicu ketika penekanan kedua terjadi setelah penundaan yang ditentukan telah berlalu.
Kekuatan dari pendekatan ini adalah bahwa baris Serial.println(millis()) di bagian atas loop terus berjalan tanpa gangguan, membuktikan bahwa logika waktu tidak memblokir kode lain dari eksekusi. Ini adalah keuntungan mendasar dari menggunakan millis() daripada fungsi delay().
Proyek terkait dari video ini
- Pelajaran 14/31-1: Arduino Millis (tanpa delay) dan fungsi map | SunFounder Robojax
- Pelajaran 14/31-2: Contoh coding Arduino millis() 2 dengan event
- Pelajaran 14/31-4: Contoh coding Arduino map() 1
- Pelajaran 14/31-5: Contoh coding Arduino map() 2
Bab
- [00:00] Pengenalan millis() dan kursus ini
- [01:19] Apa itu millis() dan mengapa menggunakannya?
- [03:06] Contoh praktis pertama: mencetak millis()
- [05:46] Menggunakan millis() untuk memicu event setelah 5 detik
- [08:29] Contoh 2: Aksi tombol tekan dengan penundaan 5 detik
- [12:14] Contoh 3: Mendeteksi penekanan tombol kedua setelah penundaan
- [17:20] Pengenalan fungsi map()
- [19:47] Contoh praktis pemetaan persentase kecerahan LED
/*
Lesson 14/31: Arduino coding millis() example 3 with push button
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
unsigned long buttonPushed =0;
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
pinMode(2,INPUT_PULLUP);
}
void loop() {
// ilmoFan.com example-2 millis()
Serial.println(millis());
int pb = digitalRead(2);// read pin 2
if(pb ==LOW && buttonPushed ==0)
{
buttonPushed =millis();
Serial.print("First push at:");
Serial.println(buttonPushed);
}
if( pb ==LOW && buttonPushed >0 )
{
unsigned long difference = millis()- buttonPushed;
if( difference >= event)
{
Serial.println("Action after 5 seconds of first push");
}
}
}
Hal-hal yang mungkin Anda butuhkan
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Sumber daya & referensi
-
DokumentasiDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
EksternalPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Berkas📁
Panduan Pengguna
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB