millis (): كل ما تحتاج لمعرفته حول وظيفة Arduino

Arduino UNO وظائف ميلي

تمتلك Arduino مجموعة جيدة من الوظائف للعمل معها بمرور الوقت. واحد منهم هو ميلي ()، تعليمات تمنحك الوقت بالمللي ثانية منذ تشغيل لوحة Arduino. قد يبدو هذا سخيفًا ، وأنه لا يعمل إلا على معرفة وقت تشغيل الموقد ، ولكن الحقيقة هي أن له العديد من التطبيقات العملية.

من قبل مثال، يمكن استخدامه لتحديد الوقت المنقضي بين حدثين أو أكثر ، وتجنب ارتداد الزر ، وما إلى ذلك. يمكن أن يعمل أيضًا على إظهار وقت التنفيذ في المراحل الحرجة من الكود ، مما يضمن عمل البرنامج في الوقت الفعلي.

دالة ميلي ()

وظيفة ملي ثانية اردوينو

كما ذكرت سابقًا ، تُستخدم وظيفة Arduino millis لقياس الوقت ، وهي تفعل ذلك في مللي ثانية (مللي ثانية)ومن هنا جاء اسمها. بمعنى آخر ، القيمة العددية التي ترجعها هذه الوظيفة عند تضمينها في الرسم التخطيطي الخاص بك هي بيانات مؤقتة يتم التعبير عنها في تلك الوحدة.

يجب أن تعلم أن الحد الأقصى لقيمة هذا المتغير هو غير موقعة طويلة، وهذا هو ، طويل بدون علامة. هذا مهم ، لأنه إذا تم استخدام واحدة أصغر ، يمكن أن تحدث مشاكل منطقية. بالإضافة إلى ذلك ، يجب أن تعلم أنه يمكن أن يستمر حتى 50 يومًا (4.320.000.000،XNUMX،XNUMX،XNUMX مللي ثانية) ، بمجرد وصوله إلى هذه القيمة ، سيتم إعادة التشغيل والبدء مرة أخرى من الصفر.

شيء آخر يجب أن تعرفه هو أن وظيفة المللي لا تستخدم المعلمات.

وظائف Arduino المؤقتة الأخرى

يحتوي Arduino على وظائف أخرى متعلقة بالوقت لتستخدمها في التعليمات البرمجية الخاصة بك. واحد منهم هو التأخير الشهير ()ولكن هناك المزيد:

  • تأخير(): إنها أكثر وظائف Arduino استخدامًا وشائعة. كما يستخدم المللي ثانية كميلي (). وسيكون أيضًا من النوع بدون توقيع طويل ، فضلاً عن عدم وجود قيمة مرتجعة. يتم استخدامه بشكل أساسي لإدخال فترات توقف مؤقت في تنفيذ برنامج ، مع العديد من التطبيقات.
  • تأخير: أقل استخدامًا في الرسومات ، وفي هذه الحالة لا تزال غير موقعة طويلة ، ولا قيمة مرتجعة ، وفي هذه الحالة تستخدم ميكروثانية. حاليًا ، يمكن تحقيق قيمة قصوى بدقة 16383 ، والحد الأدنى 3μs. إذا كان عليك التعامل مع فترات الانتظار أطول من ذلك ، فمن المستحسن استخدام التأخير ().
  • ميكرو (): تُرجع أيضًا قيمة رقمية بالميكروثانية (μs) منذ أن بدأت لوحة Arduino في تنفيذ البرنامج. أي أنه يشبه الميلي () ، ولكن مع وحدة أخرى. في الواقع ، يستخدم أيضًا النوع الطويل بدون إشارة ولا يستخدم المعلمات أيضًا. لكن هناك بعض الاختلافات الإضافية ، مثل أنه يعيد التعيين ويبدأ من الصفر عندما يصل إلى 70 دقيقة. فيما يتعلق بدقة 4 μs ، أو بمعنى آخر ، فإن القيمة التي يتم إرجاعها ستكون دائمًا من مضاعفات أربعة (4 ، 8 ، 12 ، 16 ، ...). تذكر أن 1000 μs يساوي 1 مللي ثانية و 1.000.000 يساوي 1 ثانية.

أمثلة Millis () في Arduino IDE

لقطة شاشة لـ Arduino IDE

هذه كلها كلمات ، وأفضل طريقة لعرض وظيفة millis () هي عرض بعض الأمثلة على الرسومات البسيطة في Arduino IDE بحيث يمكنك رؤية بعض التطبيقات وحالات الاستخدام. حتى هنا بعض أمثلة عملية...

يمكن استخدامها مع ملفات جميع لوحات 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
}

قم بقياس الوقت بين رسالتين متسلسلتين:

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

أنت تعرف ذلك بالفعل من أجل ماس información يمكنك تنزيل ملف دورة برمجة اردوينو مجانية بصيغة PDF.


كن أول من يعلق

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.