millis (): semua yang perlu Anda ketahui tentang fungsi Arduino

Arduino UNO fungsi milis

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 ()

fungsi millis Arduino

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

Tangkapan layar dari 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...

Bisa digunakan dengan semua papan Arduino

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.


Isi artikel mengikuti prinsip kami etika editorial. Untuk melaporkan kesalahan, klik di sini.

Jadilah yang pertama mengomentari

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.