ミリ秒():Arduino関数について知る必要があるすべて

Arduino UNO ミリ関数

Arduinoには、時間の経過とともに機能する機能の優れたレパートリーがあります。 それらのXNUMXつは ミリス()、Arduinoボードがオンになってからの時間をミリ秒単位で与える命令。 これはばかげているように見えるかもしれません、そしてそれはホブがいつオンにされたかを知るのに役立つだけです、しかし真実はそれがもっと多くの実用的なアプリケーションを持っているということです。

POR ejemplo、XNUMXつ以上のイベント間で経過した時間を判別したり、ボタンのデバウンス(バウンス)を回避したりするために使用できます。 また、コードの重要な段階で実行時間を表示して、プログラムがリアルタイムで動作することを確認するためにも使用できます。

ミリス()関数

ミリ関数Arduino

すでに述べたように、Arduinoミリ関数は時間を測定するために使用されます。 ミリ秒(ms)、したがってその名前。 つまり、この関数をスケッチに含めたときに返される数値は、その単位で表された一時的なデータです。

この変数の最大値は次のとおりです。 署名なしlong、つまり、記号のない長いです。 これは重要です。小さいものを使用すると、ロジックの問題が発生する可能性があるためです。 さらに、最大50日(4.320.000.000ミリ秒)続く可能性があることを知っておく必要があります。その値に達すると、再起動してゼロから再開します。

あなたが知っておくべきもう一つのことは、ミリ関数が パラメータを使用しません.

その他の一時的なArduino機能

Arduinoには、コードで使用できる他の時間関連関数があります。 それらのXNUMXつは 有名な遅れ()、しかしもっとあります:

  • ディレイ():これは、すべてのArduino関数の中で最も使用され一般的なものです。 また、ミリ秒をミリ秒()として使用します。 また、戻り値がないことに加えて、unsignedlong型にもなります。 これは主に、多くのアプリケーションでプログラムの実行に一時停止を導入するために使用されます。
  • delayMicroseconds():スケッチではあまり使用されません。この場合はまだ符号なしの長い値であり、戻り値はありません。この場合はマイクロ秒を使用します。 現在、最大値は16383の精度で、最小値は3μsで達成できます。 それより長い待機を処理する必要がある場合は、delay()を使用することをお勧めします。
  • マイクロ():Arduinoボードがプログラムの実行を開始してから、マイクロ秒(μs)単位の数値も返します。 つまり、ミリ秒()に似ていますが、別の単位があります。 実際、unsigned long型も使用し、パラメーターも使用しません。 ただし、70分に達するとリセットされ、ゼロから開始するなど、いくつかの追加の違いがあります。 4μsの分解能、つまり、返される値は常に4の倍数(8、12、16、1000、…)になります。 1μsは1.000.000msに等しく、1はXNUMXsに等しいことに注意してください。

Arduino IDEのミリス()の例

ArduinoIDEのスクリーンショット

これらはすべて単語であり、millis()関数の最良のビューは、いくつかのアプリケーションとユースケースを見ることができるように、単純なArduinoIDEスケッチのいくつかの例を示しています。 だからここにいくつかあります 実例...

で使用できます すべてのArduinoボード

1-の例 使用法を説明する ミリ秒から():

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
}

XNUMXつのシリアルメッセージ間の時間を測定する:

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

を作成 シンプルなシーケンサー ミリ秒()を使用して異なる時間間隔でシリアルモニターを介してテキストを送信するには:

#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ÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。