Milis fonksiyonu ile zaman hesabı

Öncelikle Herkese merhaba.

Arduino ile hassas ölçümler yaparken hepimiz sorun yaşamışızdır. Program delay kısmına gelince program delay kısmına kaç milisaniye yazarsak okadar duruyor. Buda bizim delay kısmında ölçüm yapmamızı engelliyor .

Milis program çalıştığı an başlıyor ve programın nekadar çalıştığını tutuyor. Her çağrıldığında zamanı milisaniye olarak döndürüyor. Örneğin bir ledi 5 saniye yakmak istiyoruz aynı zamanda serial monitöre sürekli birşeyler yazmak istiyoruz, delay fonksiyonunu kullansaydık arduino 5 saniye boyunca bekleyecek ve başka işlemler yapmamıza izin vermeyecek. Bunu engellemek için milis fonksiyonunu kullanabiliriz. Aşağıda örneği bulabilirsiniz;

Kod kısmı

Kod şu şekilde;

Milis fonksiyonun çalışma mantığını anladığımza göre şimdi olayı farklı bir boyuta taşıyıp Tarih ve Zaman hesabı yapıp bunu bir lcd ekrana yazdırmaya çalışalım.

LCD ekrana 2 saniye de bir tarih ve zaman bilgisini yazdırmaya çalışalım. Fakat tarih ve zamanı default olarak girmemiz gerekiyor.

Kod şu şekilde;

 

7 Comments

  1. Good post however , I was wondering if you could write a litte more on this subject?
    I’d be very thankful if you could elaborate a little bit
    more. Many thanks!

  2. Thanks designed for sharing such a fastidious opinion, piece of writing is pleasant,
    thats why i have read it completely

  3. bir hata gördüm 60 olanlar 59 olacak.
    yoksa karşımız aşu hata çıkıyor 12.60.60 böyle bir saat olurmu? 12.59.59 olur
    teşekürler

    1. Evet Muahrrem bey haklısınız, gözümden kaçmış, küçük ama çok önemli bir detay. Güncelliyorum hemen. Teşekkür ediyorum.

  4. merhaba arduino da delay yerine millis kullanmak istiyorum ama programım çalışmıyor sensor okuduktan 5 saniye sonra durmasını istiyorum kodumu yolluyorum i yardımcı olabilir misiniz ?
    #define in2 6 // in2 pinini 6. pine tanımladık.
    #define ledk 10
    #define ledy 11
    #define leds 8

    int sayac=0;
    int butonDegisim = 0; // butonDegisim degişkenini tanımladık
    int butonDegisimi2 = 0; // butonDegisimi2 degişkenini tanımladık
    int sensorDegeri = 1; // sensorDegeri degişkenini tanımladık

    void setup() { // ana kurulum
    pinMode (buton1, INPUT); // 3. pin giriş oldu
    pinMode(buton2, INPUT); // 4. pin giriş oldu
    pinMode(enA, OUTPUT); // enA pini çıkış oldu
    pinMode(in1, OUTPUT); // in1 pini çıkış oldu
    pinMode(in2, OUTPUT); // in2 pini çıkış oldu
    pinMode(ledk, OUTPUT);
    pinMode(ledy, OUTPUT);
    pinMode(leds, OUTPUT);

    Serial.begin(9600); // seri haberleşme aç
    }

    void loop() { // sonsuz döngü

    if (digitalRead(buton1) == HIGH) { // okunan deger 1 ise
    butonDegisim = 1; // butonDegisim degiskenini 1 yap
    delay(10); // 10 milisaniye bekle
    }
    while (butonDegisim == 1) { // butonDegisim degiskeni 1 oldugunda

    int pot = analogRead(A1); // potansiyometre degerini oku
    int pwmoutput = map(pot, 0 , 1023 , 0 , 255); // potansiyometre degerini 0 ile 255 arası ayarla
    analogWrite(enA, pwmoutput); //L298N’e PWM sinyal yolla
    digitalWrite(ledy, HIGH);
    digitalWrite(ledk, LOW);
    digitalWrite(leds, LOW);
    delay(10);
    digitalWrite(in1, LOW);// L298N sürücü devresinde ki in1 girişine 0V verilecek
    digitalWrite(in2, HIGH); // L298N sürücü devresinde ki in2 girişine +5V verilecek

    int sensor = analogRead(A0); // sensor degerini oku
    Serial.println(sensorDegeri); // sensorDegerini görüntüle

    if ((sensor) == 0) { //sensorde okunan deger 1 ise
    sensorDegeri <= 0; //sensorDegeri degiskenini '<=0' yap
    delay(10); // 50 milisaniye bekle
    digitalWrite(enA, pwmoutput); //L298N'e PWM sinyal yolla
    digitalWrite(leds, HIGH);
    digitalWrite(ledy, LOW);
    digitalWrite(in1, HIGH); //L298N sürücü devresinde ki in1 girişine +5V verilecek
    digitalWrite(in2, LOW); //L298N sürücü devresinde ki in2 girişine 0V verilecek
    butonDegisim = 0; // butonDegisim degiskenini 0 yap

    delay(5000);

    digitalWrite(leds, LOW);
    digitalWrite(ledy, LOW);
    digitalWrite(ledk, HIGH);
    digitalWrite(enA, LOW); //L298N sürücü devresinde ki enable girişine 0V verilecek

    }

    if (digitalRead(buton2) == HIGH) { // okunan buton 1 ise
    butonDegisim = 0; // butonDegisim degiskenini 0 yap
    digitalWrite(leds, LOW);
    digitalWrite(ledy, LOW);
    (digitalWrite(ledk, HIGH));
    digitalWrite(enA, LOW); //L298N sürücü devresinde ki enable girişine 0V verilecek

    }
    }
    }

    1. Tam olarak ne yapmak istediğinizi anlamadım ama Sensörün okuduğu yere yani if içine bu yapıyı eklerseniz işinizi görecektir.
      //loop dışında zaman’ı tanımalamayı unutmayın
      zaman = millis();

      if(zaman>5000)
      {
      // 5 saniye sonra yapılmak istenen
      }
      else
      {
      // ilk 5 saniye yapılamk istene
      }

persuasive essay on fast food için bir cevap yazın Cevabı iptal et

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