Cari Kode

Pelajaran 14/31-2: Contoh pengkodean Arduino millis() 2 dengan event

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.

Mobil Sunfounder yang dirakit

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:

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

Gambar

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
917-Lesson 14/31-2: Arduino coding millis() example 2 with event
Bahasa: C++
/*
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

Sumber daya & referensi

Berkas📁

Panduan Pengguna