Hallo nochmal,
ich habe einige Probleme den Quellcode von Peter Dannegger zu verstehen:
Beitrag "Tastenmatrix auslesen über nur 2 Leitungen"
Am besten fange ich mal vorne an:
1 | static inline
|
2 | u16 key_no( u8 adcval )
|
3 | {
|
4 | u16 num = 0x1000; //4096 dezimal
|
5 | prog_uint8_t * thr = THRESHOLDS; //hier werden alle Schwellwerte gespeichert
|
6 |
|
7 | while( adcval < pgm_read_byte( thr ))
|
8 | {
|
9 | thr++;
|
10 | num >>= 1;
|
11 | }
|
12 | return num & ~0x1000;
|
13 | }
|
Hier wird die aktuelle Tastennummer ermittelt durch Übergabe des
eingelesenen ADC-Wertes. Innerhalb der while-Schleife wird dann der
ADC-Wert mit der Treshold-Liste verglichen. Soweit hab ich das
verstanden. Aber was kommt am Ende dabei raus? Was bedeutet
und was wird hier zurückgegeben?
Diese Zeilen innerhalb der main-Schleife verstehe ich auch nicht.
Wozu werden die Bits hier nach links geschiftet und wie kommt man auf
"8", "4" oder "0".
1 | PORTA = 0xFF;
|
2 | DDRA = 0xFF;
|
3 | for(;;){
|
4 | if( get_key_press( 1<<8 )) // "1"
|
5 | PORTA ^= 1<<0; // toggle
|
6 | if( get_key_press( 1<<4 )) // "2"
|
7 | PORTA ^= 1<<1;
|
8 | if( get_key_press( 1<<0 )) // "3"
|
9 | PORTA ^= 1<<2;
|
Das wären erstmal die wichtigsten Fragen. Wäre nett wenn mich dazu
jemand aufklären könnte.
Gruß,
guitero