millis (): tout bagay ou bezwen konnen sou fonksyon an Arduino

Arduino UNO milis fonksyon

Arduino gen yon repètwa bon nan fonksyon yo travay avèk sou tan. Youn nan yo se milis (), yon enstriksyon ki ba ou tan an nan milisgond depi se tablo a Arduino vire sou. Sa a ka sanble absid, e ke li sèlman sèvi konnen lè yo te chofe plak la vire, men verite a se ke li gen anpil aplikasyon pou plis pratik.

By èjanplo, li ka itilize pou detèmine tan ki pase ant de oswa plis evènman, evite debase (rebondisman) yon bouton, elatriye. Li ta ka itilize tou pou montre tan ekzekisyon an nan etap kritik nan kòd la, asire ke pwogram nan travay nan tan reyèl.

Millis () fonksyon

milis fonksyon Arduino

Kòm mwen te deja mansyone, yo itilize fonksyon an Arduino millis pou mezire tan, epi li fè sa nan milisgond (ms), pakonsekan non li. Nan lòt mo, valè nimerik ke fonksyon sa a retounen lè ou enkli li nan chema ou se yon done tanporè ki eksprime nan inite sa a.

Ou ta dwe konnen ke valè maksimòm varyab sa a se san siyen lontan, se sa ki, depi lontan san siy. Sa a enpòtan, paske si yo itilize yon sèl ki pi piti, pwoblèm lojik ka rive. Anplis de sa, ou ta dwe konnen ke li ka dire jiska 50 jou nan tan (4.320.000.000 ms), yon fwa li te rive nan ki valè li pral rekòmanse epi yo kòmanse ankò soti nan zewo.

Yon lòt bagay ou dwe konnen se ke fonksyon an millis pa sèvi ak paramèt.

Lòt fonksyon Arduino tanporè

Arduino gen lòt fonksyon ki gen rapò ak tan pou ou itilize nan kòd ou an. Youn nan yo se reta a pi popilè (), men gen plis:

  • reta (): Li se pi itilize ak komen nan tout fonksyon yo Arduino. Li itilize tou milisgond kòm milis (). Epi li pral tou nan kalite non siyen lontan, menm jan tou pa gen yon valè retounen. Li se itilize sitou prezante poz nan ekzekisyon an nan yon pwogram, ak anpil aplikasyon.
  • delayMicroseconds (): se mwens itilize nan desen, nan ka sa a li se toujou non siyen lontan, ki pa gen okenn valè retounen, ak nan ka sa a li itilize mikrosgond. Kounye a, yo ka reyalize yon valè maksimòm avèk presizyon nan 16383, ak minimòm nan 3μs. Si ou gen okipe tann pi lontan pase sa, li rekòmande yo sèvi ak reta ().
  • micros (): tou retounen yon valè nimerik nan mikrosgond (μs) depi tablo a Arduino te kòmanse egzekite pwogram nan. Sa se, li se tankou milis (), men ak yon lòt inite. An reyalite, li itilize tou kalite ki pa siyen lontan epi li pa itilize paramèt swa. Men, li gen kèk diferans adisyonèl, tankou ke li retabli ak kòmanse soti nan zewo lè li rive nan 70 minit. Konsènan rezolisyon li yo nan 4 μs, oswa nan lòt mo, valè a li retounen ap toujou gen yon miltip nan kat (4, 8, 12, 16, ...). Sonje ke 1000 μs egal 1 ms ak 1.000.000 egal 1 s.

Millis () egzanp nan Arduino IDE

D 'Arduino IDE

Sa yo se tout mo, ak gade nan pi bon nan fonksyon an millis () se pa montre kèk egzanp nan desen senp nan IDE a Arduino pou ke ou ka wè kèk aplikasyon pou epi sèvi ak ka. Se konsa, isit la gen kèk egzanp pratik...

Èske yo kapab itilize ak tout tablo Arduino

1-Egzanp pou eksplike itilizasyon an soti nan 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
}

Mezire tan ki genyen ant de mesaj seri:

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

Ase bat yon LED ak 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
    }
}

Kreye yon senp sekansye voye tèks nan monitè seri a nan diferan entèval tan lè l sèvi avèk 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 - ");
}

Ou deja konnen sa pou plis enfòmasyon ou ka telechaje a kou pwogram Arduino gratis nan PDF.


Kontni an nan atik la respekte prensip nou yo nan etik editoryal. Pou rapòte yon erè klike sou isit la.

Se pou premye a fè kòmantè

Kite kòmantè ou

Adrès imèl ou pa pral dwe pibliye. Jaden obligatwa yo make ak *

*

*

  1. Responsab pou done yo: Miguel Ángel Gatón
  2. Objektif done yo: Kontwòl SPAM, jesyon kòmantè.
  3. Lejitimasyon: konsantman ou
  4. Kominikasyon nan done yo: done yo pa pral kominike bay twazyèm pati eksepte pa obligasyon legal.
  5. Done depo: baz done anime pa rezo Occentus (Inyon Ewopeyen)
  6. Dwa: Nenpòt ki lè ou ka limite, refè ak efase enfòmasyon ou yo.