Arduino memiliki repertoar fungsi yang bagus untuk digunakan seiring waktu. Salah satunya adalah milis (), instruksi yang memberi Anda waktu dalam milidetik sejak papan Arduino dihidupkan. Ini mungkin tampak tidak masuk akal, dan ini hanya berfungsi untuk mengetahui kapan kompor telah dinyalakan, tetapi kenyataannya ia memiliki lebih banyak aplikasi praktis.
Por ejemplo, dapat digunakan untuk menentukan waktu yang telah berlalu antara dua peristiwa atau lebih, menghindari debounce (pantulan) tombol, dll. Ini juga dapat berfungsi untuk menunjukkan waktu eksekusi dalam tahap kritis kode, memastikan bahwa program bekerja secara real time.
Fungsi milis ()
Seperti yang telah saya sebutkan, fungsi Arduino millis digunakan untuk mengukur waktu, dan melakukannya di milidetik (milidetik), oleh karena itu namanya. Dengan kata lain, nilai numerik yang dikembalikan oleh fungsi ini saat Anda memasukkannya ke dalam sketsa Anda adalah data sementara yang diekspresikan dalam unit itu.
Anda harus tahu bahwa nilai maksimum variabel ini adalah panjang tanpa tanda tangan, yaitu panjang tanpa tanda. Ini penting, karena jika yang lebih kecil digunakan, masalah logika dapat terjadi. Selain itu, Anda harus tahu bahwa ini dapat bertahan hingga 50 hari waktu (4.320.000.000 md), setelah mencapai nilai itu, ia akan memulai ulang dan memulai lagi dari nol.
Hal lain yang harus Anda ketahui adalah bahwa fungsi milis tidak menggunakan parameter.
Fungsi Arduino sementara lainnya
Arduino memiliki fungsi terkait waktu lainnya untuk Anda gunakan dalam kode Anda. Salah satunya adalah penundaan yang terkenal (), tetapi masih ada lagi:
- menunda(): Ini adalah fungsi Arduino yang paling banyak digunakan dan umum. Ini juga menggunakan milidetik sebagai milis (). Dan itu juga akan menjadi tipe unsigned long, serta tidak memiliki nilai kembali. Ini digunakan terutama untuk memperkenalkan jeda dalam eksekusi program, dengan banyak aplikasi.
- delayMicroseconds (): kurang digunakan dalam sketsa, dalam hal ini masih unsigned long, tanpa nilai balik, dan dalam hal ini menggunakan mikrodetik. Saat ini, nilai maksimum dapat dicapai dengan presisi 16383, dan minimum 3μs. Jika Anda harus menangani waktu tunggu lebih lama dari itu, disarankan untuk menggunakan delay ().
- mikro (): juga mengembalikan nilai numerik dalam mikrodetik (μs) sejak papan Arduino mulai menjalankan program. Artinya, ini seperti millis (), tetapi dengan unit lain. Bahkan, ia juga menggunakan tipe panjang unsigned dan juga tidak menggunakan parameter. Namun ada beberapa perbedaan tambahan, seperti reset dan mulai dari nol saat mencapai 70 menit. Mengenai resolusi 4 μs, atau dengan kata lain, nilai yang dikembalikannya akan selalu berupa kelipatan empat (4, 8, 12, 16,…). Ingatlah bahwa 1000 μs sama dengan 1 ms dan 1.000.000 sama dengan 1 s.
Contoh millis () di Arduino IDE
Ini semua adalah kata-kata, dan tampilan terbaik dari fungsi millis () adalah dengan menunjukkan beberapa contoh sketsa sederhana di Arduino IDE sehingga Anda dapat melihat beberapa aplikasi dan kasus penggunaan. Jadi inilah beberapa contoh praktis...
1-Contoh untuk jelaskan penggunaannya dari millis ():
unsigned long inicio, fin, transcurrido; // Declarar las variables a usar void setup(){ Serial.begin(9600); //Iniciar la comunicación serial } void loop(){ inicio=millis(); //Consultar ms desde que inició la ejecución del sketch delay(1000); //Espera 1 segundo fin=millis(); //Consultar ms fin del sketch transcurrido=fin-inicio; //Calcula el tiempo desde la última lectura Serial.println(transcurrido); //Muestra el resultado en el monitor serial delay(500); //Esperar medio segundo }
Ukur waktu antara dua pesan berseri:
unsigned long tiempo1 = 0; //Declaramos las variables e iniciamos a 0 unsigned long tiempo2 = 0; unsigned long diferenciaTiempo = 0; void setup() { Serial.begin(9600); Serial.println("Envía la letra A/a por la terminal serial"); } void loop() { if(Serial.available() > 0){ char datoRecibido = Serial.read(); if(datoRecibido == 'A' || datoRecibido == 'a'){ tiempo1 = millis(); Serial.println("Envía la letra B/b por la terminal Serial"); } else if(datoRecibido == 'b' && datoRecibido == 'B'){ tiempo2 = millis(); diferenciaTiempo = tiempo1-tiempo2; Serial.print("El tiempo transcurrido entre el primer y último dato enviado es: "); Serial.print(diferenciaTiempo); } } }
Untuk melakukan kedipkan LED dengan milis ():
int estadoLed; //Almacena el estado del LED (Encendido o apagado) int periodo = 100; //Tiempo que está el LED encendido o apagado unsigned long tiempoAnterior = 0; //Almacena tiempo de referencia para comparar void setup() { pinMode(13,OUTPUT); //Configura el pin 13 como salida para el LED } void loop() { if(millis()-tiempoAnterior>=periodo){ //Evalúa si ha transcurrido el periodo programado estadoLed=!estadoLed; //Cambia el estado del LED cada 100ms digitalWrite(13,estadoLed); //Actualiza el estado del LED al actual tiempoAnterior=millis(); //Almacena el tiempo actual como referencia } }
Buat a sequencer sederhana untuk mengirim teks melalui monitor serial pada interval waktu yang berbeda menggunakan milis ():
#define INTERVALO_MENSAJE1 3000 #define INTERVALO_MENSAJE2 5000 #define INTERVALO_MENSAJE3 7000 #define INTERVALO_MENSAJE4 15000 unsigned long tiempo_1 = 0; unsigned long tiempo_2 = 0; unsigned long tiempo_3 = 0; unsigned long tiempo_4 = 0; void print_tiempo(unsigned long tiempo_millis); void setup() { Serial.begin(9600); } void loop() { if(millis() > tiempo_1 + INTERVALO_MENSAJE1){ tiempo_1 = millis(); print_tiempo(tiempo_1); Serial.println("Soy"); } if(millis() > tiempo_2 + INTERVALO_MENSAJE2){ tiempo_2 = millis(); print_tiempo(tiempo_2); Serial.println("Un mensaje"); } if(millis() > tiempo_3 + INTERVALO_MENSAJE3){ tiempo_3 = millis(); print_tiempo(tiempo_3); Serial.println("De"); } if(millis() > tiempo_4 + INTERVALO_MENSAJE4){ tiempo_4 = millis(); print_tiempo(tiempo_4); Serial.println("Esperanza"); } } void print_tiempo(unsigned long tiempo_millis){ Serial.print("Tiempo: "); Serial.print(tiempo_millis/1000); Serial.print("s - "); }
Anda sudah tahu itu untuk informasi lebih lanjut Anda dapat mengunduh kursus pemrograman Arduino gratis dalam PDF.