Arduino má dobrý repertoár funkcí, se kterými lze v průběhu času pracovat. Jedním z nich je millis (), instrukce, která vám poskytne čas v milisekundách od zapnutí desky Arduino. To se může zdát absurdní a slouží pouze ke zjištění, kdy byla varná deska zapnutá, ale pravdou je, že má mnohem více praktických aplikací.
Por ejemplo, lze jej použít k určení času, který uplynul mezi dvěma nebo více událostmi, k zabránění odskoku (odrazu) tlačítka atd. Mohlo by to být také použito k zobrazení doby spuštění v kritických fázích kódu a zajištění toho, že program funguje v reálném čase.
Funkce Millis ()
Jak jsem již zmínil, funkce Arduino millis se používá k měření času, a to v milisekundy (ms), proto jeho jméno. Jinými slovy, číselná hodnota, kterou tato funkce vrací, když ji zahrnete do náčrtu, je dočasná data vyjádřená v této jednotce.
Měli byste vědět, že maximální hodnota této proměnné je bez podpisu dlouho, to znamená dlouho bez znamení. To je důležité, protože pokud se použije menší, mohou nastat logické problémy. Kromě toho byste měli vědět, že může trvat až 50 dní (4.320.000.000 XNUMX XNUMX XNUMX ms), jakmile dosáhne této hodnoty, restartuje se a začne znovu od nuly.
Další věc, kterou musíte vědět, je, že funkce millis nepoužívá parametry.
Další dočasné funkce Arduina
Arduino má další časové funkce, které můžete použít ve svém kódu. Jedním z nich je slavné zpoždění (), ale je toho víc:
- zpoždění(): Je to nejpoužívanější a nejběžnější ze všech funkcí Arduina. Také používá milisekundy jako millis (). A bude také typu unsigned long, kromě toho, že nebude mít návratovou hodnotu. Používá se hlavně k zavedení pauz při provádění programu s mnoha aplikacemi.
- delayMicroseconds (): je méně používán v náčrtcích, v tomto případě je stále nepodepsaný dlouho, bez návratové hodnoty, a v tomto případě používá mikrosekundy. V současné době lze maximální hodnoty dosáhnout s přesností 16383 a minimálně 3 μs. Pokud musíte čekat déle, doporučujeme použít delay ().
- mikro (): také vrací číselnou hodnotu v mikrosekundách (μs) od doby, kdy deska Arduino začala provádět program. To znamená, že je to jako millis (), ale s jinou jednotkou. Ve skutečnosti také používá dlouhý typ bez znaménka a nepoužívá ani parametry. Má ale několik dalších rozdílů, například to, že se resetuje a začíná od nuly, když dosáhne 70 minut. Pokud jde o rozlišení 4 μs, nebo jinými slovy, hodnota, kterou vrátí, bude vždy násobkem čtyř (4, 8, 12, 16,…). Pamatujte, že 1000 1 μs se rovná 1.000.000 ms a 1 XNUMX XNUMX se rovná XNUMX s.
Millis () příklady v Arduino IDE
To jsou všechna slova a nejlepší pohled na funkci millis () ukazuje některé příklady jednoduchých náčrtů Arduino IDE, takže můžete vidět některé aplikace a případy použití. Takže tady jsou některé praktické příklady...
1-příklad pro vysvětlete použití od millis ():
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 }
Změřte čas mezi dvěma sériovými zprávami:
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); } } }
Dělat blikat LED s millis ():
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 } }
Vytvořit jednoduchý řadič poslat text přes sériový monitor v různých časových intervalech pomocí millis ():
#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 - "); }
Už to víte pro viac info si můžete stáhnout bezplatný kurz programování Arduino v PDF.