millis (): duk abin da kuke buƙatar sani game da aikin Arduino

Arduino UNO ayyuka na millis

Arduino yana da kyakkyawan tasirin ayyuka don aiki tare da lokaci. Daya daga cikinsu shine millis (), Umurnin da zai baku lokaci a cikin milisoni da dakika tun lokacin da aka kunna kwamitin Arduino. Wannan na iya zama wauta, kuma hakan kawai yana sane lokacin da aka kunna hob ɗin, amma gaskiyar ita ce tana da aikace-aikace da yawa da yawa.

de amfani, ana iya amfani dashi don tantance lokacin da ya wuce tsakanin abubuwa biyu ko sama da haka, guji debounce (billa) na maɓalli, da dai sauransu. Hakanan za'a iya amfani dashi don nuna lokacin aiwatarwa a cikin matakai masu mahimmanci na lambar, tabbatar da cewa shirin yana aiki a ainihin lokacin.

Millis () aiki

aikin millis Arduino

Kamar yadda na ambata a baya, ana amfani da aikin Arduino millis don auna lokaci, kuma yana yin hakan a ciki millise seconds (ms), saboda haka sunan ta. Watau, ƙimar adadi da wannan aikin ya dawo lokacin da kuka haɗa shi a cikin zane ɗinku bayanai ne na ɗan lokaci da aka bayyana a wannan sashin.

Ya kamata ku sani cewa matsakaicin darajar wannan canjin shine ba'a sa hannu ba, wannan shine, dogon ba tare da alama ba. Wannan yana da mahimmanci, saboda idan aka yi amfani da ƙarami, matsaloli na dabaru na iya faruwa. Bugu da kari, ya kamata ka sani cewa zai iya daukar tsawon kwanaki 50 na lokaci (4.320.000.000 ms), da zarar ya kai wannan darajar zai sake farawa kuma zai sake farawa daga sifili.

Wani abin da ya kamata ku sani shi ne cewa aikin milis baya amfani da sigogi.

Sauran ayyukan Arduino na ɗan lokaci

Arduino yana da wasu ayyuka masu alaƙa da lokaci don amfani dashi a cikin lambar ka. Daya daga cikinsu shine sanannen jinkiri (), amma akwai ƙarin:

  • jinkiri (): Shine wanda akafi amfani dashi kuma mafi mahimmanci ga duk ayyukan Arduino. Hakanan yana amfani da milliseconds azaman millis (). Kuma zai kasance na nau'in da ba'a sa hannu ba tsawon, ban da rashin darajar dawowa. Ana amfani dashi galibi don gabatar da dakatarwa yayin aiwatar da shirin, tare da aikace-aikace da yawa.
  • jinkiriMikoki-biyu (): ba a amfani da shi sosai a zane, a wannan yanayin har yanzu ba a sa hannu sosai ba, ba tare da dawo da darajar ba, kuma a wannan yanayin yana amfani da microseconds. A halin yanzu, ana iya samun iyakar ƙimar tare da daidaiton 16383, da mafi ƙarancin 3μs. Idan dole ne ku riƙe jira da yawa fiye da haka, ana bada shawarar yin amfani da jinkiri ().
  • micros (): Har ila yau yana dawo da ƙimar adadi a cikin microseconds (μs) tun lokacin da kwamitin Arduino ya fara aiwatar da shirin. Wato, yana kama da millis (), amma tare da wani naúrar. A zahiri, shi ma yana amfani da dogon nau'in da ba a sa hannu ba kuma shi ma ba ya amfani da sigogi. Amma yana da wasu ƙarin bambance-bambance, kamar cewa yana sake saitawa kuma yana farawa daga sifili idan ya kai minti 70. Game da ƙudurinsa na 4 ,s, ko a wata ma'anar, ƙimar da ta dawo koyaushe zai zama mai yawa na huɗu (4, 8, 12, 16,…). Ka tuna cewa 1000 equ yayi daidai da 1 ms kuma 1.000.000 yayi daidai da 1 s.

Misalan Millis () a cikin Arduino IDE

Screenshot na Arduino IDE

Waɗannan duka kalmomi ne, kuma mafi kyawun ra'ayi game da aikin millis () yana nuna wasu misalai na zane-zanen IDE na Arduino IDE mai sauƙi don haka kuna iya ganin wasu aikace-aikace da amfani da shari'oi. Don haka ga wasu misalai masu amfani...

Za a iya amfani da shi duk allunan Arduino

1-Misali don bayyana amfani daga millis ():

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
}

Auna lokaci tsakanin saƙonni biyu na serial:

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

Hacer ƙyaftawar haske tare da millis ():

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

Ƙirƙirar mai sauki jerin don aika rubutu ta serial Monitor a lokuta daban-daban ta amfani da 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 - ");
}

Kun riga kun san wannan don ƙarin bayani zaka iya saukar da karatun Arduino kyauta a cikin PDF.


Kasance na farko don yin sharhi

Bar tsokaci

Your email address ba za a buga. Bukata filayen suna alama da *

*

*

  1. Wanda ke da alhakin bayanan: Miguel Ángel Gatón
  2. Manufar bayanan: Sarrafa SPAM, sarrafa sharhi.
  3. Halacci: Yarda da yarda
  4. Sadarwar bayanan: Ba za a sanar da wasu bayanan ga wasu kamfanoni ba sai ta hanyar wajibcin doka.
  5. Ajiye bayanai: Bayanin yanar gizo wanda Occentus Networks (EU) suka dauki nauyi
  6. Hakkoki: A kowane lokaci zaka iyakance, dawo da share bayanan ka.