Drehgeber mit Switch (Erkennung Tastendruck)

OP #1544082
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren