millis (): Arduino işlevi hakkında bilmeniz gereken her şey

Arduino UNO milis fonksiyonları

Arduino, zaman içinde çalışmak için iyi bir fonksiyon repertuarına sahiptir. Onlardan biri milis ()Arduino kartının açılmasından bu yana geçen süreyi milisaniye cinsinden veren bir talimat. Bu saçma görünebilir ve yalnızca ocağın ne zaman açıldığını anlamaya hizmet eder, ancak gerçek şu ki, daha birçok pratik uygulamaya sahiptir.

tarafından örnek, iki veya daha fazla olay arasında geçen süreyi belirlemek, bir düğmenin geri dönmesini (geri dönmesini) önlemek, vb. için kullanılabilir. Kodun kritik aşamalarında yürütme süresini göstermek için de kullanılabilir ve programın gerçek zamanlı çalışmasını sağlar.

Milis () işlevi

millis işlevi Arduino

Daha önce de bahsettiğim gibi, Arduino millis işlevi zamanı ölçmek için kullanılır ve bunu şu şekilde yapar: milisaniye (ms), dolayısıyla adı. Başka bir deyişle, çiziminize dahil ettiğinizde bu fonksiyonun döndürdüğü sayısal değer, o birimde ifade edilen geçici bir veridir.

Bu değişkenin maksimum değerinin olduğunu bilmelisiniz imzasız uzunyani işaretsiz uzun. Bu önemlidir, çünkü daha küçük bir tane kullanılırsa mantık problemleri ortaya çıkabilir. Ek olarak, 50 güne (4.320.000.000 ms) kadar dayanabileceğini bilmelisiniz, bu değere ulaştığında yeniden başlayacak ve sıfırdan başlayacaktır.

Bilmeniz gereken başka bir şey de milis fonksiyonunun parametreleri kullanmaz.

Diğer geçici Arduino işlevleri

Arduino, kodunuzda kullanmanız için zamanla ilgili başka işlevlere sahiptir. Onlardan biri ünlü gecikme ()ama dahası var:

  • gecikme (): Tüm Arduino fonksiyonlarının en yaygın ve en çok kullanılanıdır. Ayrıca, milisaniyeleri, milis () olarak kullanır. Ayrıca dönüş değeri olmamasına ek olarak unsigned long tipinde olacaktır. Esas olarak, birçok uygulamayla birlikte bir programın yürütülmesine duraklamalar getirmek için kullanılır.
  • delayMicroseconds (): eskizlerde daha az kullanılır, bu durumda hala işaretsiz uzun, dönüş değeri yoktur ve bu durumda mikrosaniye kullanır. Şu anda 16383 hassasiyetle ve minimum 3μs ile maksimum değer elde edilebilir. Bundan daha uzun süre beklemeniz gerekiyorsa, delay () kullanmanız önerilir.
  • mikrolar (): ayrıca Arduino kartı programı yürütmeye başladığından beri mikrosaniye (μs) cinsinden sayısal bir değer döndürür. Yani, milis () gibidir, ancak başka bir birimle. Aslında, işaretsiz uzun türü de kullanır ve parametreleri de kullanmaz. Ancak, 70 dakikaya ulaştığında sıfırlanıp sıfırdan başlaması gibi bazı ek farklılıkları vardır. 4 μs çözünürlüğüyle ilgili olarak veya başka bir deyişle, döndürdüğü değer her zaman dördün katı olacaktır (4, 8, 12, 16,…). 1000 μs'nin 1 ms'ye ve 1.000.000'in 1 s'ye eşit olduğunu unutmayın.

Arduino IDE'deki Millis () örnekleri

Arduino IDE ekran görüntüsü

Bunların hepsi kelimelerdir ve millis () fonksiyonunun en iyi görünümü, bazı uygulamaları ve kullanım durumlarını görebilmeniz için basit Arduino IDE çizimlerinin bazı örneklerini göstermektir. İşte bazıları pratik örnekler...

İle kullanılabilir tüm Arduino kartları

1-Örnek kullanımı açıkla milis () 'den:

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
}

İki seri mesaj arasındaki zamanı ölçün:

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

Do bir LED yanıp söner millis () ile:

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

Bir oluştur basit sıralayıcı milis () kullanarak farklı zaman aralıklarında seri monitör üzerinden metin göndermek için:

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

Bunu zaten biliyorsun más información indirebilirsin PDF'de ücretsiz Arduino programlama kursu.


İlk yorumu siz

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.