millis (): semua yang anda perlu ketahui mengenai fungsi Arduino

Arduino UNO fungsi milis

Arduino mempunyai kumpulan fungsi yang baik untuk bekerja dari masa ke masa. Salah satunya ialah milis (), arahan yang memberi anda masa dalam milisaat sejak papan Arduino dihidupkan. Ini mungkin tidak masuk akal, dan hanya berfungsi untuk mengetahui kapan pinggan dihidupkan, tetapi sebenarnya ia mempunyai banyak aplikasi praktikal.

Oleh ejemplo, itu dapat digunakan untuk menentukan waktu yang telah berlalu antara dua atau lebih peristiwa, menghindari penolakan (pantulan) butang, dll. Ini juga dapat menunjukkan waktu pelaksanaan dalam tahap kritis kod, memastikan bahawa program berfungsi dalam waktu nyata.

Fungsi Millis ()

fungsi millis Arduino

Seperti yang telah saya nyatakan, fungsi Arduino millis digunakan untuk mengukur masa, dan ia berfungsi dalam milisaat (ms), oleh itu namanya. Dengan kata lain, nilai berangka yang dikembalikan fungsi ini apabila anda memasukkannya ke dalam lakaran anda adalah data sementara yang dinyatakan dalam unit tersebut.

Anda harus tahu bahawa nilai maksimum pemboleh ubah ini adalah tidak bertanda panjang, iaitu, panjang tanpa tanda. Ini penting, kerana jika yang lebih kecil digunakan, masalah logik dapat terjadi. Di samping itu, anda harus tahu bahawa ia boleh bertahan hingga 50 hari (4.320.000.000 ms), setelah mencapai nilai itu, ia akan dimulakan semula dan dimulakan semula dari sifar.

Perkara lain yang harus anda ketahui adalah bahawa milis berfungsi tidak menggunakan parameter.

Fungsi Arduino sementara yang lain

Arduino mempunyai fungsi lain yang berkaitan dengan masa untuk anda gunakan dalam kod anda. Salah satunya ialah kelewatan yang terkenal (), tetapi ada lebih banyak lagi:

  • kelewatan (): Ini adalah fungsi Arduino yang paling banyak digunakan dan umum. Ia juga menggunakan milisaat sebagai milisa (). Dan juga jenisnya tidak lama ditandatangani, serta tidak mempunyai nilai pengembalian. Ini digunakan terutama untuk memperkenalkan jeda dalam pelaksanaan program, dengan banyak aplikasi.
  • kelewatanMikrodetik (): kurang digunakan dalam sketsa, dalam hal ini masih belum ditandatangani panjang, tanpa nilai pengembalian, dan dalam hal ini menggunakan mikrodetik. Pada masa ini, nilai maksimum dapat dicapai dengan ketepatan 16383, dan minimum 3μs. Sekiranya anda terpaksa menunggu lebih lama dari itu, disarankan untuk menggunakan kelewatan ().
  • mikro (): juga mengembalikan nilai numerik dalam mikrodetik (μs) sejak papan Arduino mula melaksanakan program. Iaitu, seperti milis (), tetapi dengan unit lain. Sebenarnya, ia juga menggunakan jenis panjang yang tidak ditandatangani dan juga tidak menggunakan parameter. Tetapi ia mempunyai beberapa perbezaan tambahan, seperti tetapan semula dan bermula dari sifar ketika mencapai 70 minit. Mengenai resolusi 4 μs, atau dengan kata lain, nilai yang dikembalikan akan selalu menjadi gandaan empat (4, 8, 12, 16,…). Ingat bahawa 1000 μs sama dengan 1 ms dan 1.000.000 sama dengan 1 s.

Millis () contoh dalam Arduino IDE

Tangkapan skrin Arduino IDE

Ini semua kata-kata, dan pandangan terbaik fungsi millis () adalah dengan menunjukkan beberapa contoh lakaran ringkas di Arduino IDE sehingga anda dapat melihat beberapa aplikasi dan kes penggunaan. Jadi ini adalah beberapa contoh praktikal...

Boleh digunakan dengan semua papan Arduino

1-Contoh untuk terangkan penggunaannya dari milis ():

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 masa antara dua pesanan bersiri:

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);
     }
   }
}

Buat sekelip mata 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 penjujukan ringkas untuk menghantar teks melalui monitor bersiri pada selang waktu yang berbeza 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 bahawa más Informacion anda boleh memuat turun kursus pengaturcaraan Arduino percuma dalam bentuk PDF.


Menjadi yang pertama untuk komen

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.