millis (): هر آنچه درباره عملکرد آردوینو باید بدانید

Arduino UNO توابع میلی

آردوینو رپرتوار خوبی از عملکردها برای کار با زمان دارد. یکی از آنها میلی ()، دستورالعملی که از زمان روشن شدن برد آردوینو به شما میلی ثانیه زمان می دهد. این ممکن است پوچ به نظر برسد ، و فقط در زمان روشن بودن اجاق گاز کار می کند ، اما حقیقت این است که کاربردهای عملی بیشتری دارد.

توسط ejemplo، می توان برای تعیین زمان سپری شده بین دو یا چند رویداد ، جلوگیری از حذف مجدد (گزاف گویی) یک دکمه و غیره استفاده کرد. همچنین می تواند برای نشان دادن زمان اجرا در مراحل حساس کد استفاده شود و اطمینان حاصل شود که برنامه در زمان واقعی کار می کند.

تابع Millis ()

تابع millis آردوینو

همانطور که قبلاً اشاره کردم ، از تابع Arduino millis برای اندازه گیری زمان استفاده می شود و این کار را در داخل انجام می دهد میلی ثانیه، از این رو نام آن است. به عبارت دیگر ، مقدار عددی که این تابع هنگام قرار دادن آن در طرح خود برمی گرداند ، داده موقت بیان شده در آن واحد است.

باید بدانید که حداکثر مقدار این متغیر است امضا نشده طولانی، یعنی طولانی بدون علامت. این مهم است ، زیرا اگر از یک کوچکتر استفاده شود ، مشکلات منطقی ممکن است رخ دهد. علاوه بر این ، باید بدانید که می تواند تا 50 روز (4.320.000.000،XNUMX،XNUMX،XNUMX میلی ثانیه) طول بکشد ، وقتی به آن مقدار رسید دوباره راه اندازی می شود و دوباره از صفر شروع می شود.

نکته دیگری که باید بدانید عملکرد میلی است از پارامترها استفاده نمی کند.

سایر توابع موقت آردوینو

آردوینو توابع مربوط به زمان دیگری را نیز برای شما در نظر گرفته است تا بتوانید در کد خود استفاده کنید. یکی از آنها تاخیر معروف ()، اما موارد بیشتری وجود دارد:

  • تاخیر انداختن(): از همه توابع آردوینو بیشترین استفاده را دارد. همچنین از میلی ثانیه به عنوان میلی () استفاده می کند. و همچنین از نوع بدون علامت طولانی خواهد بود و همچنین مقدار بازگشتی ندارد. این برنامه عمدتا برای ایجاد مکث در اجرای یک برنامه ، با بسیاری از برنامه ها استفاده می شود.
  • تأخیر میکروثانیه (): در اسکچ ها کمتر استفاده می شود ، در این حالت هنوز طولانی امضا نشده ، بدون مقدار بازگشتی است و در این حالت از میکروثانیه استفاده می کند. در حال حاضر ، حداکثر مقدار را می توان با دقت 16383 و حداقل 3μs بدست آورد. اگر مجبور هستید بیش از این انتظار را تحمل کنید ، توصیه می شود از تأخیر استفاده کنید ().
  • میکرو (): همچنین از زمان شروع اجرای بورد آردوینو مقدار عددی را بر حسب میکروثانیه (μs) برمی گرداند. یعنی مثل میلی () است اما با واحد دیگر. در حقیقت ، از نوع طولانی بدون علامت نیز استفاده می کند و از پارامترها نیز استفاده نمی کند. اما این تفاوت های اضافی دارد ، از جمله اینکه با رسیدن به 70 دقیقه از صفر شروع می شود و از صفر شروع می شود. با توجه به وضوح آن 4 میکرو ثانیه ، یا به عبارت دیگر ، مقداری که باز می گرداند همیشه ضرب در چهار خواهد بود (4 ، 8 ، 12 ، 16 ،…). به یاد داشته باشید که 1000 μs برابر است با 1 ms و 1.000.000،1،XNUMX برابر است با XNUMX s.

نمونه های Millis () در Arduino IDE

عکس صفحه Arduino IDE

اینها همه کلمات هستند و بهترین نمایش تابع () با نمایش چند نمونه از اسکچ های ساده در Arduino IDE است تا بتوانید برخی از برنامه ها را ببینید و از موارد استفاده کنید. بنابراین در اینجا برخی از نمونه های عملی...

قابل استفاده با همه تخته های آردوینو

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
}

زمان را بین دو پیام سریال اندازه گیری کنید:

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 - ");
}

شما قبلاً این را می دانید برای MAS INFORMACION می توانید بارگیری کنید دوره رایگان برنامه نویسی آردوینو به صورت PDF.


محتوای مقاله به اصول ما پیوست اخلاق تحریریه. برای گزارش یک خطا کلیک کنید اینجا.

اولین کسی باشید که نظر

نظر خود را بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند با *

*

*

  1. مسئول داده ها: میگل آنخل گاتون
  2. هدف از داده ها: کنترل هرزنامه ، مدیریت نظرات.
  3. مشروعیت: رضایت شما
  4. ارتباط داده ها: داده ها به اشخاص ثالث منتقل نمی شوند مگر با تعهد قانونی.
  5. ذخیره سازی داده ها: پایگاه داده به میزبانی شبکه های Occentus (EU)
  6. حقوق: در هر زمان می توانید اطلاعات خود را محدود ، بازیابی و حذف کنید.