Arduino는 시간이 지남에 따라 작업 할 수있는 좋은 기능 레퍼토리를 가지고 있습니다. 그들 중 하나는 밀리 (), Arduino 보드가 켜진 이후의 시간 (밀리 초)을 제공하는 명령입니다. 이것은 터무니없는 것처럼 보일 수 있으며 호브가 언제 켜 졌는지 알 수 있지만 사실은 더 많은 실용적인 응용 프로그램이 있다는 것입니다.
로 ejemplo, 두 개 이상의 이벤트 사이에 경과 한 시간을 확인하고 버튼의 디 바운스 (바운스)를 방지하는 데 사용할 수 있습니다. 또한 코드의 중요한 단계에서 실행 시간을 표시하여 프로그램이 실시간으로 작동하도록 할 수 있습니다.
Millis () 함수
이미 언급했듯이 Arduino millis 함수는 시간을 측정하는 데 사용되며 밀리 초 (ms), 따라서 그 이름. 즉, 스케치에 포함시킬 때이 함수가 반환하는 숫자 값은 해당 단위로 표현 된 임시 데이터입니다.
이 변수의 최대 값은 부호없는 긴즉, 부호가없는 길다. 더 작은 것을 사용하면 논리 문제가 발생할 수 있기 때문에 이것은 중요합니다. 또한 최대 50 일 (4.320.000.000ms)까지 지속될 수 있으며 해당 값에 도달하면 다시 시작되고 XNUMX부터 다시 시작됩니다.
당신이 알아야 할 또 다른 것은 millis 함수가 매개 변수를 사용하지 않음.
기타 임시 Arduino 기능
Arduino에는 코드에서 사용할 수있는 다른 시간 관련 기능이 있습니다. 그들 중 하나는 유명한 지연 (),하지만 더 있습니다 :
- 지연(): 모든 Arduino 기능 중 가장 많이 사용되고 일반적입니다. 또한 밀리 초를 밀리 초 ()로 사용합니다. 또한 반환 값이 없을뿐만 아니라 unsigned long 유형이됩니다. 주로 많은 응용 프로그램과 함께 프로그램 실행에서 일시 중지를 도입하는 데 사용됩니다.
- delayMicroseconds (): 스케치에서 덜 사용됩니다.이 경우에는 여전히 부호가없고 반환 값이 없으며이 경우 마이크로 초를 사용합니다. 현재 최대 값은 16383의 정밀도와 최소 3μs로 달성 할 수 있습니다. 그보다 오래 대기해야하는 경우 지연 ()을 사용하는 것이 좋습니다.
- 마이크로 (): 또한 Arduino 보드가 프로그램 실행을 시작한 이후 마이크로 초 (μs) 단위의 숫자 값을 반환합니다. 즉, millis ()와 비슷하지만 다른 단위가 있습니다. 실제로 unsigned long 유형도 사용하며 매개 변수도 사용하지 않습니다. 그러나 70 분에 도달하면 재설정되고 4에서 시작하는 것과 같은 몇 가지 추가 차이점이 있습니다. 4μs의 분해능, 즉 반환되는 값은 항상 8의 배수 (12, 16, 1000, 1,…)입니다. 1.000.000μs는 1ms와 XNUMX은 XNUMXs와 같습니다.
Arduino IDE의 Millis () 예제
이들은 모두 단어이며 millis () 함수의 가장 좋은보기는 간단한 Arduino IDE 스케치의 몇 가지 예를 보여 주므로 일부 응용 프로그램과 사용 사례를 볼 수 있습니다. 그래서 여기에 몇 가지 실용적인 예...
1- 예제 사용 설명 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 }
두 개의 직렬 메시지 사이의 시간 측정:
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); } } }
할 LED를 깜박이다 밀리 () 포함 :
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 } }
만들기 간단한 시퀀서 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 - "); }
당신은 이미 알고 있습니다 더 당신은 다운로드 할 수 있습니다 PDF로 된 무료 Arduino 프로그래밍 과정.