millis (): כל מה שאתה צריך לדעת על פונקציית Arduino

Arduino UNO פונקציות מיליס

לארדואינו יש רפרטואר טוב של פונקציות לעבוד איתן לאורך זמן. אחד מהם הוא מיליס (), הוראה שנותנת לך את הזמן באלפיות השנייה מאז הפעלת לוח הארדואינו. זה אולי נראה אבסורדי, וזה רק יודע מתי הכיריים הופעלו, אבל האמת היא שיש לו הרבה יותר יישומים מעשיים.

ידי ejemplo, ניתן להשתמש בו כדי לקבוע את הזמן שחלף בין שני אירועים או יותר, להימנע מהפחתה (הקפצה) של כפתור וכו '. זה יכול לשמש גם כדי להציג את זמן הביצוע בשלבים קריטיים של הקוד, כדי להבטיח שהתוכנית עובדת בזמן אמת.

פונקציית מילי ()

פונקצית מיליס ארדואינו

כפי שכבר ציינתי, פונקציית Arduino millis משמשת למדידת זמן והיא עושה זאת ב אלפיות שנייהומכאן שמו. במילים אחרות, הערך המספרי שהפונקציה הזו מחזירה כאשר אתה כולל אותה במערכון שלך הוא נתונים זמניים המתבטאים באותה יחידה.

עליך לדעת שהערך המקסימלי של משתנה זה הוא לא חתום ארוךכלומר, ארוך ללא סימן. זה חשוב מכיוון שאם משתמשים בזה קטן יותר, עלולות להתרחש בעיות לוגיות. בנוסף, עליך לדעת שהוא יכול להימשך עד 50 ימי זמן (4.320.000.000 אלפיות שניים), לאחר שהוא יגיע לערך זה הוא יופעל מחדש ויתחיל מאפס.

דבר נוסף שעליך לדעת הוא שהמיליס מתפקד אינו משתמש בפרמטרים.

פונקציות ארדואינו זמניות אחרות

ל- Arduino פונקציות אחרות הקשורות לזמן שתוכלו להשתמש בקוד שלכם. אחד מהם הוא העיכוב המפורסם (), אבל יש עוד:

  • לְעַכֵּב(): זהו הנפוץ ביותר והנפוץ מכל פונקציות הארדואינו. הוא גם משתמש באלפיות השנייה כמיליס (). וזה יהיה גם מהסוג שאינו חתום, בנוסף לכך שאין לו ערך החזר. הוא משמש בעיקר להצגת הפסקות בביצוע תוכנית, עם יישומים רבים.
  • עיכוב מיקרו-שניות (): משמש פחות בשרטוטים, במקרה זה הוא עדיין לא חתום לאורך זמן, ללא ערך החזר, ובמקרה זה הוא משתמש במיקרו-שניות. נכון לעכשיו, ניתן להשיג ערך מקסימלי בדיוק של 16383, ובמינימום 3μs. אם אתה צריך להתמודד עם המתנה ארוכה יותר מזה, מומלץ להשתמש בעיכוב ().
  • מיקרו (): מחזיר גם ערך מספרי במיקרו-שניות (μs) מאז החל לוח הארדואינו לבצע את התוכנית. כלומר, זה כמו מילי (), אבל עם יחידה אחרת. למעשה, הוא גם משתמש בסוג הארוך שלא חתום וגם אינו משתמש בפרמטרים. אבל יש לה כמה הבדלים נוספים, כגון זה שהוא מתאפס ומתחיל מאפס כשהוא מגיע ל -70 דקות. לגבי הרזולוציה של 4 מיקרו-שניות, או במילים אחרות, הערך שהוא מחזיר יהיה תמיד מכפלה של ארבעה (4, 8, 12, 16, ...). זכור כי 1000 μs שווה ל- 1 ms ו- 1.000.000 שווה ל- 1 s.

דוגמאות של מיליס () ב- Arduino IDE

צילום מסך של Arduino IDE

כל אלה מילים, והתצוגה הטובה ביותר של פונקציית millis () מציגה כמה דוגמאות לשרטוטים פשוטים של 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);
     }
   }
}

לעשות למצמץ נורית עם מילי ():

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 Información אתה יכול להוריד את קורס תכנות Arduino בחינם ב- PDF.


תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

היה הראשון להגיב

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.