Dijital Ses Kontrolü

Başlatan H_SerhatY, 22 Haziran 2019, 22:17:17

taydin

Alıntı yapılan: Furkan41 - 28 Haziran 2019, 19:47:03I2C protokolün'de kullanılan Serial Clock frekansına göre standartlamış Direnc değerleride şöyledir.

 

Pull up dirençlerinin belirlenmesinde esas etken, pulse'ların yükselme süresidir (rise time) Furkan. Burada da belirleyici olan, I2C bus'taki kaçak kapasitedir. Şöyle bir örnek vereyim: Bir I2C master'a bir I2C slave bağlı ise, kaçak kapasiteler düşüktür, yüksek değerli pull up konulabilir. Ama diyelim bir I2C master'a 8 tane I2C slave bağlı ise, kaçak kapasite oldukça yüksektir ve oldukça düşük değerli bir pull up gerekir.

Düşük değerli pull up kullanırsan, I2C nin çalışması garantidir. Güç tüketimini azaltmak için pull up değerini yükseltirsin, ama işte burada I2C bus kaçak kapasitesi belirleyicidir.
Elektrik sayacı döndürücüsü ...

H_SerhatY

#51
Alıntı yapılan: taydin - 30 Haziran 2019, 20:05:24Öncelikle dediğim gibi kodu basitleştirmen lazım. volume değişkeni ile ilgili gereksiz işlem yapıyorsun demiştim. Onu düzeltmişsin. Ama diğer değişkenler için aynı problem devam ediyor. Ayrıca treble ve bass kontrolünde her değer için ayrı if var. Bunları da düzelt.

Bir programda kesinlikle kaçınılması gereken birşey, aynı kodun kopyala yapıştır ile değişik yerlerde tekrar edilmesidir. Değişik yerlerde aynı iş yapılması gerekiyorsa, o işi bir fonksiyon haline getir ve o fonksiyonu çağır.

Birde volume ve lcdvolume diye iki ayrı değişken yapmışsın. Bu da çok yanlış birşey. Ses seviyesi bir tane ise, onun değişkeni de bir tane olmalı. Bu basit programda belki hataya sebep olmaz, ama daha karmaşık programlarda bir bugdan ötürü umulmadık bir şekilde bu iki değişken birbiri ile uyumsuz hale gelebilir. Birisi "volüm maksimumda" derken diğeri "volüm ortada" diyebilir. Daha önceki gibi tek değişken olsun ve bunu TDA'ya yazan fonksiyon ve ekrana yazan fonksiyon olsun (gerekli dönüşümleri yaptıktan sonra tabiki).
Kodu basitleştirmek mümkün tabii ki, ancak 50 satırdan aşağıya düşmesi mümkün değil zira zaten değişkenleri tanımladığım kısım ile setup kısmının toplamı 50 satırdan fazla. Setup kısmındaki herhangi bir şeyi çıkaramayacağıma göre(başlangıçta gelen yazı çıkarılabilir ama estetik benim için önemli) zaten kod doğal olarak 50 satırdan uzun oluyor.

Hocam siz LCD'de volume göstermek için bir fonksiyon yazmıştınız, onu kullandığım zaman ekranda hiçbir şey görünmüyor ancak bu şekilde ekranda volume görünüyor.
Yanlız meselemiz LCD falan değil, butonlara bastığım zaman byte olarak tanımladığım değişkenlerde herhangi bir hareketlilik yok.

LCD fonksiyonları vs. halledilir ama şu anki durumu düzeltmek için yardıma ihtiyacım var, zira önceden de belirttiğim gibi hayatımda ilk defa kod yazdım. Tabii ki ilk defadan kastım kendi oluşturduğum kodlar olarak, yoksa daha önceden Java'da basit bir şeyler yazıyordum, ancak internetten vs. bakarak yaptığım şeylerdi.

Ayrıca şu an kurulu olan sistemi sormuşsunuz, bendeki Arduino CH340 USB-Seri dönüştürücülü klon bir model, butonlar dijital pinlere bağlı, ve LCD olarak 4x20 LCD kullanıyorum, üstünde I2C dönüştürücü var, I2C olarak kullanmamın sebebi zaten hali hazırda 8 adet dijital pini butonların kullanıyor olması.

taydin

Programlama işini öğrenmek için başından beri doğru alışkanlıkları ve disiplini kazanmak önemlidir Serhat. Ben seni bu doğrultuda yönlendirirken, sen "Boşver disiplini, doğru alışkanlıkları, bu kod olduğu şekilde çalışsın" diyorsan, o konuda yardımcı olamayacağım malesef. Benim ipuçlarını vermem lazım, senin kendi çabanla sonuca gitmen lazım. Bu iş böyledir.
Elektrik sayacı döndürücüsü ...

H_SerhatY

Alıntı yapılan: taydin - 30 Haziran 2019, 20:51:38Programlama işini öğrenmek için başından beri doğru alışkanlıkları ve disiplini kazanmak önemlidir Serhat. Ben seni bu doğrultuda yönlendirirken, sen "Boşver disiplini, doğru alışkanlıkları, bu kod olduğu şekilde çalışsın" diyorsan, o konuda yardımcı olamayacağım malesef. Benim ipuçlarını vermem lazım, senin kendi çabanla sonuca gitmen lazım. Bu iş böyledir.
Hocam ben LCD düzenini halletmeyeceğim demedim ki. Ben sadece önce bu sorunu halletmeliyim dedim. Ayrıca kodu dikkatlice incelerseniz zaten sadece değişken tanımı ve setup kısmı 50 satırdan daha uzun, benim buradaki herhangi bir fonksiyonu çıkarmam mümkün değil.
Zaten ben niye bu işe bulaştım ki.
Neyse, zaten Arduino'yu çöpe atacağım, bu tip şeyler benim gibi birisi için fazla.

taydin

Diyelim bir arabayı tamir ediyorsun. Arabanın genel görünüşü iyi, ama motoru yok, 4 yerine 8 tekerlek takılmış, fren hidroliği boşaltılmış. Burada önce neyi düzeltmek lazım?

Yeni multimedya sistemi, klima, falan mı takmak lazım? Wax cila mı atmak lazım? Bunlar keyifli işler tabi, insan önce bunları yapmak istiyor. Ayrıca bunları yapınca gösterilecek birşey de oluyor ortada.

Yoksa temel yapısal sorunları mı çözmek lazım? Bunlar angarya işler, çünkü kimse senin bunları ne kadar iyi yaptığını görüp takdir etmeyecek. Ama iyi bir ürünü de gerçekten iyi yapan da bunlar.

Eğer bu işi öğrenmek için giriştiysen bu projeye, vaktini ayır, emek ver ve hakkıyla yapmaya çalış. Derinlemesine bilgi böyle öğrenilir.

Ama hemen birşey ortaya çıksın, arkadaşlara hava atayım diyorsan, internette araştır, birisi kesin hazır bir kod yazmıştır. Hemen yükle elindeki karta ve kullan. Ama sonra da birşeyler öğrendim deme.
Elektrik sayacı döndürücüsü ...

H_SerhatY

Bana yardım eden, etmeyen herkese çok teşekkür ederim.
En basit olayı atlayınca hiçbir şeyin çalışmaması gibi bir durum açığa çıkabiliyor.
digitalReadBu da insanın canını sıkıyor tabii.
Aşağıya dosyaları bırakıyorum. İsteyen kullansın.
Yanlız daha önceden Arduino'nun EEPROM'una hiçbir şey yazılmamış olması lazım.
Önce zip dosyası içindeki EEPROM Setup kodunu Arduino'ya yükleyin.
LCD üzerinde "EEPROM Setup is Completed." diye bir yazı gelecek.
Sonrasında normal kodu Arduino'nun içine atın.
EEPROM ömrünü uzatmak adına sadece değişkenler EEPROM'daki değerden farklı olunca EEPROM'a yazma yapıyor, böylece daha uzun ömürlü çalışabiliyor.
Ha bir de, LCD kütüphanesi de dosyanın içinde.

Furkan KELEŞOĞLU

Ne oldu serhat yine efkarlanmissin kodun mu calismiyor.
Mekatronik Teknikeri. <br />Elektrik-Elektronik Teknisyeni.

taydin

Elektrik sayacı döndürücüsü ...

H_SerhatY

Alıntı yapılan: taydin - 03 Temmuz 2019, 15:33:39Evet Serhat arada bir bu moda gidiyor anlaşılan :) Bana da kızmış, ama canı sağolsun. Gene elimden geldiği kadar yardım ederim, ama öyle "birisi şu benim çalışmayan kodu alsın baksın, bütün hataların listesini versin bana, ben de liste üzerinden geçip hepsini düzelteyim" yok. Kendisi biraz sürünecek, kendi yapacak ve kendi öğrenecek. Robot gibi, "şu satırdaki şunu değiştir, şu satırları ilave et" yok.

Doğrusunun bu olduğunu o da anlayacak ileriki meslek hayatında. Anlamasa da yapacak birşey yok, neticede burada bizler bunu bir karşılık beklediğimizden yapmıyoruz. Amaç iyi mühendislerin yetişmesi için bizim de bir katkımız olsun, yani vatana hizmet.
Hocam paylaştığım kod çalışıyor, ve şu an 1.1 sürümüne yükseldi :)
Uzaktan kumanda ile kontrol imkanı sağladım.
Mute ve Loudness aktivitelerinin EEPROM'a kaydı gereksiz olduğundan dolayı(bence) onları artık kaydetmiyorum.
Tabii ben uzaktan kumanda özelliği ekledikten sonra kod 8kB değil 15kB oldu :)

Furkan KELEŞOĞLU

Alıntı yapılan: H_SerhatY - 04 Temmuz 2019, 10:36:59Hocam paylaştığım kod çalışıyor, ve şu an 1.1 sürümüne yükseldi :)
Uzaktan kumanda ile kontrol imkanı sağladım.
Mute ve Loudness aktivitelerinin EEPROM'a kaydı gereksiz olduğundan dolayı(bence) onları artık kaydetmiyorum.
Tabii ben uzaktan kumanda özelliği ekledikten sonra kod 8kB değil 15kB oldu :)

Devreyi yaptıysan bir calışma videosu atta keyifle izleyelim
Mekatronik Teknikeri. <br />Elektrik-Elektronik Teknisyeni.

H_SerhatY

Alıntı yapılan: Furkan41 - 04 Temmuz 2019, 14:19:39Devreyi yaptıysan bir calışma videosu atta keyifle izleyelim
Hocam TDA7315'i bekliyorum. Aliexpress üzerinden aldım, geldiği zaman dinleyeceğiz. Ama sistemin çalıştığını gösteren bir video çektim. Onu atabilirim isterseniz.

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın