Forum: Mikrocontroller und Digitale Elektronik Invertierter Taster - Wie Code anpassen?


von Neumarkter (Gast)


Lesenswert?

Hey zusammen,

ich habe ein kleines Programm und das hat auch immer gut gelaufen, jetzt 
habe ich aber neue Taster bekommen und die funktionieren scheinbar 
invertiert zu den alten. Deshalb muss ich den Code anpassen.

Alter Code (hat mit den alten Taster funktioniert)
1
if ((PIND & 0x03) == 0x03) {
2
        //Beide Taster
3
        //mach foo1
4
    }
5
    else if ( PIND & (1<<PIND0) ) {
6
        //Rechter Taster
7
        //mach foo2
8
    }
9
    else if ( PIND & (1<<PIND1) ) {
10
        //Linker Taster
11
        //mach foo3
12
    }
13
    else
14
        //Kein Taster wurde gedrückt
15
        //mach foo4

Jetzt habe ich mir gedacht ich invertiere einfach alle Ausdrücke, aber 
das funktioniert leider nicht wie vorher:
1
if (!((PIND & 0x03) == 0x03)) {
2
        //Beide Taster
3
        //mach foo1
4
    }
5
    else if (!( PIND & (1<<PIND0) )) {
6
        //Rechter Taster
7
        //mach foo2
8
    }
9
    else if (!( PIND & (1<<PIND1) )) {
10
        //Linker Taster
11
        //mach foo3
12
    }
13
    else
14
        //Kein Taster wurde gedrückt
15
        //mach foo4

Wie müsste ich das korrekterweise abfragen?

Danke euch!! :-)

von Andreas R. (andreasr)


Lesenswert?

Ich würde den negierten Status in eine Hilfsvariable einlesen und diese 
dann wie gehabt auswerten.
Etwa so:
1
uint8_t PIND_neg = ~PIND;
2
if ((PIND_neg & 0x03) == 0x03) {
3
...
4
else if ( PIND_neg & (1<<PIND0) ) {
5
...
6
else if ( PIND_neg & (1<<PIND1) ) {

von Thomas E. (picalic)


Lesenswert?

Servus,

der Fehler liegt in der Abfrage für das Drücken beider Tasten 
gleichzeitig!
Dort müsste es lauten:
1
> if ((PIND & 0x03) == 0) {
2
>         //Beide Taster
3
>         //mach foo1
4
>     }
5
>     else if...

Gruß,

Thomas

von Neumarkter (Gast)


Lesenswert?

Ok, danke euch zwei! Ich probier das heute abend mal aus.

@Thomas: wären dann für die einzelnen Taster die Abfrage
1
( PIND & (0<<PIND0)
 korrekt?

von Martin (Gast)


Lesenswert?

Weißt du was das << macht?

Ich stehe nicht so auf copy&past Code der nicht verstanden wird.

von Thomas E. (picalic)


Lesenswert?

Neumarkter schrieb:
> Ok, danke euch zwei! Ich probier das heute abend mal aus.
>
> @Thomas: wären dann für die einzelnen Taster die Abfrage
1
( PIND & 
2
> (0<<PIND0)
 korrekt?

Nein, "0<<PIND0" gibt immer 0, statt das BIT für den jeweiligen Taster 
auszumaskieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.