Hi matze1,
solange eine Taste gedrückt wird, enthält pressedKeyNumber die Nummer der Taste und releasedKeyNumber 0.
Solange keine Taste gedrückt wird, enthält pressedKeyNumber 0 und releasedKeyNumber die Nummer der zuletzt gedrückten Taste.
Eine Abfrageschleife kann z.B. so aussehen:
Code:
uint8_t last_releasedKeyNumber;
/**
* M32 key state changed
*/
void keyStateChanged(void)
{
writeString_P_WIFI("\n\n===> key state changed!!!\n");
writeString_P_WIFI("ADC_KEYPAD value: ");
writeInteger_WIFI(adcKeypad, DEC);
writeChar_WIFI('\n');
writeString_P_WIFI("Key is pressed: ");
if(interrupt_M32status.keypressed) writeString_P_WIFI("Yes\n");
else writeString_P_WIFI("No\n");
writeString_P_WIFI("[Last rel. key number: ");
writeInteger_WIFI(last_releasedKeyNumber, DEC);
writeString_P_WIFI("]\nReleased key number: ");
writeInteger_WIFI(releasedKeyNumber, DEC);
writeChar_WIFI('\n');
last_releasedKeyNumber = releasedKeyNumber;
writeString_P_WIFI("Pressed key number: ");
writeInteger_WIFI(pressedKeyNumber, DEC);
writeChar_WIFI('\n');
writeChar_WIFI('\n');
}
uint8_t regM32Buf[4];
while(true)
{
task_checkPCINT15(); // RP6 M32 main task
if(interrupt_M32status.keyChange)
{
I2CTWI_readRegisters(I2C_RP6_M32_ADR, I2C_REG_ADC_KEYPAD_L, regM32Buf, 4);
adcKeypad = regM32Buf[0] + (regM32Buf[1]<<8);
releasedKeyNumber = regM32Buf[2];
pressedKeyNumber = regM32Buf[3];
keyStateChanged();
}
task_I2CTWI();
}
Lesezeichen