Şimdi Ara

Arduino Millis() Resetleme Yardım!

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
1.229
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar merhaba şöyle bir ödevim var yardım edermisiniz : Yağmur hızına göre (buton basma hızına) anahtarlama yapan yapan bir manyetik kontağın 1 veya 0 sürelerini arduino seri ekranına yazan yazılım ve donanım tasarımı yapınız.


    kodların temelini oluşturdum sadece tek sorum var millis'i nasıl sıfırlayabiliriz?

    #define buton 5 // arduino'da butonumuzun hangi bacağa bağlı olacağını belirler.
    int butonDurumu=0; //buton durumu negatif
    unsigned long Zaman; //0'dan 4.294.967.295 (2 ^ 32 – 1) aralığını depolar bunun nedeni yeniZaman değişkeni çok yüksek değerlere çıkacak onun için.
    int z=0,y=0; //değişken





    void setup() {
    Serial.begin(9600); //Seri Portumuzu 9600 baud olarak ayarlıyoruz.
    pinMode(buton, INPUT); //buton pinini giriş veya çıkış şeklinde yapılandır.

    }

    void loop() {

    butonDurumu=digitalRead(buton);//butonDurum değişkenini gerçekteki buton durumuna eşitle.

    Zaman = millis(); //zamanı başlat

    if(butonDurumu==1){ //eğer butona basıldıysa gir

    if(butonDurumu==1 && z==0) //eğer butona basıldıysa ve z değişkeni 0 ise gir
    {
    z=z+1; //z değişkenini 1 arttır (birdaha bu if'e girmemesi için)
    if( z==1) //z=1 ise gir
    {
    Zaman=0; //Zaman değişkenini 0'a eşitle (ilk defa basıldığı zaman süreyi 0 vermek için yapıldı.)


    Serial.print("Yagmur Hizi : "); //ekrana yaz
    Serial.println(Zaman); //ekrana Zaman değişkeninin değerini çek
    Serial.println("Durum : Yagmiyor");//ekrana yaz
    Serial.println("Yagmur Baslatiliyor...");//ekrana yaz
    Serial.println("*****************************");//ekrana yaz
    z=z+1; //z değişkenini 1 arttır (birdaha bu if'e girmemesi için)
    Zaman = millis(); //zamanı başlat (if'e girmek için zamanı 0 ladık bu yüzden bi seferliğe mahsus bu if içinde zamanı tekrar başlattık)
    }
    }
    y=Zaman/1000; //dönüşüm sayesinde artık değerimizi ms cinsinden değil saniye cinsinden görüyoruz
    if(y<=0) //y değişkeni 0'a eşit veya kücükse gir (1000ms=1sn) ilk değerlerimiz 1sn'den kücük değerler olduğu için onlarıda yazmak için yazılan bir kod.
    {

    Serial.print("Salisede Dusen Damla Miktari : ");//ekrana yaz
    Serial.println(Zaman); //burada y yi değilde Zaman değişkenini çektim bunun nedeni ekrana ms cinsinden yazdırmak.


    }
    if(y>0 && z==2) //eğer y değişkeni 1 değerinden büyük ve z değişkeni 2 ise gir
    {
    Serial.println("*****************************"); //ekrana yaz
    z=z+1; //z değişkenini 1 arttır (birdaha bu if'e girmemesi için)
    }
    if(y>0)
    {
    Serial.print("Saniyede Dusen Damla Miktari : ");//ekrana yaz
    Serial.println(y);//ekrana Zaman değişkeninin değerini çek
    if( y <= 15) //eğer zaman 15'ten kücük veya eşitse gir
    {
    Serial.println("Durum : Seyrek Yagis "); //ekrana yaz
    }
    }

    if(y >15 && z==3) //eğer zaman 15 değerinden büyük ve z değişkeni 3 ise gir
    {
    Serial.println("****************************"); //ekrana yaz

    z=z+1; //z değişkenini 1 arttır (birdaha bu if'e girmemesi için)
    }
    if(y >15) //eğer zaman 15 değerinden büyük ise gir
    {

    Serial.println("Durum : Saganak Yagis"); //ekrana yaz
    }


    }


    }







  • Hocam tam olarak ne yapmak istediğinizi anlayamadım. Biraz daha detaya inerek açıklayabilir misiniz?

    Yanlış anlamadıysam butona basıyor ve bekleyip bir daha basıyorsunuz Arduino iki basma arasında geçen süreyi bir değişkene kaydediyor. Mesela 1 saniyeden küçükse sağanak yağmur, 1 saniyeden büyükse seyrek yağış oluyor.

    < Bu ileti DH mobil uygulamasından atıldı >
  • zwanzig kullanıcısına yanıt
    yapmak istediğim 2 basma arasındaki süreyi hesaplatmak ama millis() değerini sıfırlayamadığım için program başladığı gibi buton 0 veya 1 konumunda olsa bile süre herzaman devam ediyor



    < Bu mesaj bu kişi tarafından değiştirildi reelmeetoo -- 26 Mayıs 2020; 16:21:40 >
  • reelmeetoo kullanıcısına yanıt
    Milis() fonksiyonu ile neler yapılabilir pek hatırlamıyorum ancak şöyle bir çözüm geliştirilebilir:
    Milis() fonksiyonu sonucunda elde ettiğiniz değeri başka bir değişkene kaydedin. Bu değişkeni de if koşulu ile erişilebilir yapın. If koşulu olarak butona basılı olmasını belirlerseniz, butona basılı olduğunda if bloğu içine girilir ve milis fonksiyonu çalışır ve sonuç değişkeninize kayıt edilir. Sonra ister değişken içindeki değeri sıfırlarsınız isterseniz de üzerine ekleme yaparsınız.

    < Bu ileti DH mobil uygulamasından atıldı >
  • zwanzig kullanıcısına yanıt
    şöyle bir sorun var millis() değerini 0'a eşitliyorum yalnız bir daha millis() değişkenini çağırdığımda eski millis() değerinin üstünden devam ediyor program



    < Bu mesaj bu kişi tarafından değiştirildi reelmeetoo -- 26 Mayıs 2020; 16:31:40 >
  • reelmeetoo kullanıcısına yanıt
    quote:

    Returns the number of milliseconds passed since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 50 days.


    Hocam okudum şimdi ne olduğunu. Bu fonksiyon arduino çalışmaya başladığından beri ne kadar zaman geçtiğini verir size. Bu fonksiyonu sıfırlayamazsınız. Bu fonksiyonu zaman1 = milis(); şeklinde kullacaksınız. Bunu bir önceki mesajımda da yazmıştım. Daha sonra istediklerinizi zaman1 değişkeni üzerine yapacaksınız.

    < Bu ileti DH mobil uygulamasından atıldı >
  • Çok gizli bir yöntemi var bunun kimseye söyleme. Butona bastığında okuduğun millis değerini butonu bıraktığında okuduğun millis değerinden çıkartacaksın.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.