Arduino ile kütüphanesiz 4x4 keypad yapmaya çalıştım. Yapmayı başardım fakat aynı anda 4-5 tanesi basınca sapıtıyor ve ISIS'te simulasyonunu denerken sarı oluyor pinler
Hata MCU'nun PullUp undan mı kaynaklanıyor. Direnç ile mi pullup yapmalıyım?
Sorun nereden kaynaklanıyor olabilir?
void setup(){
pinMode(6, INPUT_PULLUP);
digitalWrite(5, LOW);
}
mesaj birleştirme:: 06 Şubat 2016, 09:52:18
Sorunu buldum.
(http://www.circuitstoday.com/wp-content/uploads/2014/05/hex-keypad-arduino.png)
R1'e enerji verdiğimde ve 1 butona bastığımda sorun yok. Fakat 1 ve 4 ye aynı anda bastığımda 1 ve 4 kısa devre oluyor.
Çünkü C1'e Hem 0 hem 1 gidiyor. Sorunu nasıl çözeceğim.
C1'i okurken R1'i çıkış diğerlerini giriş olarak mı ayarlıyacağım?
Tarama yaptığın bacaklara diyot bırakırsan sorunun çözülür.
Keypad işlemlerini 74HC922 ile yapsanız daha iyi olur.
tarama bacaklarına diyot ve pull-up direnci ile çözülebilir. (klayve devrelerini bir inceleyin.
74C922 veya 74C923 (HC değil) kullanılabilir, ama aynı anda basılan tuşlara cevap veremez. Basılan tuşlardan birine kilitlenir ve tuş bırakılana kadar taramayı askıya alır.
Benim istediğim şey. Tüm tuşlara aynı anda basıldığında cevap verebilmesi. Yani 65536 tane olasılığıda istiyorum.
Diyot ekledim biraz düzeldi ama tam değil.
(http://resmet.net/images/2016/02/05/wewe.png)
Serial Monitörde 31 olması gereken yerde 255 gönderiyor. Anlamadım.
Alt satırlardada durumlar aynı sadece Son buton değerini gönderiyor.
mesaj birleştirme:: 06 Şubat 2016, 12:10:16
Tek tek bastığımda sorun yok. Sadece Sütünları kullandığımda sorun yok. Ama bir sütün full basılı iken(resimdeki gibi) bir başka satırdan basma kalktığımda tüm satırdaki butonların toplam değerini ekliyor.
mesaj birleştirme:: 06 Şubat 2016, 12:41:08
49 yerine 51 gönderiyor; ]http://resmet.net/images/2016/02/05/Untitled.png] (http://resmet.net/images/2016/02/05/Untitled.png)
Donanımsal değil yazılımla ilgili sorun var kodu paylaşırsanız sorun daha iyi anlaşılır.
unsigned long BIN_1, BIN_2, BIN_3, BIN_4, BIN_SON;
void setup(){
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
Serial.println(BIN_SON);
}
@8051-ARM Yardım etmedin.
veliusta, şu bağlantıyı denermisin:
(http://s14.postimg.cc/y5unh5srh/fullkeypad.jpg) (http://postimg.cc/image/y5unh5srh/)
pwm.c oldu fakat Ben bu diyotları keypadın içine nasıl sokacam.
(http://resmet.net/images/2016/02/06/534.png)
Serial Monitörde 31 olması gereken yerde 255 gönderiyor. Anlamadım.
hocam seriale BIN_SON degiskenine tus okumadan el ile veri girip denedinizmi serial monitorden okudunuzmu ?zira burda sikinti yok gibi. olsa olsa tur donusumu olabilir birde buton degerlerini hesaplamadan once araya bir delay girseniz.
(http://store.nerokas.co.ke/image/cache/data/keypad%204x4-600x600.jpg)
hic diyotsuz calismasi lazim
digitalWrite(2, HIGH);// buralari digital hi yerinegiris yapin(input);
digitalWrite(3, HIGH);//buralari digital hi yerinegiris yapin(input);
digitalWrite(4, HIGH);//buralari digital hi yerinegiris yapin(input);
digitalWrite(5, LOW);
burayada bir delay girerseniz
BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
Çalışmıyor diyotsuz.
unsigned long BIN_1;
unsigned long BIN_2;
unsigned long BIN_3;
unsigned long BIN_4;
unsigned long BIN_SON;
void setup(){
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
}
void loop(){
delay(5);
digitalWrite(2, LOW);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(3, OUTPUT);
delay(5);
BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
delay(5);
digitalWrite(3, LOW);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(4, OUTPUT);
delay(5);
BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
delay(5);
digitalWrite(4, LOW);
pinMode(3, INPUT);
pinMode(2, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(5, OUTPUT);
delay(5);
BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
delay(5);
digitalWrite(5, LOW);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(2, INPUT);
delay(5);
pinMode(2, OUTPUT);
delay(5);
BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
delay(5);
BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
delay(5);
Serial.println(BIN_SON);
}
10K dirençte ekledim.
diyotsuz olmaz gibi ama hala emin değilim. imkansızı başarmakta mümkündür.
kullandığınız keypad yapıştırmalı ise yapacak bişey yok ama tuşlu olanlardansa pcb üzerine 805 kılıf diyotlar eklenebilir ancak ciddi bir cerrahi müdehale ister.
hocam karisiklik var sanki
pinMode(3, INPUT);/////ok
pinMode(4, INPUT);/////ok
pinMode(2, INPUT);/////ok
ilgili port output
ilgiliport low
delay(5);
BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
delay(5);
Karışıklık yok.
Output yapmayı çok erken almışım.
unsigned long BIN_1;
unsigned long BIN_2;
unsigned long BIN_3;
unsigned long BIN_4;
unsigned long BIN_SON;
void setup(){
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
}
void loop(){
delay(5);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
delay(5);
BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
delay(5);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
delay(5);
BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
delay(5);
pinMode(3, INPUT);
pinMode(2, INPUT);
pinMode(5, INPUT);
delay(5);
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
delay(5);
BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
delay(5);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(2, INPUT);
delay(5);
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
delay(5);
BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
delay(5);
BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
delay(5);
Serial.println(BIN_SON);
}
Düzeltmiştim bende. Diyotsuz olmuyor.
evet hocam hocam cok ozur en basini kacirmisim ben port cakismalarina kilitlendim obur tafaftan veriyi kacirdik pwm.c ustanin dedigi gibi bu is diyotsuz olmaz
Alıntı yapılan: veliusta - 06 Şubat 2016, 22:55:19
@8051-ARM Yardım etmedin.
Hocam kusura bakmayın yeni farkettim sorunu çözmenize sevindim.