millis (): konke odinga ukukwazi ngomsebenzi we-Arduino

Arduino UNO imisebenzi yama-millis

I-Arduino inomlando omuhle wemisebenzi ezosebenza ngayo ngokuhamba kwesikhathi. Enye yazo amamitha (), imiyalo ekunika isikhathi kuma-millisecond kusukela ibhodi ye-Arduino ivuliwe. Lokhu kungabonakala kungenangqondo, nokuthi kusebenza kuphela ukwazi ukuthi ipuleti livulwe nini, kepha iqiniso ukuthi linezinhlelo eziningi ezisebenzayo.

Por ejemplo, ingasetshenziswa ukuthola isikhathi esidlulile phakathi kwemicimbi emibili noma ngaphezulu, gwema ukukhipha (bounce) kwenkinobho, njll. Kungasebenza futhi ukukhombisa isikhathi sokwenza ngezigaba ezibucayi zekhodi, kuqinisekiswe ukuthi uhlelo lusebenza ngesikhathi sangempela.

Umsebenzi we-Millis ()

umsebenzi we-millis Arduino

Njengoba ngishilo, umsebenzi we-Arduino millis usetshenziselwa ukukala isikhathi, futhi wenza kanjalo ku- ama-millisecond (ms), yingakho igama layo. Ngamanye amagama, inani lezinombolo elibuyiselwa lo msebenzi uma ulifaka emdwebeni wakho liyidatha yesikhashana evezwe kuleyunithi.

Kufanele wazi ukuthi inani eliphakeme lale nguquko ngu engabhalisiwe ende, okungukuthi, isikhathi eside ngaphandle kophawu. Lokhu kubalulekile, ngoba uma kusetshenziswa encane, izinkinga zengqondo zingenzeka. Ngaphezu kwalokho, kufanele wazi ukuthi ingahlala izinsuku ezingama-50 zesikhathi (4.320.000.000 ms), uma isifinyelele lelo nani izoqala kabusha bese iqala futhi kusuka ku-zero.

Enye into okufanele uyazi ukuthi umsebenzi wama-millis ayisebenzisi amapharamitha.

Eminye imisebenzi yesikhashana ye-Arduino

I-Arduino ineminye imisebenzi ehlobene nesikhathi ongayisebenzisa kukhodi yakho. Enye yazo ukubambezeleka okudumile (), kepha kukhona okunye:

  • ukubambezeleka (): Yiyona esetshenziswa kakhulu futhi ejwayelekile kuyo yonke imisebenzi ye-Arduino. Ibuye isebenzise ama-millisecond njengama-millis (). Futhi kuzoba wohlobo olungasayiniwe olude, kanye nokungabi nenani lokubuyisa. Isetshenziswa ikakhulu ukwethula ikhefu ekwenzeni uhlelo, ngezinhlelo eziningi zokusebenza.
  • ukubambezelekaMicroseconds (): ayisetshenziswa kangako emidwebweni, kuleli cala ayisayiniswanga isikhathi eside, ngaphandle kwenani lokubuyisa, futhi kulokhu isebenzisa ama-microseconds. Njengamanje, inani eliphakeme lingatholakala ngokunemba kwe-16383, kanye nobuncane bama-3μs. Uma kufanele uphathe ukulinda isikhathi eside kunalokho, kunconywa ukusebenzisa i-delay ().
  • amamakhro (): ibuye ibuyise inani lezinombolo kuma-microseconds (μs) selokhu ibhodi le-Arduino liqale ukusebenzisa uhlelo. Lokho wukuthi, kufana nama-millis (), kodwa nenye iyunithi. Eqinisweni, lisebenzisa uhlobo olude olungasayiniwe futhi alusebenzisi nemingcele. Kepha inomehluko owengeziwe, njengokuthi isetha kabusha futhi iqale kusuka ku-zero lapho ifinyelela kumizuzu engama-70. Mayelana nokuxazululwa kwayo kwama-4 μs, noma ngamanye amagama, inani eliyibuyisayo lizohlala liphindaphindwe kane (4, 8, 12, 16,…). Khumbula ukuthi ama-1000 μs alingana no-1 ms no-1.000.000 alingana no-1 s.

Izibonelo zeMillis () ku-Arduino IDE

Isithombe se-Arduino IDE

Lawa wonke amagama, nokuthi umsebenzi we-millis () ubukeka kahle kanjani ngokukhombisa ezinye izibonelo zemidwebo elula ye-Arduino IDE ukuze ubone ezinye izinhlelo zokusebenza futhi usebenzise amacala. Nazi ezinye izibonelo ezingokoqobo...

Ingasetshenziswa nge wonke amabhodi e-Arduino

1-Isibonelo se chaza ukusetshenziswa from 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
}

Linganisa isikhathi phakathi kwemiyalezo emibili ye-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 cwayiza i-LED nge-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
    }
}

Dala a ukulandelana okulula ukuthumela umbhalo ngokusebenzisa i-serial monitor ngezikhathi ezahlukahlukene usebenzisa ama-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 - ");
}

Usuvele uyakwazi lokho ulwazi oluthe xaxa ungalanda i inkambo yokuhlela yamahhala ye-Arduino nge-PDF.


Yiba ngowokuqala ukuphawula

Shiya umbono wakho

Ikheli lakho le ngeke ishicilelwe. Ezidingekayo ibhalwe nge *

*

*

  1. Ubhekele imininingwane: Miguel Ángel Gatón
  2. Inhloso yedatha: Lawula Ugaxekile, ukuphathwa kwamazwana.
  3. Ukusemthethweni: Imvume yakho
  4. Ukuxhumana kwemininingwane: Imininingwane ngeke idluliselwe kubantu besithathu ngaphandle kwesibopho esisemthethweni.
  5. Isitoreji sedatha: Idatabase ebanjwe yi-Occentus Networks (EU)
  6. Amalungelo: Nganoma yisiphi isikhathi ungakhawulela, uthole futhi ususe imininingwane yakho.