Arduino Mega+2x16lcd+I2C+3 Ad Potansiyometre Kontrol Bar graph
  • Foruma üye tüm arkadaşlara merhaba
    Adım Volkan Eskişehir de yaşıyorum. Genellikle bilgisayar ana kartlarının tamirini yaptığım bir elektronikçi dükkanım var. (Alaylıyım)
    Foruma Mart 2017 de üye oldum. Ama ne bir konuda yardıma ihtiyacım nede bir konuya katkım oldu. O sebepten bu ilk mesajımda bir selam vermek kendimi tanıtmak istedim. ( 1 yıldır arduino ile uğraşıyor öğrenmeye çalışıyorum )
  • hayırlı olsun kolay gelsin çok sevindik.
  • Yapmış olduğum bir devrede 3 adet potansiyometre kullanıyorum.

    10 K 10K 2.2k
    Ses Ayar İnce Ayar
    A0 A1 A2


    Ve bu devreye 2x16 lcd ekran kullanarak grafik bir arayüz yapmak istiyorum.

    https://youtu.be/EA-8h-rIV4U


    // include the library code:

    #include < LiquidCrystal_I2C.h>

    int QBN = 0; // initialize the library with the numbers of the interface pins

    LiquidCrystal_I2C lcd(0x27, 16, 2); //LCD configuration

    void setup() {

    lcd.begin(); // set up the LCD's number of columns and rows:


    lcd.print(" SES"); // Print a message to the LCD.
    }

    void loop() {


    lcd.setCursor(0, 1); // set the cursor to column 0, line 1

    QBN = analogRead(A0) / 64; // (note: line 1 is the second row, since counting begins with 0):

    analogWrite(6, QBN * 16); // print the number of seconds since reset:

    for (int i = 0; i < QBN; i++)
    lcd.print("#");
    for (int i = 16; i >= QBN; i--)
    lcd.print(" ");

    }

    Buraya kadar hemen hemen istediğimi yapabildim bulduğum örneklerle.

    Tam olarak yapmak istediğim

    Potlardan hangisini hareket ettirirsem onun çalışmasını belli bir süreden sonra haraket olmazsa ekranın temizlenmesini istiyorum.

    Bir çok araştırma yaptım bir örnek bulamadım bulduğum benzeri örneklerde de hex dosyalarına ulaşabildim bir manası olmadı. Bilgisi olan fikir paylaşanlara şimdiden teşekkürler.
  • Yazılımı ya da youtube linkine bakmadım ancak istediğiniz için şöyle bir şey önerebilirim. Millis kullanarak belli bir zamana göre veriyi kıyaslayabilirsiniz. Önceden okuduğunuz veriyi hafızada tutarsınız , millis koşullandırması içinde okuduğunuz veriyle kıyaslarsanız şayet aynı ise ekranı silersiniz.

    kabataslak olarak şöyle bir şeyi kullanabilirsiniz.
    unsigned long interval =5000 //5 saniye de bir kontrol yapacağız.
    unsigned long last_time =0; // zaman kıyaslamasında kullacağız.

    loop içerisinde

    if(millis()-last_time>interval)
    {
    analog_value=analogtanoku
    if(eskiden var olan analog değer eşit mi değil mi kontrol et)
    {
    işlemini yap , ekran mı temizlersiniz başka bir şey mi yaparsınız.
    }
    last_time=millis();
    }



  • Ancak pottan gelen değer illa ki sabitleyemez iseniz +2 , -2 olacak sürekli olarak o yüzden eşit değilmiş gibi davranacağı için belli bir aralık için kıyaslama yapmanız sizin için daha iyi olabilir.

  • Videoyu izledim , sizin bir diğer istediğiniz sanırım şu , diyelim ki A0 da SES için bir okuma yapılıyor , A1 de AYAR için bir okuma gerçekleştiliyor. Ve siz hangisinden okuma yaparsanız o sırada ekranın sol üst tarafından onun için gerekli ekrana geçilmesi gerekiyor. Bu durumda aklıma gelen çözüm yöntemi şu oldu.

    analog0_valuebef , analog0_valueaft , analog1_valuebef , analog1_valuebef , bla bla


    açılışta basit bir kalibre için setup içerisinde analogdeğerler okunacak ve
    A0 için konuşalım

    analog0_valuebef =analogvalueaft =analogRead(A0);

    loop içinde

    analogRead(A0) okundu ve analog0_valueaft değişkenine atancak

    if(analog0_valuebef != analog0_valueaft)
    {
    simgeler yazılacak , sol üst düzenlecek
    analog0_valuebef=analog_valueaft
    }

    diğerleri de aynı şekilde , burada yine değeri sabit tutamaz iseninz +2 , -2 gib düzenleme yapmak gerek. Burada genel düşündüğüm mantık şu setupta değerler eşit olacağı için loopta hangi değer değişirse ekranın sol üstü ve hazırladığınız # ifadenin uzunluğu değişecek.

    Tabi denemek gerek , biraz hantal bir fikir de olabilir. Daha esnek bir şey mutlaka bulunur.
  • Merhaba

    Paylaşımınız ve desteğiniz için teşekkürler.

    (Videoyu izledim , sizin bir diğer istediğiniz sanırım şu , diyelim ki A0 da SES için bir okuma yapılıyor , A1 de AYAR için bir okuma gerçekleştiliyor. Ve siz hangisinden okuma yaparsanız o sırada ekranın sol üst tarafından onun için gerekli ekrana geçilmesi gerekiyor)


    Kesinlikle yapmak istediğim aynen sizin anlattığınız gibi. Bugün biraz kafa yorup sizin tavsiyeleriniz üzerinde biraz araştırma yapıp çalışayım neticeyi buradan bildiririm. Bu arada sanki benim yapmaya çalıştığım iş için işime yarar olduğunu düşündüğüm bir örnek buldum. Bununla ilgilide fikrinizi almak isterim.

    https://playground.arduino.cc/Learning/arduinoSleepCode


  • Daha önce kesmeler ile uğraştıysan watchdog mantığı kurabilirsin. Timer1'i en yavaş sayacak şekilde kurduğun zaman yaklaşık 4.2 saniyede resetlenir ve kesmeye gider.

    Kesme fonksiyonuna ekranı temizleme kodunu yazarsın. loop() içinde de sürekli potları okursun. Önceki okunan değerden belli bir sapma olmuşsa (misal +-5) değeri ekrana yazarsın.

    Potlardan herhangi biri çevrildiyse, yani ekrana yazıldıysa timer'ı başlangıç değerine eşitlersin. Böylece geçen süre sıfırlanmış olur. Eğer potlardan hiçbiri çevrilmez ise timer sonuna kadar sayar, en sonunda kesmeye gidip ekranı temizler.
  • amenofis paylaşım için teşekkürler.

    Kesmelerle hiç uğraşmadım örnek leri bir araştırıp biraz çalışayım.


Howdy, Stranger!

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

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