Arduino Mega+2x16lcd+I2C+3 Ad Potansiyometre Kontrol Bar graph
Volchanick August 30
Foruma üye tüm arkadaşlara merhaba
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 )
okoman August 30
hayırlı olsun kolay gelsin çok sevindik.
Volchanick August 31
Yapmış olduğum bir devrede 3 adet potansiyometre kullanıyorum.
10 K 10K 2.2k
Ses Ayar İnce Ayar
Ve bu devreye 2x16 lcd ekran kullanarak grafik bir arayüz yapmak istiyorum.
int QBN = 0; // initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27, 16, 2); //LCD configuration
lcd.begin(); // set up the LCD's number of columns and rows:
lcd.print(" SES"); // Print a message to the LCD.
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++)
for (int i = 16; i >= QBN; i--)
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.
EmbeddedSystem August 31
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.
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.
EmbeddedSystem September 1
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);
analogRead(A0) okundu ve analog0_valueaft değişkenine atancak
if(analog0_valuebef != analog0_valueaft)
simgeler yazılacak , sol üst düzenlecek
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.
Volchanick September 1
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.
amenofis September 1
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.
Volchanick September 4
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.