Forum: Mikrocontroller und Digitale Elektronik Knopf geht nicht!?


von Gernot F. (gernotfrisch)


Lesenswert?

Wenn ich nix mach, steht da "Enter" =4. Wenn ich GND auf die pins
lege, geht nur der 3er ("right"). Die anderen scheinen keine Reaktion
zu zeigen. Ist schon spät. Liegt vielleicht daran ;)
1
void HandleKeys(void)
2
{
3
  if(KEY_VALID) return;
4
5
  for (char i=0;i<5;i++)
6
  {
7
    if(KEY_PIN & (1<<i))
8
    {
9
      KEY_VALID = 1;
10
      KEY = i;
11
    }
12
  }
13
}
14
int main(void)
15
{  
16
    lcd_init();
17
  KEY_DDR = 0xff; KEY_PORT = 0xff;
18
  switch(GetKey())
19
  {
20
  case 0: lcd_string_P ("UP"); break;
21
  case 1: lcd_string_P ("LEFT"); break;
22
  case 2: lcd_string_P ("DOWN"); break;
23
  case 3: lcd_string_P ("RIGHT"); break;
24
  case 4: lcd_string_P ("ENTER"); break;
25
  }
26
}

von Gernot F. (gernotfrisch)


Lesenswert?

PS. Ich ruf in main() schon immer wieder HandleKEys auf. Klar, oder?

von Alex Trusk (Gast)


Lesenswert?

was bewirkt folgende zeile?
KEY_DDR = 0xff; KEY_PORT = 0xff;

von MasterFX (Gast)


Lesenswert?

Ohne es zu wissen würde ich mal sagen dass it KEY_DDR = 0xff; alle
PortPins auf Ausgang geschaltet werden und mit KEY_PORT = 0xff; eben
die  Ports auf High gesetzt werden.

von Alex Trusk (Gast)


Lesenswert?

korrekt. und wenn man dann gnd an die pins legt, machts brrrzzzzt...

zum glueck sind avrs hart im nehmen. davon mal ab, ist der code eher
suboptimal. hier ein bisschen lesestoff, wie man taster abfragt:

http://www.mikrocontroller.net/articles/Entprellung

von Peter D. (peda)


Lesenswert?

"Ich ruf in main() schon immer wieder HandleKEys auf. Klar, oder?"


Nö, überhaupt nicht klar !

Ich sehe da nur lcd_init(), lcd_string_P(), GetKey(), welche nirgends
definiert sind und auch sämtliche Variablen und Konstanten fehlen.


Was ist denn daran bloß so schwierig, Copy+Paste zu benutzen, d.h.
exakt das hinzuschreiben, was man auch ausprobiert hat ???

Und Code als Anhang sollte doch auch klar sein.

Für uncompilierbare und falsche Codefragmente braucht man sich nicht
wundern, wenns darauf keine Hilfe gibt.



Peter

von Gernot F. (gernotfrisch)


Lesenswert?

Ich Depp! Es muss so sein:
1
int main(void)
2
{
3
lcd_init();
4
KEY_DDR = 0x00 KEY_PORT = 0xff; // input + pullup
5
switch(GetKey())
6
{
7
case 0: lcd_string_P ("UP"); break;
8
case 1: lcd_string_P ("LEFT"); break;
9
case 2: lcd_string_P ("DOWN"); break;
10
case 3: lcd_string_P ("RIGHT"); break;
11
case 4: lcd_string_P ("ENTER"); break;
12
}
13
}

und bei GetKey muss ich (! (KEY_PIN & i)) abfragen, damit er gedrückt
ist, nicht? GND == 0!?

Was so ein bischen Schlaf alles ausmacht... ;)

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
Noch kein Account? Hier anmelden.