hier mal der code aus der m32 LIB nur eben mit meinen werten
Code:
// KeyLeiste:
uint8_t getPressedKeyNumberLeiste(void)
{
uint16_t keysLeiste;
keysLeiste = readADC(ADC_7);
if(keysLeiste < 1020) {
nop();
nop();
nop();
keysLeiste += readADC(ADC_7);
keysLeiste >>= 1;
}
// das ist der Teil der mit 1x5 Tastatur funktioniert
if(keysLeiste < 50) // gemessener Wert 0
return 1;
if(keysLeiste < 580) // gemessener Wert 510
return 2;
if(keysLeiste < 700) // gemessener Wert 682
return 3;
if(keysLeiste < 790) // gemessener Wert 767
return 4;
if(keysLeiste < 830) // gemessener Wert 818
return 5;
return 0;
// 1x5 Code ENDE
// Das ist der 4x4 Code, der nicht funktioniert
/*
if(keysLeiste < 210) // gemessener Wert 208
return 1;
if(keysLeiste < 223) // gemessener Wert 221
return 2;
if(keysLeiste < 235) // gemessener Wert 233
return 3;
if(keysLeiste < 248) // gemessener Wert 246
return 4;
if(keysLeiste < 262) // gemessener Wert 260
return 5;
if(keysLeiste < 283) // gemessener Wert 281
return 6;
if(keysLeiste < 304) // gemessener Wert 302
return 7;
if(keysLeiste < 325) // gemessener Wert 323
return 8;
if(keysLeiste < 361) // gemessener Wert 359
return 9;
if(keysLeiste < 402) // gemessener Wert 399
return 10;
if(keysLeiste < 444) // gemessener Wert 442
return 11;
if(keysLeiste < 492) // gemessener Wert 490
return 12;
if(keysLeiste < 550) // gemessener Wert 548
return 13;
if(keysLeiste < 647) // gemessener Wert 645
return 14;
if(keysLeiste < 768) // gemessener Wert 766
return 15;
if(keysLeiste < 922) // gemessener Wert 920
return 16;
*/
return 0;
}
//-----------------------------------------------------------------------
uint8_t checkPressedKeyEventLeiste(void)
{
static uint8_t pressed_keyLeiste = 0;
if(pressed_keyLeiste) {
if(!getPressedKeyNumberLeiste())
pressed_keyLeiste = 0;
}
else {
pressed_keyLeiste = getPressedKeyNumberLeiste();
if(pressed_keyLeiste)
return pressed_keyLeiste;
}
return 0;
}
//-----------------------------------------------------------------------
uint8_t checkReleasedKeyEventLeiste(void)
{
static uint8_t released_keyLeiste= 0;
if(released_keyLeiste) {
if(!getPressedKeyNumberLeiste()) {
uint8_t tmp = released_keyLeiste;
released_keyLeiste = 0;
return tmp;
}
}
else
released_keyLeiste = getPressedKeyNumberLeiste();
return 0;
}
hier die Programmfunktion, wo ich auf die Tasten reagiere
Code:
void tasterzwei(void)
{
uint8_t keyLeiste = getPressedKeyNumberLeiste();
if(keyLeiste) // If a key is pressed... (key != 0)
{
while(getPressedKeyNumberLeiste());
switch(keyLeiste)
{
case 1:
setLEDs(0b0001);
clearLCD();
showScreenLCD("Leiste", "Taste 1","","");
break;
case 2:
setLEDs(0b0010);
clearLCD();
showScreenLCD("Leiste", "Taste 2","","");
break;
case 3:
setLEDs(0b0100);
clearLCD();
showScreenLCD("Leiste", "Taste 3","","");
u.s.w
Liest du also die Keys deiner 4x4 und der 1x5 parallel ein?
Nein, entweder 4x4 oder 1x5
statt den ADC0 2 mal zu belegen?
zum lesen benutze ich den ADC 7 und nur dafür, sonst wird der Port nicht benutzt
Du sprachst von Wert (ADC) 920 .. das klingt mir immer noch als sehr hoch... bist du sicher das nicht eine der Tasten klebt?
Erzeugen alle Keys 920 ?
Und wie bist du an die Werte um 230 gekommen wenn die Tastatur nun 920 produziert?
also ich habe zuerst alle Tasten eingelesen. So kam ich auf 16 Werte so auch auf 233 und jeweils immer 2 dazu auf 235. Diese Werte habe ich dann in die LIB eingetragen. Das eine Taste klebt kann ich ausschliessen (gemessen)
Nein es ist nur eine Taste gewesen und ist jetzt auch nicht mehr nachvollziehbar, da die Tastatur mit der Abfrage garnicht mehr reagiert. Wenn ich als Test die ADC Werte abfrage bekomme ich genau wieder die Werte die ich zuerst bekommen habe.
mfG TrainMen
Lesezeichen