มิลลิวินาที (): ทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับฟังก์ชัน Arduino

Arduino UNO ฟังก์ชันมิลลิวินาที

Arduino มีฟังก์ชั่นที่ดีในการทำงานเมื่อเวลาผ่านไป หนึ่งในนั้นคือ มิลลิวินาที ()คำสั่งที่ให้เวลาคุณเป็นมิลลิวินาทีนับตั้งแต่เปิดบอร์ด Arduino สิ่งนี้อาจดูไร้สาระและจะทำหน้าที่รู้เมื่อเปิดเตาประกอบอาหารเท่านั้น แต่ความจริงก็คือมันมีแอพพลิเคชั่นที่ใช้งานได้จริงอีกมากมาย

ปอ ejemploสามารถใช้เพื่อกำหนดเวลาที่ผ่านไประหว่างสองเหตุการณ์ขึ้นไปหลีกเลี่ยงการดีบัก (ตีกลับ) ของปุ่ม ฯลฯ นอกจากนี้ยังสามารถแสดงเวลาดำเนินการในขั้นตอนสำคัญของโค้ดเพื่อให้แน่ใจว่าโปรแกรมทำงานแบบเรียลไทม์

ฟังก์ชัน Millis ()

ฟังก์ชั่นมิลลิวินาที Arduino

ดังที่ได้กล่าวไปแล้วฟังก์ชั่น Arduino millis ใช้ในการวัดเวลาและทำในรูปแบบ มิลลิวินาที (ms)ดังนั้นชื่อของมัน กล่าวอีกนัยหนึ่งค่าตัวเลขที่ฟังก์ชันนี้จะส่งกลับเมื่อคุณรวมไว้ในร่างของคุณเป็นข้อมูลชั่วคราวที่แสดงในหน่วยนั้น

คุณควรทราบว่าค่าสูงสุดของตัวแปรนี้คือ ไม่ได้ลงนามยาวนั่นคือยาวโดยไม่มีวี่แวว นี่เป็นสิ่งสำคัญเพราะถ้าใช้อันเล็กกว่านี้อาจเกิดปัญหาตรรกะได้ นอกจากนี้คุณควรทราบว่าสามารถใช้งานได้นานถึง 50 วัน (4.320.000.000 มิลลิวินาที) เมื่อถึงค่าดังกล่าวระบบจะรีสตาร์ทและเริ่มใหม่อีกครั้งจากศูนย์

สิ่งที่คุณต้องรู้อีกอย่างก็คือฟังก์ชันมิลลิวินาที ไม่ใช้พารามิเตอร์.

ฟังก์ชั่น Arduino ชั่วคราวอื่น ๆ

Arduino มีฟังก์ชันที่เกี่ยวข้องกับเวลาอื่น ๆ เพื่อให้คุณใช้ในรหัสของคุณ หนึ่งในนั้นคือ ความล่าช้าที่มีชื่อเสียง ()แต่มีมากกว่านั้น:

  • ล่าช้า (): เป็นฟังก์ชั่น Arduino ที่ใช้กันมากที่สุดและเป็นเรื่องธรรมดา นอกจากนี้ยังใช้มิลลิวินาทีเป็นมิลลิวินาที () และจะเป็นประเภท unsigned long นอกจากจะไม่มีค่าส่งคืนแล้ว ส่วนใหญ่จะใช้เพื่อแนะนำการหยุดชั่วคราวในการทำงานของโปรแกรมโดยมีแอพพลิเคชั่นมากมาย
  • ล่าช้าไมโครวินาที (): มีการใช้น้อยกว่าในภาพร่างในกรณีนี้ยังคงไม่ได้ลงนามแบบยาวโดยไม่มีค่าส่งคืนและในกรณีนี้จะใช้ไมโครวินาที ปัจจุบันค่าสูงสุดสามารถทำได้ด้วยความแม่นยำ 16383 และต่ำสุด3μs หากคุณต้องรอนานกว่านั้นขอแนะนำให้ใช้การหน่วงเวลา ()
  • ไมโคร (): ยังส่งคืนค่าตัวเลขในหน่วยไมโครวินาที (ss) ตั้งแต่บอร์ด Arduino เริ่มเรียกใช้โปรแกรม นั่นคือมันเหมือนกับมิลลิลิส () แต่มีหน่วยอื่น ในความเป็นจริงมันยังใช้ประเภทยาวที่ไม่ได้ลงชื่อและไม่ได้ใช้พารามิเตอร์ด้วย แต่มีความแตกต่างเพิ่มเติมบางอย่างเช่นรีเซ็ตและเริ่มจากศูนย์เมื่อถึง 70 นาที เกี่ยวกับความละเอียด 4 μsหรืออีกนัยหนึ่งค่าที่ส่งกลับจะเป็นผลคูณของสี่เสมอ (4, 8, 12, 16, ... ) จำไว้ว่า 1000 μsเท่ากับ 1 ms และ 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 - ");
}

คุณรู้อยู่แล้วว่าสำหรับ ข้อมูลเพิ่มเติม คุณสามารถดาวน์โหลดไฟล์ หลักสูตรการเขียนโปรแกรม Arduino ฟรีในรูปแบบ PDF.


เนื้อหาของบทความเป็นไปตามหลักการของเรา จรรยาบรรณของบรรณาธิการ. หากต้องการรายงานข้อผิดพลาดให้คลิก ที่นี่.

เป็นคนแรกที่จะแสดงความคิดเห็น

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา