Nachdem mein Drehgeber nun auch richtig dreht, wollte ich den
eingebauten Taster auswerten.
Für den Drehgeber benutze ich die Funktionen von PeDa. Nun war meine
Idee, folgende Zeilen zu ergänzen:
1 | ISR( TIMER0_COMPA_vect ) // 1ms for manual movement
|
2 | {
|
3 | int8_t new, diff;
|
4 | static int8_t last;
|
5 |
|
6 | new = 0;
|
7 | if( PHASE_A )
|
8 | new = 3;
|
9 | if( PHASE_B )
|
10 | new ^= 1; // convert gray to binary
|
11 | diff = last - new; // difference last - new
|
12 | if( diff & 1 ){ // bit 0 = value (1)
|
13 | last = new; // store new as next last
|
14 | enc_delta += (diff & 2) - 1; // bit 1 = direction (+/-)
|
15 | }
|
16 | if (!ENC_SWITCH) // NEU ****
|
17 | { enc_switch = 1; // ENC_SWITCH ist PA3, active low
|
18 | }
|
19 | }
|
und im Hauptprogramm:
1 | while(1)
|
2 | { val += encode_read2();
|
3 | if (val_neu != val)
|
4 | {
|
5 | sprintf(buffer,"%i\n", val);
|
6 | uart_puts(buffer); _delay_ms(30);
|
7 |
|
8 | val_neu=val;
|
9 | enc_switch=0;
|
10 | }
|
11 | if (enc_switch)
|
12 | { enc_switch=0;
|
13 | uart_puts("Keypressed\n");
|
14 | _delay_ms(200);
|
15 | }
|
16 | }
|
Als Ausgabe wird mir immer zweimal "Keypressed" angezeigt, das verstehe
ich nicht. Eine längere Wartezeit bringt auch keine Besserung.
Hat jemand eine Idee, wie es funktionieren könnte? Besten Dank im
Voraus!