Hallo,
Du musst deine Funktion (Methode) auch aufrufen, sonst tut sich da nichts.
Außerdem musst du immer und immer wieder das Touchfeld abfragen und die Ergebnisse davon verwerten. Deswegen eine Endlosschleife mit while(1) einbauen!
So ähnlich könnte das aussehen:
Code:
...
void read_senskey( void )
{
uint16_t i = MAX_CYCLE;
uint8_t a, b, x, y;
ATOMIC_BLOCK(ATOMIC_FORCEON){
a = DDRA & ~(SK_A012 | SK_B012);
b = PORTA & ~(SK_A012 | SK_B012);
y = SK_B012; // input mask
do
{
DDRA = a; // tristate
PORTA = b | SK_B012;
DDRA = a | SK_B012; // Bx = strong high
DDRA = a; // tristate
PORTA = b;
DDRA = a | SK_A012; // Ax = strong low
if( --i == 0 ) // timeout
break;
x = y & PINA; // not immediately after DDRA
if( x )
{
if( x & SK_B0 )
keys[0] = i;
if( x & SK_B1 )
keys[1] = i;
if( x & SK_B2 )
keys[2] = i;
}
y ^= x; // clear processed input
}
while( y ); // all inputs done
DDRA = a | SK_A012 | SK_B012; // discharge
}
}
int main (void)
{
DDRA = 0xff; //PORTA komplett Output
PORTA = 0x01; //Damit ist PA4 auf +5Volt
// _delay_ms( 50000 ); // wozu ??
while(1)
{
read_senskey(); //obere Funktion wird aufgerufen, diese fragt ja die Touchfelder ab
//jetzt die Ergebnisse der Touchabfrage (welche im Array keys[] gespeichert wurden) verwerten
if( keys[0]>gibeineZahlein )
{
//LED an
PORTA|=0x01;
}
else
{
//LED aus
PORTA&=0xFE;
}
}
}
PS: Bitte nächstes mal Code-Tags beim eingeben verwenden, dann sieht dein Programm so wie das hier drüber aus^^
Das Programm würde jetzt ein Touchfeld an PA4 / PA5 abfragen und damit eine LED an PA0 schalten.
(bei der void stimmen irgendwie die geschweiften Klammern {} nicht ganz...? oder hab ich mich verzählt?)
Hoffe, ich konnte dir weiterhelfen 
Gruß,
Bernhard
Lesezeichen