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:
PS: Bitte nächstes mal Code-Tags beim eingeben verwenden, dann sieht dein Programm so wie das hier drüber aus^^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; } } }
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






Zitieren

Lesezeichen