Merhaba arkadaslar. uygulamayı düşündüğüm bir proje için yardımınıza ihtiyacım var.
Yazılım kısmında takıldım kaldım. Bilindiği üzere arduino uno'da 6 adet analog giriş ve 14 adet dijital giriş/çıkış var.
Yapmayı düşündüğüm projede;
13 adet buton 14 adet limit switch 13 adet çıkış (redüktörlü dc motor sürmek için tetikleme ucu)
olacak.
yani arduino'ya 27 adet giriş, 13 adet çıkış olacak. Ancak pin sayısı sınırlı olduğundan 27 adet girişin hepsini de 6 adet analog girişe dağıtmayı düşünüyorum.
yani;
1. butona basıldığında A0 girişinde a değeri verecek 2. butona basıldığında A0 girişinde b değeri verecek 3. butona basıldığında A0 girişinde c değeri verecek 4. butona basıldığında A0 girişinde d değeri verecek . . . gibi
boylece arduino hangi butondan veya switch ten veri girişi olacağını anlayacak çıkış pinlerinden herhangi bir tanesini tetikleyecek.
ben programı oluştururken analog olarak okunan değerin nasıl işleneceğini oluşturamadım.
ÖRNEK:
1 dc motor var ve bu motor için
ileri butonu A0 pinine geri butonu A0 pinine ileri stop switchi A0 pinine geri stop switchi A0 pinine ileri komutu 0 pinine geri komutu 1 pinine
bağlanacak olursa; butona bir kere basıldığında motor ileri stop switchini görene kadar ilerleyecek ve duracak. bu sırada butona birkez daha basılırsa da duracak.
geri butona bir kez basıldığında da geri stop switchini görene kadar geri gelecek ve switchi gördüğünde duracak veya durma komutu geri butonuna tekrar basılırsa gerçekleşecek.
ayrıca ileri switchi görmüşken ileri butonuna basılsa bile ileri gitmeycek geri switchini görmüşken de geri basılması durumunda geri komutunu uygulamayacak şekilde olmalıdır.
Not: butonların ve switch değerlerinin farklı voltaj değerlerinde algılanabilmesi için her birini farklı direnç değerlerinde bağlayacağım ve 0...1023 değer aralığınının tamamını kullanarak değerlerin olabildiğince birbirinden uzak olmasını sağlayacağım.
bu örnek yazılım nasıl olabilir sizce arkadaşlar.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
Analog girişlerden gelen sayısal veriyi okuyup uygun değişkenlere atacaksınız(Bu kısmı atlayıp direk kod kısmına geçiyorum). Örnek olarak sadece ileri butonunu dikkate alalım. Diğerleri de aynı mantıkla olacak zaten.
İleri butonuna basılıp basılmadığını denetlemek için bir değişken tanımla. (bool ileri_basildimi = 0;)
Tuşların basılıp basılmadığını denetleyen kod bloğunda ilgili tuşun basılıp basılmadığı durumu güncellenecek,
if(Eğer ileri tuşuna basılınca oluşacak değer oluştuysa -yani tuşa basıldıysa-) { ileri_basildimi = !ileri_basildimi; }
Tuş durumları güncellendikten sonra tuş durumuna ve switch durumuna göre işlem yapılacak,
if (ileri_basildimi == true && ileri_switch == false) { motoru ileriye doğru hareket ettir. } else if (ileri_basildimi == false || ileri_switch == true) { motoru durdur }
Yine her döngüde stop switchlere ulaşıldımı kontrol ettir.
if (eğer ileri stop switch e ulaşıldıysa) { ileri_switch = true; }
Genel yapı itibari ile bu şekilde olacak. Switch ve buton parazitlerini önlemek için aralara uygun gecikmeler konulabilir.
Not: İlla bu şekilde olacak diye bir kural yok çok farklı algoritmalar da oluşturulabilir. Ama genel yapı itibari ile buna benzer olacak. Kolay gelsin. İyi çalışmalar...
Analog girişlerden gelen sayısal veriyi okuyup uygun değişkenlere atacaksınız(Bu kısmı atlayıp direk kod kısmına geçiyorum). Örnek olarak sadece ileri butonunu dikkate alalım. Diğerleri de aynı mantıkla olacak zaten.
İleri butonuna basılıp basılmadığını denetlemek için bir değişken tanımla. (bool ileri_basildimi = 0;)
Tuşların basılıp basılmadığını denetleyen kod bloğunda ilgili tuşun basılıp basılmadığı durumu güncellenecek,
if(Eğer ileri tuşuna basılınca oluşacak değer oluştuysa -yani tuşa basıldıysa-) { ileri_basildimi = !ileri_basildimi; }
Tuş durumları güncellendikten sonra tuş durumuna ve switch durumuna göre işlem yapılacak,
if (ileri_basildimi == true && ileri_switch == false) { motoru ileriye doğru hareket ettir. } else if (ileri_basildimi == false || ileri_switch == true) { motoru durdur }
Yine her döngüde stop switchlere ulaşıldımı kontrol ettir.
if (eğer ileri stop switch e ulaşıldıysa) { ileri_switch = true; }
Genel yapı itibari ile bu şekilde olacak. Switch ve buton parazitlerini önlemek için aralara uygun gecikmeler konulabilir.
Not: İlla bu şekilde olacak diye bir kural yok çok farklı algoritmalar da oluşturulabilir. Ama genel yapı itibari ile buna benzer olacak. Kolay gelsin. İyi çalışmalar...
Bu yazdığın şekilde sorunsuz çalışması lazım. Sadece ufak bir durum eklemek gerek. Motor ileri giderken geri tuşuna basılırsa geri tuşunu false yapmalı. Tam tersi durumda da ileri tuşu false olmalı. Yoksa ileri giderken geri tuşuna basılırsa her iki pinde çıkış vereceğinden motor kilitlenir.
Tuşları guncelleyen if blogunun içinde ileri basıldığında geri butonunu false yap. Geri butonu basıldığında ileri butonunu false yap.
Birde geri tuşuna basılırsa ileri Switch i false yap. İleri basılırsa geri Switch i false yap.switch ler false yapılmadan kalırsa bu sefer motor tek sefer iş yapar.
Bunları da ekleyince sorun kalmiyor.
< Bu mesaj bu kişi tarafından değiştirildi osmanertomac -- 11 Mart 2019; 15:52:14 >
Yazılım kısmında takıldım kaldım. Bilindiği üzere arduino uno'da 6 adet analog giriş ve 14 adet dijital giriş/çıkış var.
Yapmayı düşündüğüm projede;
13 adet buton
14 adet limit switch
13 adet çıkış (redüktörlü dc motor sürmek için tetikleme ucu)
olacak.
yani arduino'ya 27 adet giriş, 13 adet çıkış olacak. Ancak pin sayısı sınırlı olduğundan 27 adet girişin hepsini de 6 adet analog girişe dağıtmayı düşünüyorum.
yani;
1. butona basıldığında A0 girişinde a değeri verecek
2. butona basıldığında A0 girişinde b değeri verecek
3. butona basıldığında A0 girişinde c değeri verecek
4. butona basıldığında A0 girişinde d değeri verecek
.
.
.
gibi
boylece arduino hangi butondan veya switch ten veri girişi olacağını anlayacak çıkış pinlerinden herhangi bir tanesini tetikleyecek.
ben programı oluştururken analog olarak okunan değerin nasıl işleneceğini oluşturamadım.
ÖRNEK:
1 dc motor var ve bu motor için
ileri butonu A0 pinine
geri butonu A0 pinine
ileri stop switchi A0 pinine
geri stop switchi A0 pinine
ileri komutu 0 pinine
geri komutu 1 pinine
bağlanacak olursa; butona bir kere basıldığında motor ileri stop switchini görene kadar ilerleyecek ve duracak. bu sırada butona birkez daha basılırsa da duracak.
geri butona bir kez basıldığında da geri stop switchini görene kadar geri gelecek ve switchi gördüğünde duracak veya durma komutu geri butonuna tekrar basılırsa gerçekleşecek.
ayrıca ileri switchi görmüşken ileri butonuna basılsa bile ileri gitmeycek
geri switchini görmüşken de geri basılması durumunda geri komutunu uygulamayacak şekilde olmalıdır.
Not: butonların ve switch değerlerinin farklı voltaj değerlerinde algılanabilmesi için her birini farklı direnç değerlerinde bağlayacağım ve 0...1023 değer aralığınının tamamını kullanarak değerlerin olabildiğince birbirinden uzak olmasını sağlayacağım.
bu örnek yazılım nasıl olabilir sizce arkadaşlar.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi mutluca -- 11 Mart 2019; 11:54:8 >