millis (): усё, што вам трэба ведаць пра функцыю Arduino

Arduino UNO функцыі міліс

У Arduino ёсць добры рэпертуар функцый, з якімі можна працаваць з цягам часу. Адзін з іх ёсць міліс (), інструкцыя, якая дае вам час у мілісекундах з моманту ўключэння платы Arduino. Гэта можа здацца абсурдам, і гэта служыць толькі для таго, каб даведацца, калі варачная панэль была ўключана, але праўда ў тым, што яна мае нашмат больш практычнага прымянення.

Па EJEMPLO, ён можа быць выкарыстаны для вызначэння часу, які прайшоў паміж двума і больш падзеямі, пазбягання адключэння (адскоку) кнопкі і г.д. Ён таксама можа быць выкарыстаны для адлюстравання часу выканання на крытычных этапах кода, гарантуючы, што праграма працуе ў рэжыме рэальнага часу.

Функцыя Millis ()

міліс функцыя Arduino

Як я ўжо згадваў, функцыя Arduino millis выкарыстоўваецца для вымярэння часу, і яна робіць гэта ў мілісекунд (мс), адсюль і яго назва. Іншымі словамі, лікавае значэнне, якое гэтая функцыя вяртае пры ўключэнні яе ў свой эскіз, - гэта часовыя дадзеныя, выражаныя ў гэтай адзінцы.

Вы павінны ведаць, што максімальнае значэнне гэтай зменнай складае unsigned long, гэта значыць доўга без знака. Гэта важна, бо пры выкарыстанні меншага памеру могуць узнікнуць праблемы з лагікай. Акрамя таго, вы павінны ведаць, што ён можа доўжыцца да 50 дзён часу (4.320.000.000 XNUMX XNUMX XNUMX мс), як толькі ён дасягне гэтага значэння, ён перазапусціцца і зноў пачнецца з нуля.

Іншае, што вы павінны ведаць, - гэта тое, што функцыянуе міліс не выкарыстоўвае параметры.

Іншыя часовыя функцыі Arduino

У Arduino ёсць іншыя функцыі, звязаныя з часам, якія вы можаце выкарыстоўваць у сваім кодзе. Адзін з іх ёсць знакамітая затрымка (), але ёсць яшчэ:

  • затрымка (): Гэта найбольш частая і распаўсюджаная з усіх функцый Arduino. Ён таксама выкарыстоўвае мілісекунды ў якасці мілісаў (). І ён таксама будзе тыпу unsigned long, а таксама не будзе мець зваротнага значэння. Ён выкарыстоўваецца ў асноўным для ўвядзення паўз падчас выканання праграмы з вялікай колькасцю прыкладанняў.
  • delayMicroseconds (): менш выкарыстоўваецца ў эскізах, у гэтым выпадку ён па-ранейшаму не падпісаны доўга, без зваротнага значэння, і ў гэтым выпадку выкарыстоўвае мікрасекунды. У цяперашні час максімальнае значэнне можа быць дасягнута з дакладнасцю 16383, а мінімальнае - 3 мкс. Калі вам прыходзіцца апрацоўваць чаканні даўжэй, рэкамендуецца выкарыстоўваць delay ().
  • мікра ((): таксама вяртае лікавае значэнне ў мікрасекундах (мкс) з таго часу, як плата Arduino пачала выконваць праграму. Гэта значыць, як міліс (), але з іншай адзінкай. На самай справе ён таксама выкарыстоўвае непадпісаны доўгі тып і таксама не выкарыстоўвае параметры. Але ў яго ёсць некаторыя дадатковыя адрозненні, напрыклад, ён скідаецца і пачынаецца з нуля, калі дасягае 70 хвілін. Што тычыцца яго дазволу 4 мкс, ці іншымі словамі, значэнне, якое ён вяртае, заўсёды будзе кратна чатыром (4, 8, 12, 16, ...). Памятаеце, што 1000 мкс - гэта 1 мс, а 1.000.000 1 XNUMX - XNUMX с.

Прыклады Millis () у IDE Arduino

Здымак экрана Arduino IDE

Гэта ўсё словы, і лепшы выгляд функцыі millis () паказвае некалькі прыкладаў простых эскізаў IDE Arduino, каб вы маглі бачыць некаторыя прыкладання і выпадкі выкарыстання. Дык вось некаторыя практычныя прыклады...

Можа выкарыстоўвацца з усе платы Arduino

1-Прыклад для растлумачце выкарыстанне з міліс ():

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
}

Вымерайце час паміж двума паслядоўнымі паведамленнямі:

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

Рабіць міргаць святлодыёдам з мілісекундамі ():

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

стварыць просты секвенсар для адпраўкі тэксту праз паслядоўны манітор праз розныя прамежкі часу з выкарыстаннем мілісекунд ():

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

Вы ўжо гэта ведаеце больш інфармацыі вы можаце спампаваць бясплатны курс праграмавання Arduino ў PDF.


Змест артыкула адпавядае нашым прынцыпам рэдакцыйная этыка. Каб паведаміць пра памылку, націсніце тут.

Будзьце першым, каб каментаваць

Пакіньце свой каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаныя *

*

*

  1. Адказны за дадзеныя: Мігель Анхель Гатон
  2. Прызначэнне дадзеных: Кантроль спаму, кіраванне каментарыямі.
  3. Легітымнасць: ваша згода
  4. Перадача дадзеных: Дадзеныя не будуць перададзены трэцім асобам, за выключэннем юрыдычных абавязкаў.
  5. Захоўванне дадзеных: База дадзеных, размешчаная Occentus Networks (ЕС)
  6. Правы: у любы час вы можаце абмежаваць, аднавіць і выдаліць сваю інфармацыю.