миллис (): све што треба да знате о функцији Ардуино

Arduino UNO милис функције

Ардуино има добар репертоар функција за рад с временом. Један од њих је милис (), упутство које вам даје време у милисекундама од укључивања плоче Ардуино. Ово може изгледати апсурдно и служи само да се зна када је плоча за кухање укључена, али истина је да има много више практичних примена.

По ејемпло, може се користити за одређивање времена које је протекло између два или више догађаја, избегавање отказивања (одбијања) дугмета итд. Такође се може користити за приказ времена извршавања у критичним фазама кода, осигуравајући да програм ради у реалном времену.

Функција Миллис ()

милис функција Ардуино

Као што сам већ поменуо, функција Ардуино миллис се користи за мерење времена и то чини у милисекунди (мс), отуда и његово име. Другим речима, нумеричка вредност коју ова функција враћа када је укључите у скицу привремени су подаци изражени у тој јединици.

Требали бисте знати да је максимална вредност ове променљиве непотписан дуго, односно дуго без знака. Ово је важно, јер ако се користи мањи, могу се појавити логички проблеми. Поред тога, требали бисте знати да може трајати и до 50 дана (4.320.000.000 мс), када достигне ту вредност, поново ће се покренути и поново покренути од нуле.

Још једна ствар коју морате знати је да милис функционише не користи параметре.

Остале привремене функције Ардуина

Ардуино има друге функције повезане са временом које можете користити у свом коду. Један од њих је чувено кашњење (), али постоји још:

  • кашњење (): То је најчешће коришћена и најчешћа од свих функција Ардуина. Такође користи милисекунде као милисекунде (). Такође ће бити типа унсигнед лонг, поред тога што нема повратну вредност. Углавном се користи за увођење пауза у извршавању програма, са многим апликацијама.
  • делаиМицросецондс (): мање се користи у скицама, у овом случају је и даље непотписан дуго, без повратне вредности, а у овом случају користи микросекунде. Тренутно се максимална вредност може постићи са прецизношћу од 16383, а минимална од 3 μс. Ако морате да се бавите чекањима већим од тога, препоручује се коришћење делаи ().
  • микро (): такође враћа нумеричку вредност у микросекундама (μс) откако је Ардуино плоча почела да извршава програм. Односно, то је попут милиса (), али са другом јединицом. У ствари, такође користи непотписани лонг тип и не користи ни параметре. Али има неке додатне разлике, попут оне да се ресетује и почиње од нуле када достигне 70 минута. Што се тиче његове резолуције од 4 μс, или другим речима, вредност коју врати увек ће бити вишеструка од четири (4, 8, 12, 16, ...). Запамтите да је 1000 μс једнако 1 мс, а 1.000.000 1 с.

Примери Миллис () у Ардуино ИДЕ-у

Снимак екрана за Ардуино ИДЕ

Све су то речи, а најбољи приказ функције миллис () је приказан кроз примере једноставних скица у Ардуино ИДЕ-у, тако да можете видети неке апликације и случајеве употребе. Дакле, ево неких практични примери...

Може се користити са све Ардуино плоче

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

То већ знате за мас информацион можете да преузмете бесплатни курс Ардуино програмирања у ПДФ-у.


Будите први који ће коментарисати

Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.