Hallo,
habe dieses kleine Programm geschrieben um meine Tasten auszuwerten, daß
ganze passiert in meiner Inerrupt Subroutine und funktioniert soweit
ganz gut, aber jetzt würde ich gerne auch lane tastendrücker asuwerten!
Wie kann ich dan nam besten machen?
Timer?, 2. Interrupt?
Das mit dem delay funktioniert irgendwie nicht?
void timer0_c_irq_handler(void) {
volatile AT91PS_TC pTC = AT91C_BASE_TC0; // pointer to timer
channel 0 register structure
volatile AT91PS_PIO pPIO = AT91C_BASE_PIOA; // pointer to PIO
register structure
unsigned int dummy; // temporary
uint8_t presscounter,i;
dummy = pTC->TC_SR; // read TC0 Status Register to
clear interrupt
if ((pPIO->PIO_ODSR & LED1) == LED1) {
pPIO->PIO_CODR = LED1; // turn LED1 (DS2) on
} else {
pPIO->PIO_SODR = LED1; // turn LED1 (DS2) off
}
bouncer++;
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & BUT_left ) != BUT_left )
{
i = bouncer ;
delayisr(500000);
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & BUT_left ) == BUT_left)
{
pressedkey = 1;
} else {
pressedkey = 2;
}
}
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & BUT_right ) != BUT_right )
{
pressedkey = 2;
bouncer++;
}
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & BUT_menu ) != BUT_menu )
{
pressedkey = 3;
bouncer = 0;
if ((AT91F_PIO_GetInput(AT91C_BASE_PIOA) & BUT_menu ) != BUT_menu )
{
pressedkey = 4;
bouncer++;
}
}
}
Tasten macht man sicher nie im Interrupt, sondern mit dem System Timer im Main. Ein tasten druck ist erkannt falls zwei ticks hintereinander gedrueckt ist, nachdem vorher nicht gedrueckt war. Fuer einen langen Tastendruck zaehlt man noch etwas raf.
> Tasten macht man sicher nie im Interrupt, sondern mit dem System Timer
Das ist schlicht Quatsch. Kommt auf die Anwendung an !
mfg
Roland
Hallo, der Problemsteller nochmal! Wie kann ich nun imDetail diesen langen Drücker herausfinden? Ein Timer löst einen Interrupt aus, der wiederrum in diese Funktion springt. But_x sind meine Tasten und bouncer eine Variable die hochgezählt wird! Ich stehe auf dem Schlauch und brauche nur einen kleinen Tip, vielen Dank. Gruß thomas
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.