millis (): kabeh sing sampeyan kudu ngerti babagan fungsi Arduino

Arduino UNO fungsi millis

Arduino duwe repertoir fungsi sing apik kanggo kerja kanthi suwe. Salah sijine yaiku millis (), instruksi sing menehi sampeyan wektu ing milidetik wiwit papan Arduino diuripake. Iki bisa uga katon ora masuk akal, lan mung ngerti kapan hobine diuripake, nanging sejatine duwe aplikasi sing luwih praktis.

por ejemplo, bisa digunakake kanggo nemtokake wektu sing wis kliwat ing antarane rong acara utawa luwih, hindari tombol debouncing (bouncing), lsp. Iki uga bisa digunakake kanggo nuduhake wektu eksekusi ing tahap kritis kode, manawa program bisa digunakake kanthi nyata.

Fungsi Millis ()

millis fungsi Arduino

Kaya sing wis dakkandhakake, fungsi millis Arduino digunakake kanggo ngukur wektu, lan bisa ditindakake milliseconds (ms), mula jenenge. Kanthi tembung liyane, angka angka sing fungsi iki bali nalika sampeyan lebokake ing sketsa minangka data sementara sing ditulis ing unit kasebut.

Sampeyan kudu ngerti manawa nilai maksimum variabel iki yaiku unsigned dawa, yaiku, dawa tanpa tandha. Iki penting, amarga yen digunakake luwih cilik, bisa uga ana masalah logika. Kajaba iku, sampeyan kudu ngerti yen bisa nganti 50 dina (4.320.000.000 ms), yen wis entuk regane mula bakal diwiwiti maneh lan diwiwiti maneh saka nol.

Babagan liyane sing kudu sampeyan ngerti yaiku fungsi millis ora nggunakake paramèter.

Fungsi Arduino sementara liyane

Arduino duwe fungsi sing gegandhengan karo wektu liyane sing bisa digunakake ing kode sampeyan. Salah sijine yaiku wektu tundha misuwur (), nanging ana liyane:

  • tundha (): Iki fungsi sing paling umum lan umum kanggo kabeh fungsi Arduino. Uga nggunakake milliseconds minangka millis (). Lan uga bakal jinis ora ditandatangani dawa, saliyane ora duwe nilai bali. Iki digunakake utamane kanggo ngenalake jeda nalika nglakokake program, kanthi akeh aplikasi.
  • delayMicroseconds (): kurang digunakake ing sketsa, ing kasus iki isih ditandatangani dawa, tanpa regane bali, lan ing kasus iki nggunakake mikrosekon. Saiki, nilai maksimal bisa dipikolehi kanthi presisi 16383, lan minimal 3μs. Yen sampeyan kudu ngatasi ngenteni maneh, disaranake nggunakake wektu tundha ().
  • mikros (): uga ngasilake angka angka ing mikrosetik (μs) wiwit dewan Arduino wiwit nglakokake program kasebut. Yaiku kaya millis (), nanging karo unit liyane. Nyatane, uga nggunakake jinis dawa sing durung ditandatangani lan uga ora nggunakake paramèter. Nanging ana sawetara bedane tambahan, kayata reset lan diwiwiti saka nol nalika tekan 70 menit. Babagan résolusi 4 μs, utawa kanthi tembung liyane, regane sing dikembalikan bakal kaping pirang-pirang papat (4, 8, 12, 16,…). Elinga yen 1000 μs padha karo 1 ms lan 1.000.000 padha karo 1 s.

Millis () conto ing Arduino IDE

Screenshot saka Arduino IDE

Iki kabeh tembung, lan tampilan millis () sing paling apik yaiku nuduhake sawetara conto sketsa Arduino IDE sing gampang supaya sampeyan bisa ndeleng sawetara aplikasi lan nggunakake kasus. Dadi, ana sawetara conto praktis...

Bisa digunakake karo kabeh papan Arduino

1-Tuladha kanggo nerangake panggunaan saka 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 wektu ing antarane rong pesen serial:

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

Nggawe kedhip LED karo millis ():

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

Nggawe sequencer prasaja kanggo ngirim teks liwat monitor serial kanthi interval wektu sing beda nggunakake millis ():

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

Sampeyan wis ngerti sing kanggo informasi liyane sampeyan bisa download kursus program Arduino gratis ing PDF.


Konten artikel kasebut sesuai karo prinsip kita yaiku etika editorial. Kanggo nglaporake klik kesalahan Kene.

Dadi pisanan komentar

Ninggalake komentar sampeyan

Panjenengan alamat email ora bisa diterbitake. Perangkat kothak ditandhani karo *

*

*

  1. Tanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Kontrol SPAM, manajemen komentar.
  3. Legitimasi: idin sampeyan
  4. Komunikasi data: Data kasebut ora bakal dikomunikasikake karo pihak katelu kajaba kanthi kewajiban ukum.
  5. Panyimpenan data: Database sing dianakake dening Occentus Networks (EU)
  6. Hak: Kapan wae sampeyan bisa matesi, mulihake lan mbusak informasi sampeyan.