Hallo alle zusammen, ich hab für ein Standard 3x4 Matrix Tastenfeld eine Routine geschrieben: // start matrix routine for (int i=1; i<4; i++) { if (i==1) { // set port 0 to check for 1, 4, 7, * at ports 4, 5, 6, 7 PORTD= 0b00000001; if ( PIND & (1<<PIND4) ) b1 = true; else b1 = false; if ( PIND & (1<<PIND5) ) b4 = true; else b4 = false; if ( PIND & (1<<PIND6) ) b7 = true; else b7 = false; if ( PIND & (1<<PIND7) ) bStar = true; else bStar = false; PORTD= 0b00000000; } if (i==2) { // set port 1 to check for 2, 5, 8, 0 at ports 4, 5, 6, 7 PORTD= 0b00000010; if ( PIND & (1<<PIND4) ) b2 = true; else b2 = false; if ( PIND & (1<<PIND5) ) b5 = true; else b5 = false; if ( PIND & (1<<PIND6) ) b8 = true; else b8 = false; if ( PIND & (1<<PIND7) ) b0 = true; else b0 = false; PORTD= 0b00000000; } if (i==3) { // set port 2 to check for 3, 6, 9, # at ports 4, 5, 6, 7 PORTD= 0b00000100; if ( PIND & (1<<PIND4) ) b3 = true; else b3 = false; if ( PIND & (1<<PIND5) ) b6 = true; else b6 = false; if ( PIND & (1<<PIND6) ) b9 = true; else b9 = false; if ( PIND & (1<<PIND7) ) bSharp = true; else bSharp = false; PORTD= 0b00000000; } } // matrix routine end Das funktioniert auch soweit... leider hab ich aber das Problem das wenn ich mehrere Tasten in der Horizontale betätige (also zum Beispiel 1,2,3) alle bits (b1, b2, b3) zurückgesetzt werden obwohl aber das Gegenteil passieren soll. Findet jemand den Fehler in meinem Programm... ich hab schon ewig rumprobiert. Wäre super ;-) Vielen Dank und Grüße!
raxor schrieb: > Das funktioniert auch soweit... leider hab ich aber das Problem das wenn > ich mehrere Tasten in der Horizontale betätige (also zum Beispiel 1,2,3) > alle bits (b1, b2, b3) zurückgesetzt werden obwohl aber das Gegenteil > passieren soll. Wenn Du drei Tasten in der Horizontalen gleichzeitig drückst, schließt Du 3 AVR-Ausgänge kurz.... der stärkere gewinnt. Das dürften die beiden sein, die dabei auf 0 gehen. Wenn solche gleichzeitigen Tastendrücke gebraucht werden, mussst Du entweder Dioden einlöten oder mit Pull-Up/Down-Widerständen arbeiten, wobei Du die inaktiven Spalten auf Eingang statt Ausgang setzt, damit sie nicht gegeneinander treiben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.