Arduino ile yapılan proje çalışmıyor

Emir2507

Decapat
Katılım
25 Nisan 2020
Mesajlar
66
İyi günler. Arduino'da bir proje yapmak istedim. Proje şuydu, RTC modülü ile 16×2 LCD ekranda saat ve tarih bilgisini gösterdim. Daha sonra devreye hareket sensörü ve buton ekledim. Butona basılmadığı zaman saat ve tarihi gösterecek btona basılı tuttuğumda tarih ve saat bilgisi ekrandan silinip hareket sensörünün kaç kere hareket algıladığını gösterecekti. Her şey çok güzeldi kodu yükledim. Saat ve tarih karşımda butona baılı tuttum ekranda bir şey yok elimi hareket sensörüne götürdüm hareket 1 dedi sonra butonu braktım gene saat ve tarih ekranına döndü tekrardan hareket sensörü kaç hareket aklgılamış diye bakayım dedğimde ekran yine bom boş. Butona basılı tutarken elimi hareket sensörüne götürdüm hareketi algılayınca kaç hareket algıladığını gösterdi. Sorun şu ben tarih saat ve hareket algılama ekranı arasında geçiş yaparken en son değeri bana göstermesi gerek ama hareket algıladığında gösteriyor. İşte yazdığım kod.

#Include.
#Include “RTClib.h”
#Include.
LiquidCrystal LCD(8, 7, 6, 5, 4, 3);
RTC_DS1307 rtc;
İnt buton=2;
İnt hareket=9;
İnt sayac;

Void setup () {

Pinmode(buton, ınput);
Pinmode(hareket, ınput);

Wire.begin();
RTC.begin();
LCD. Begin(16, 2); //kullandığın LCD 2×16'lık burada onu belirtiyoruz.
İf (! RTC.isrunning()) {
LCD. Println(“rtc calismiyor”);
}

LCD. Setcursor(0, 0);
LCD. Print(“rtc uyg.”);
LCD. Setcursor(0, 1);
lcd.print(“ELEKTROHOBIM.COM”);
Delay (3000);
lcd.clear();
Rtc. Adjust(datetime(2016, 01, 4, 16, 36, 00)); // tarih ve saat bilgisi ayarlanıyor…burada başlangıç ayarları yapılıyor.
}

Void loop () {
İf(digitalread(buton)==0){

Datetime Now = RTC.now();
LCD. Setcursor(0, 0);
LCD. Print(“tarih:”);
lcd.print(now.day(), DEC);
LCD. Print(‘/’);
lcd.print(now.month(), DEC);
LCD. Print(‘/’);
lcd.print(now.year(), DEC);
LCD. Print(‘ ‘);
LCD. Setcursor(0, 1);
LCD. Print(“saat :”);
İf (now.hour()<10)
LCD. Print('0');
lcd.print(now.hour(), DEC);
LCD. Print(':');
İf (now.minute()<10)
LCD. Print('0');
lcd.print(now.minute(), DEC);
LCD. Print(':');
İf (now.second()<10)
LCD. Print('0');
lcd.print(now.second(), DEC);
Delay(1000);
lcd.clear();
}
İf(digitalread(buton)==1){

İf (digitalread(hareket) == 1){

Delay(2000);
Sayac = sayac + 1;
LCD. Print("algilanan ");
LCD. Print(sayac);
lcd.home();

}
}

}

Not = hareket algıladığında 1 arttır kısmında 2 saniye bekleme vermemin sebebi hareket sensörü minimum 3 saniye boyunca locik 1 çıkışı verdiğinden her hareket algıladığında + 3 değer yapıyor bende 2 saniye bekletip sorunu bu şekilde çözdüm. Cevaplarınızı bekliyorum 1 haftadır uğraştım ama bulamadım 🙁
 
Son düzenleyen: Moderatör:
Hareketi tespit edecek olan if döngüsünü butona basıldığını algılayan if döngüsünün içine almışsınız. Butona basılmıyorken ilk if döngüsüne girilmediği için hareket tespiti yapılacak olan if döngüsü çalışmıyor, bu nedenle siz butona basmazken hareketler sayılmıyor.

Kısacası şu kodu:
C:
if(digitalread(buton)==1){
    if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
        LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
    }
}

Şunun gibi yapmalısınız:
C:
if(digitalread(buton)==1){
    LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
}
if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
    }

Test etmedim ancak bu şekilde sağlıklı çalışmalı. Bu arada delay kullanmak çok iyi bir şey değil, orayı farklı şekilde geliştirmenizi öneririm. Milis ile veya interruptlar ile daha sağlıklı şekilde geliştirilebilir. Delay ile proje geliştirildiğinde problem yaşamanız olası.

Bu arada buraya kod eklerken yazıyı yazdığınız alanın üst kısmındaki panelden üç nokta işaretine (Ekle fonksiyonu) tıklayıp "Kod" seçeneğini seçip kodu oraya yapıştırırsanız bizler için okuması kolay olur.
 
Hareketi tespit edecek olan if döngüsünü butona basıldığını algılayan if döngüsünün içine almışsınız. Butona basılmıyorken ilk if döngüsüne girilmediği için hareket tespiti yapılacak olan if döngüsü çalışmıyor, bu nedenle siz butona basmazken hareketler sayılmıyor.

Kısacası şu kodu:
C:
if(digitalread(buton)==1){
    if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
        LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
    }
}

Şunun gibi yapmalısınız:
C:
if(digitalread(buton)==1){
    LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
}
if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
    }

Test etmedim ancak bu şekilde sağlıklı çalışmalı. Bu arada delay kullanmak çok iyi bir şey değil, orayı farklı şekilde geliştirmenizi öneririm. Milis ile veya interruptlar ile daha sağlıklı şekilde geliştirilebilir. Delay ile proje geliştirildiğinde problem yaşamanız olası.

Bu arada buraya kod eklerken yazıyı yazdığınız alanın üst kısmındaki panelden üç nokta işaretine (Ekle fonksiyonu) tıklayıp "Kod" seçeneğini seçip kodu oraya yapıştırırsanız bizler için okuması kolay olur.

hemen deneyeceğim.
Hareketi tespit edecek olan if döngüsünü butona basıldığını algılayan if döngüsünün içine almışsınız. Butona basılmıyorken ilk if döngüsüne girilmediği için hareket tespiti yapılacak olan if döngüsü çalışmıyor, bu nedenle siz butona basmazken hareketler sayılmıyor.

Kısacası şu kodu:
C:
if(digitalread(buton)==1){
    if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
        LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
    }
}

Şunun gibi yapmalısınız:
C:
if(digitalread(buton)==1){
    LCD. Print("algilanan ");
        LCD. Print(sayac);
        lcd.home();
}
if (digitalread(hareket) == 1){
        Delay(2000);
        Sayac = sayac + 1;
    }

Test etmedim ancak bu şekilde sağlıklı çalışmalı. Bu arada delay kullanmak çok iyi bir şey değil, orayı farklı şekilde geliştirmenizi öneririm. Milis ile veya interruptlar ile daha sağlıklı şekilde geliştirilebilir. Delay ile proje geliştirildiğinde problem yaşamanız olası.

Bu arada buraya kod eklerken yazıyı yazdığınız alanın üst kısmındaki panelden üç nokta işaretine (Ekle fonksiyonu) tıklayıp "Kod" seçeneğini seçip kodu oraya yapıştırırsanız bizler için okuması kolay olur.

Teşekkür ederim. Sorun çözüldü basit bir hata ama mesele görmek :)
 
Son düzenleme:

Yeni konular

Geri
Yukarı