millis (): Arduino функциясы жөнүндө билишиңиз керек болгон нерселердин бардыгы

Arduino UNO миллис функциялары

Ардуино убакыттын өтүшү менен иштөө үчүн функциялардын жакшы репертуарына ээ. Алардын бири миллис (), Arduino платасы күйгүзүлгөндөн бери сизге миллисекундалык убакыт берет. Бул акылга сыйбас нерседей сезилиши мүмкүн жана плита качан күйгүзүлгөнүн гана билүүгө болот, бирок чындыгында анын дагы көптөгөн практикалык колдонмолору бар.

Por Ejemplo, аны эки же андан көп окуянын ортосунда өткөн убакытты аныктоо, баскычтын басылып чыгуудан (секирүүдөн) качуу жана башкалар колдонсо болот. Ошондой эле, программанын реалдуу убакыт режиминде иштешин камсыз кылып, коддун орчундуу этаптарында аткаруу убактысын көрсөтүү үчүн колдонсо болот.

Millis () функциясы

millis function Arduino

Жогоруда айтып өткөндөй, Arduino millis функциясы убакытты өлчөө үчүн колдонулат жана ал ушундайча болот миллисекунддар (мс), демек, анын аты. Башка сөз менен айтканда, бул функция сиздин эскизге киргизгенде кайтарып берген сандык маани, ошол бирдикте көрсөтүлгөн убактылуу маалыматтар.

Бул өзгөрмөнүн максималдуу мааниси бар экендигин билишиңиз керек кол коюлбаган узун, башкача айтканда, белгисиз узак. Бул абдан маанилүү, анткени кичинекейи колдонулса, логикалык көйгөйлөр келип чыгышы мүмкүн. Андан тышкары, ал 50 күнгө чейин созула тургандыгын билишиңиз керек (4.320.000.000 XNUMX XNUMX XNUMX мс), ал ушул мааниге жеткенде, ал кайрадан башталат жана нөлдөн башталат.

Дагы бир билишиңиз керек, миллис функциясы иштейт параметрлерди колдонбойт.

Ардуинонун башка убактылуу функциялары

Arduino кодуңузда колдоно турган убакыт менен байланышкан башка функциялар бар. Алардын бири белгилүү кечигүү (), бирок дагы көп нерсе бар:

  • кечиктирүү (): Бул Arduino функцияларынын ичинен эң көп колдонулган жана кеңири колдонулган. Ошондой эле миллисекунддарды миллисек () катары колдонот. Ошондой эле, ал кайтарылуучу мааниге ээ болбостон, кол коюлбаган түрдөгү болот. Ал негизинен көптөгөн тиркемелер менен программанын аткарылышына тыныгуу киргизүү үчүн колдонулат.
  • delayMicroseconds (): эскиздерде аз колдонулат, бул учурда ал дагы деле кол коюлбай, кайтарым мааниси жок, жана бул учурда микросекундаларды колдонот. Азыркы учурда максималдуу мааниге 16383, минимуму 3μs тактык менен жетишүүгө болот. Эгерде сиз күтүү убактысынан узагыраак карманышыңыз керек болсо, анда кечиктирүүнү () колдонуу сунушталат.
  • micros (): ошондой эле Arduino тактасы программаны аткара баштагандан бери микросекундалардагы (μs) сандык маани берет. Башкача айтканда, бул millis () сыяктуу, бирок башка бирдик менен. Чындыгында, ал кол коюлбаган узун түрүн колдонот жана параметрлерди да колдонбойт. Бирок анын айрым кошумча айырмачылыктары бар, мисалы, баштапкы абалга келтирилет жана 70 мүнөткө жеткенде нөлдөн башталат. Анын чечилиши 4 мкс же башкача айтканда, ал кайтарып берген маани ар дайым төртөөнүн көбөйтүүчүсү болот (4, 8, 12, 16,…). 1000 мкс 1 мс жана 1.000.000 1 XNUMX XNUMX сге барабар экендигин унутпаңыз.

Arduino IDEдеги Millis () мисалдары

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

эмне жарыкты өчүрүү миллис менен ():

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

жараткан жөнөкөй секвенсор millis () колдонуп ар кандай убакыт аралыгында сериялык монитор аркылуу текст жөнөтүү:

#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. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.