-
tasten betätigung zählen
moin,
ich möchte ein programm schreiben welches beim 4 tasten druck eine LED leuchten lässt.
Code:
#include <avr/io.h>
int i=0;
int main()
{
DDRB |= (1 << PB0);
PORTD|= (1 << PD2);
while (1)
{
if (PIND & (1 << PD2))
i=i+1;
if (i==4)
PORTB &= ~(1 << PB0);
else
PORTB |= (1 << PB0);
}
return 0;
}
geht aber nicht, die LED bleibt aus. deswegen hab ich mal
int i = 5
if (i>=4)
gemacht um zusehen woran es liegt. jetzt blinkt die LED allerdings.
kann mir jemand sagen woran es liegt?
ich benutze einen atmega8 auf den myavr board.
danke
mfg, nadors
-
Das Problem dürfte darin liegen, dass der atmega8 die while-Schleife ständig (ziemlich schnell) durchläuft. In der Zeit, in der Du die Taste gedrückt hälst, zählt er folglich i immer weiter hoch. In der Variante (i == 4) ist die Bedingung also nur sehr kurz erfüllt, bei (i>=4) kommt es irgendwann zu einem Überlauf und i ist negativ, die LED schaltet um, bis i wieder größer 3 ist...
Wenn Du den Tastendruck zählen willst, musst Du die Taste entprellen und sicherstellen, dass er jedes Drücken nur einmal zählt. (geht sicher professionell auch - ich helfe mir einfach damit, dass ich in einer while-Schleife auf den Tastendruck warte, dann einen Moment Zeit vergehen lasse und danach mit einer while-Schleife warte, bis die Taste losgelassen ist; dann wieder von vorn)
-
könntest du vielleicht den code posten? irgendwie bekomme ich das nicht hin.
-
schau Dir mal die zwei Seiten an:
http://www.mikrocontroller.net/artic....29Entprellung
http://www.mikrocontroller.net/articles/Entprellung
Da sind auch code-Beispiele dabei - die sollten die wesentlichen Fragen klären.
Viel Erfolg!