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