millis () : Arduino 함수에 대해 알아야 할 모든 것

Arduino UNO 밀리 함수

Arduino는 시간이 지남에 따라 작업 할 수있는 좋은 기능 레퍼토리를 가지고 있습니다. 그들 중 하나는 밀리 (), Arduino 보드가 켜진 이후의 시간 (밀리 초)을 제공하는 명령입니다. 이것은 터무니없는 것처럼 보일 수 있으며 호브가 언제 켜 졌는지 알 수 있지만 사실은 더 많은 실용적인 응용 프로그램이 있다는 것입니다.

ejemplo, 두 개 이상의 이벤트 사이에 경과 한 시간을 확인하고 버튼의 디 바운스 (바운스)를 방지하는 데 사용할 수 있습니다. 또한 코드의 중요한 단계에서 실행 시간을 표시하여 프로그램이 실시간으로 작동하도록 할 수 있습니다.

Millis () 함수

밀리 함수 Arduino

이미 언급했듯이 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 () 예제

Arduino IDE의 스크린 샷

이들은 모두 단어이며 millis () 함수의 가장 좋은보기는 간단한 Arduino IDE 스케치의 몇 가지 예를 보여 주므로 일부 응용 프로그램과 사용 사례를 볼 수 있습니다. 그래서 여기에 몇 가지 실용적인 예...

함께 사용할 수 있습니다 모든 Arduino 보드

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 프로그래밍 과정.


기사의 내용은 우리의 원칙을 준수합니다. 편집 윤리. 오류를보고하려면 여기에.

코멘트를 첫번째로 올려

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.