millis (): minden, amit tudnod kell az Arduino funkcióról

Arduino UNO millis funkciók

Az Arduino jó repertoárral rendelkezik olyan funkciókkal, amelyekkel az idő múlásával képes dolgozni. Az egyik az millisz (), egy utasítás, amely milliszekundumban adja meg az időt az Arduino tábla bekapcsolása óta. Ez abszurdnak tűnhet, és csak azt tudja megtudni, hogy a főzőlap mikor volt bekapcsolva, de az az igazság, hogy sokkal több gyakorlati alkalmazást kínál.

Által ejemplo, arra használható, hogy meghatározzuk a két vagy több esemény között eltelt időt, elkerüljük a gomb visszadobását (visszapattanását) stb. Használható a végrehajtási idő megjelenítésére a kód kritikus szakaszaiban is, biztosítva a program valós idejű működését.

Millis () függvény

millis funkció Arduino

Mint már említettem, az Arduino millis függvényt használják az idő mérésére, és ezt be is teszi milliszekundum (ms), innen ered a neve. Más szavakkal, a numerikus érték, amelyet ez a függvény ad vissza, ha felveszi a vázlatába, egy ideiglenes adat, amelyet ebben az egységben fejeznek ki.

Tudnia kell, hogy ennek a változónak a maximális értéke: aláíratlanul hosszú, vagyis hosszú jel nélkül. Ez azért fontos, mert ha kisebbet használunk, logikai problémák merülhetnek fel. Ezenkívül tudnia kell, hogy akár 50 napig is eltarthat (4.320.000.000 XNUMX XNUMX XNUMX ms), miután elérte ezt az értéket, újraindul és újra nulláról indul.

Egy másik dolog, amit tudnod kell, hogy a millisek működnek nem használ paramétereket.

Egyéb ideiglenes Arduino funkciók

Az Arduino más, idővel kapcsolatos funkciókat tartalmaz, amelyeket használhat a kódban. Az egyik az a híres késés (), de van még:

  • késleltetés(): Ez az Arduino funkciók közül a leggyakrabban használt és elterjedt. Ezredmásodperceket is használ milliszekundumként (). És hosszú, aláíratlan típusú is lesz, valamint nem lesz visszatérési értéke. Főként szünetek bevezetésére szolgál egy program végrehajtásában, sok alkalmazással.
  • késleltetés mikroszekundum (): kevésbé használják a vázlatokban, ebben az esetben még mindig hosszú ideig nincs aláírva, nincs visszatérési értéke, és ebben az esetben mikroszekundumokat használ. Jelenleg egy maximális érték 16383 pontossággal érhető el, a minimum pedig 3μs. Ha ennél hosszabb várakozásokat kell kezelnie, ajánlott a delay () használatát.
  • mikroszámítógépek (): szintén számértéket ad vissza mikroszekundumban (μs), mióta az Arduino tábla megkezdte a program végrehajtását. Vagyis olyan, mint a millis (), de egy másik egységgel. Valójában az aláíratlan hosszú típust is használja, és paramétereket sem használ. De van néhány további különbsége, például az, hogy visszaáll és nulláról indul, amikor eléri a 70 percet. A 4 μs felbontást, vagyis másképp fogalmazva, a visszaadott érték mindig négyes (4, 8, 12, 16,…) többszöröse lesz. Ne feledje, hogy 1000 μs egyenlő 1 ms-mal, és 1.000.000 1 XNUMX egyenlő XNUMX s-mal.

Millis () példák az Arduino IDE-ben

Az Arduino IDE képernyőképe

Ezek mind szavak, és a millis () függvény legjobb nézete néhány egyszerű Arduino IDE vázlat példáját mutatja, így láthat néhány alkalmazást és használati esetet. Tehát itt van néhány gyakorlati példák...

1-példa magyarázza el a felhasználást milliből ():

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
}

Mérje meg a két soros üzenet közötti időt:

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

Csinál villog egy LED millivel ():

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

Hozzon létre egy egyszerű szekvenszer szöveget küldeni a soros monitoron keresztül, különböző időközönként millisz () segítségével:

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

Ezt már tudja több információ letöltheti a ingyenes Arduino programozási tanfolyam PDF-ben.


Legyen Ön az első hozzászóló

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.