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

Arduino UNO функции на милис

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

Од ejemplo, може да се искористи за да се одреди времето што поминало помеѓу два или повеќе настани, да се избегне одбивање (отскокнување) на копче, итн. Може да се искористи и за прикажување на времето на извршување во критичните фази на кодот, осигурувајќи дека програмата работи во реално време.

Функција Millis ()

функција на милисото Arduino

Како што веќе споменав, функцијата Arduino millis се користи за мерење на времето, и тоа го прави во милисекунди (мс), па оттука и неговото име. Со други зборови, нумеричката вредност што ја враќа оваа функција кога ќе ја вклучите во вашата скица е привремен податок изразен во таа единица.

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

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

Други привремени функции на Arduino

Arduino има други функции поврзани со времето што можете да ги користите во вашиот код. Една од нив е славното доцнење (), но има уште:

  • одложување (): Тој е најкористениот и најчестиот од сите функции на Arduino. Исто така, се користат милисекунди како милис (). И, исто така, ќе биде од типот непотпишан долго, покрај тоа што нема повратна вредност. Се користи главно за воведување паузи при извршување на програма, со многу апликации.
  • задоцнувањеМикросекунди (): се користи помалку во скиците, во овој случај тој е сè уште непотпишан долго, без повратна вредност и во овој случај користи микросекунди. Во моментов, максималната вредност може да се постигне со прецизност од 16383, а минималната од 3μs. Ако треба да се справите со чекањата подолго од тоа, препорачливо е да користите одложување ().
  • микро (): исто така враќа нумеричка вредност во микросекунди (μs) откако таблата Arduino започна да ја извршува програмата. Тоа е, тоа е како милис (), но со друга единица. Всушност, тој исто така го користи непотпишаниот долг тип и не користи параметри. Но, има некои дополнителни разлики, како на пример, дека се ресетира и започнува од нула кога ќе достигне 70 минути. Во однос на нејзината резолуција од 4 μs, или со други зборови, вредноста што ја враќа секогаш ќе биде повеќекратно од четири (4, 8, 12, 16,…). Запомнете дека 1000 μs е еднаква на 1 ms и 1.000.000 е еднаква на 1 s.

Примери на Милис () во Arduino IDE

Снимка на екранот од Arduino IDE

Овие се зборови, а најдобриот приказ на функцијата милис () покажува неколку примери на едноставни скици на Arduino IDE за да можете да видите некои апликации и да користите случаи. Еве неколку практични примери...

Може да се користи со сите табли на 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. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.