LCD Görüntüleme
  • #include < LiquidCrystal.h> // LCD kütüphanemizi ekledik.
    LiquidCrystal LCD = {12, 11, 6, 5, 4, 3}; // LCD değişkenimizi tanımladık.

    const int trig = 9; // HCS04 modülündeki TRIG pinini Arduino üzerinde bağladığımız pin.
    const int echo = 8; // HCS04 modülündeki ECHO pinini Arduino üzerinde bağladığımız pin.
    const int buton = 7; // Buton değişkenini tanımlıyoruz.
    const int lm35Pin = A0;
    int control = 0; // Butonu bas çek kullanmamız için bir değişken tanımlıyoruz. Kontrol açısından önemli!
    int sayac = 0; // LCD ekranda sırasıyla göstermemiz için bir sayaç değişkeni tutuyoruz ve buna göre LCD ekranda okuduğumuz değerleri gösteriyoruz.
    int mesafe = 0; // Mesafe değişkeni tanımlıyoruz. Okuduğumuz değeri buna atayacağız.
    int sure = 0; // Fiziksel hesaplama yapabilmek için gönderdiğimiz sesin dönüş süresini hesaplayıp işlem yapmak için bu değişkeni tanımlıyoruz.
    void setup() {
    pinMode(trig, OUTPUT);
    pinMode(echo, INPUT);
    pinMode(buton, INPUT);
    LCD.begin(16, 2);
    LCD.clear();
    analogReference(INTERNAL);
    }

    void loop() {
    sayac = 0;
    if (sayac == 5)
    {
    sayac = 0;
    }
    if (digitalRead(buton) == HIGH)
    {
    if (control == 0)
    {
    while (digitalRead(buton) == HIGH);
    sayac = sayac + 1;
    control = 1;
    }
    else if (control == 1)
    {
    while (digitalRead(buton) == HIGH);
    sayac = sayac + 1;
    control = 0;
    }
    }
    LCD.clear();
    islemYap(sayac);
    }

    void islemYap(int deger)
    {
    while (deger > -1)
    {
    if (deger == 0)
    {
    LCD.print("Butona basiniz!");
    LCD.setCursor(0, 1);
    LCD.print("Sayac: ");
    LCD.print(sayac);
    }
    else if (deger == 1)
    {
    digitalWrite(trig, HIGH);
    delayMicroseconds(100);
    digitalWrite(trig, LOW);
    sure = pulseIn(echo, HIGH);
    mesafe = (sure / 2) / 29.1;
    delay(1000);
    LCD.clear();
    if (mesafe < 5)
    {
    LCD.print("Mesafe cok kisa!");
    }
    else
    {
    LCD.print("Mesafe: ");
    LCD.print(mesafe);
    LCD.print(" CM");
    }
    LCD.setCursor(0, 1);
    LCD.print("Sayac: ");
    LCD.print(sayac);
    }
    else if (deger == 2)
    {
    int sicaklikVolt = analogRead(lm35Pin);
    float sicaklikC = sicaklikC = sicaklikVolt / 9.31;
    LCD.print("Sicaklik: ");
    LCD.print(sicaklikC);
    LCD.print("\337C");
    delay(1000);
    }
    }
    }

    Merhabalar herkese. Bu şekilde bir kod yazdım. Arkaplanda tuttuğum sayaç değişkenine göre değer görüntüleme yapıyorum. 1'de mesafe, 2'de sıcaklık gibi. Ancak birkaç şekilde denememle birlikte ki bu en son hali gördüğünüz mesafeden diğer kısma geçmiyor. Geçtiği şekilde de sadece kod ilk çalıştığında ölçtüğü değeri gösteriyor. Örneğin kodu yüklediğimde ilk başta sayaç 0 olarak gözüküyor. Daha sonra sayacı arttırdığımda mesafe kodu arduinoya ilk yüklediğimde ölçtüğü değeri gösteriyor. Anlık olarak ölçmüyor. Bu şekilde sıcaklık da aynı şekilde oluyor. Biraz toparlayıp bu şekile getirdiğimde ise mesafeyi anlık olarak ölçebiliyor. Fakat başta ne "Butona basınız" yazısı çıkıyor ne de sıcaklık gösteren kısıma geçebiliyor. Kurcaladım ettim düzeltemedim.
  • void loop() {
    sayac = 0;
    if (sayac == 5)
    ...

    Sayacı en başta sıfırlıyorsun, mantık hatası var. O baştaki if hiçbir zaman çalışmaz.
  • Çözümünüz nedir hocam? Kaldırdım fakat yine de düzelmedi.

    Teşekkürler
  • 5 olunca sıfırlanmasını istiyorsun sanırım. Öyleyse sayacı her arttırdığında 5 olup olmadığını kontrol etmelisin.
    "sayac = sayac + 1;" değil de

    if(++sayac == 5)
    sayac = 0;
    yazarsan en fazla dörde kadar sayar.

    Diğer bir yöntem sayının sadece ilk 2 bitini okumak.
    "islemYap(sayac);" yerine
    islemYap(sayac & 3);

    yazarsan sayaç kaç olursa olsun 0,1,2,3 sayılarından biri elde edilir. Böylece sayacın taşıp taşmadığını kontrol etmek gerekmez. 3' ten sonra otomatikman 0'a döner. Bu da ek bilgi olarak dursun.
  • Değerli hocam sayacı kontrol edebileceğimi anladım bu söylediğinle. Derdim sıkıntım şudur ki sayaç 1de mesafe sensöründen aldığı anlık değeri gösteriyor. Fakat sayaç 2 olduğu anda hala mesafe görüntülemesinde kalıyor. 2de göstermesini istediğim şeylere geçmiyor. Teşekkürler bu yazdığınız için ekleyeceğim.
  • void islemYap(int deger)
    {
    while (deger > -1)
    ...

    deger -1'den büyük olduğu sürece dön demişsin. deger her zaman -1'den büyük olduğu için döngüden çıkamıyor. while bloğunu silmen gerekli.
  • Bu şekilde bilgileri anlık olarak alamadığımı belirtmek isterim. Spagetti kod olmadığını düşünmüştüm aslında, uyardığınız için teşekkür ederim. Değerleri alıyorum fakat yüklediğim anda ölçülen değerler ney ise onları gösteriyor. Ben anlık olarak almasını istiyorum.
  • Çözüm yorumunuz neden . halini aldı açıkcası anlayamadım.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.