İçindekiler:
- Adım 1: Malzeme Listesi
- Adım 2: Şematik ve Cicruit
- Adım 3: Kod
- Adım 4: Değerlerin Düzeltilmesi
- Adım 5: Eleştiri ve İncelemeden Sonra Proje
- Adım 6: Bazı Lehimleme İşlerinden Sonra
- 7. Adım: Gerçek Anı
- 8. Adım: Son
Video: Tek Pinli 4×4 Tuş Takımı: 10 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Ne zaman bir tuş takımı görsem, bir sürü pin ile geliyor, bu Arduino pinlerinizin büyük bir israfı, yani bir tuş takımını tek pinli çalıştırabilir miyiz?. Cevap burada.
Adım 1: Malzeme Listesi
Donanım:
01 Arduino UNO
02 Ekmek Tahtaları
I2C ile 01 LCD
16 Basmalı düğmeler
04 direnç 1.5 kΩ
04 direnç 620 Ω
04 direnç 220 Ω
08 direnç 100 Ω
01 direnç 1 kΩ
07 Atlama telleri
Yazılım:
PC'nizde kurulu Arduino IDE
Adım 2: Şematik ve Cicruit
Tüm fikir, sağdaki kabloyla toprağa dikey olarak ve diğer kabloyla (düğme kablosu) yatay olarak bağlanan 4 * 4 basma düğme matrisine ve 1.5 kΩ, 620Ω, 220Ω ve 100Ω dirençlerine sahip olmamızdır. 4 sıra, şematik olarak gösterildiği gibi dört adet 100Ω direnç ile bağlanır.
Bir düğmeye her bastığınızda devreyi kapatırsınız ve akım farklı bir yoldan ve farklı direnç zincirlerinden geçer, bu nedenle pim A0 her basma düğmesi için farklı bir analog okuma alır. Şimdi ihtiyacınız olan tek şey kodlama.
Adım 3: Kod
#Dahil etmek
#Dahil etmek
LiquidCrystal_I2C lcd(0x3f, 20, 4);
int Düğme = A0;
int okuma değeri;
geçersiz kurulum()
{
Seri.başla(9600);
lcd.begin();
pinMode(Düğme, GİRİŞ);
lcd.backlight();
lcd.print("Merhaba Dünya");
gecikme(2000);
lcd.clear();
lcd.print("Tek pinli 4*4 tuş takımı");
gecikme(2000); }
boşluk döngüsü()
{
okuma değeri = analogRead(Button);
Serial.println(okuma değeri);
if (readvalue==852){lcd.clear();lcd.print("A");}
else{ if (readvalue==763){lcd.clear();lcd.print("B");}
else{ if (readvalue==685){lcd.clear();lcd.print("C");}
else{ if (readvalue==965){lcd.clear();lcd.print("D");}
else{ if (readvalue==565){lcd.clear();lcd.print("9");}
else{ if (readvalue==614){lcd.clear();lcd.print("6");}
else{ if (readvalue==360){lcd.clear();lcd.print("3");}
else{ if (readvalue==335){lcd.clear();lcd.print("#");}
else{ if (readvalue==396){lcd.clear();lcd.print("8");}
else{ if (readvalue==349){lcd.clear();lcd.print("5");}
else{ if (readvalue==235){lcd.clear();lcd.print("2");}
else{ if (readvalue==279){lcd.clear();lcd.print("0");}
else{ if (readvalue==452){lcd.clear();lcd.print("7");}
else{ if (readvalue==271){lcd.clear();lcd.print("4");}
else{ if (readvalue==170){lcd.clear();lcd.print("1");}
else{ if (readvalue==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}}} }
Adım 4: Değerlerin Düzeltilmesi
Seri monitörü açtığınızda 1023 değerini gösterecek, bir düğmeye basarsanız size başka bir okuma verecektir, bu değerleri alıp kodda bazı değişiklikler yapmanız gerekir.
Adım 5: Eleştiri ve İncelemeden Sonra Proje
Hepimizin bilgimizi öğrenmek ve paylaşmak için burada olduğumuza şüphe yok, topluluktan bazı kişilerin çok yardımcı olan bazı yorumları sayesinde, projemde bazı ayarlamalar ve iyileştirmeler yapmaya karar verdim:
donanım:
Breadboard'larda kötü bağlantı sorununu önlemek için tüm bileşenleri bir PCB'de lehimlemeye karar verdim.
kod:
Bir arkadaşım bana bir yazılım geri tepme kullanmamı tavsiye etti ve programın bir okuma seçmesi biraz zaman almak için sadece bir döngü (örneğin "for" döngüsü), bu, çok fazla okuma yaptığı anlamına gelir (örneğimde 500) ancak sürer sadece sonuncusu.
for (i=1; i<= 500; i++) { // sadece 500'üncü analoğu alın
değer = analogRead(Button);} // bu biraz zaman ayırmaya ve kötü okumalardan kaçınmaya yardımcı olur
Onun sayesinde başka bir arkadaşım bana "okunan değeri" bir değil bir dizi değerle karşılaştırmamı tavsiye etti çünkü "okunan değer" aynı buton için çok fazla değer alıyor. Örneğin "A": 849, 850, 851 852, 853, 854, 855 yani 7 değer aralığıdır: bir eşik (852) ve sol ve sağ 3 değer. burada yapmamız gereken "readvalue" ile "852" ile "3" arasındaki farkın mutlak değerini karşılaştırmaktır.
if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}
Adım 6: Bazı Lehimleme İşlerinden Sonra
7. Adım: Gerçek Anı
Gördüğünüz gibi program bazen düğmeleri karıştırıyor ama yine de çalışıyor, teoride devrede yanlış bir şey yok ama kodun daha fazla kalibrasyona ihtiyacı var.
8. Adım: Son
Umarım bu projeyi beğenirsiniz ve yapmaya çalışırsınız, belki benden daha iyisini yaparsınız.
Sorularınız varsa bana sorun, yorum bırakın ve beğendiyseniz bana oy vermeyi unutmayın.
Önerilen:
Tuş Takımı Servo Kilidi: 5 Adım
Tuş Takımı Servo Kilidi: Herkese merhaba, iyi bir gün geçirmeniz dileğiyle. Umarım değilse, bu eğitime ve bazı terapötik müziklere biraz açık fikirlilikle geri sarabilirsiniz. Programlama bir güçlük olabilir. Neyse ki, bu öğretici bir güçlük değil, bu yüzden belki de başarabilirsiniz
Second Life'ta Tek Tek Nesne Yüzeylerine Dokular Nasıl Uygulanır: 7 Adım
Second Life'ta Tek Tek Nesne Yüzeylerine Dokular Nasıl Uygulanır: Second Life içinde, tek bir nesneye birden çok doku uygulama olanağınız vardır. İşlem çok basittir ve yapılarınızın görünümünü büyük ölçüde iyileştirebilir
Ccleaner ile Gönder'i Kullanarak Tek Tek Dosyaları Güvenli Parçalayın: 4 Adım
Ccleaner ile Gönder Kullanarak Tek Tek Dosyaları Güvenli Parçalayın: Bu Talimat, sağ tıklamanıza CCleaner ile dosyayı silmenizi sağlayacak bir Gönder seçeneği eklemeniz gerektiğini gösterecektir
Ccleaner V2 ile Gönder'i Kullanarak Tek Tek Dosyaları Güvenli Parçalayın: 4 Adım
Ccleaner V2 ile Gönder'i Kullanarak Tek Tek Dosyaları Güvenli Olarak Parçalayın: Bu, kaşifte sağ tıklama "bağlam" menüsüne dosyaları Ccleaner aracılığıyla parçalamanıza izin verecek bir parçalama seçeneği eklemek için önceki öğreticimin geliştirilmiş bir sürümüdür. Bu yöntem daha fazlasını sunar. doğrudan yaklaşım ve soes ekleme gerektirmez
Tek Dokunuşla Tuş Takımı Ezici: 4 Adım (Resimlerle)
Tek Dokunuşla Tuş Takımı Ezici: Kapıyı her açmanız gerektiğinde bir kod yazarak değerli saniyelerinizi boşa mı harcıyorsunuz? Bu küçük 'aygıt' sizin için doğru tuşlara basarak süreci kolaylaştırır ve avucunuzun içine gizlenebilir, böylece elinizi tuş takımına ve - uygulama