0 oder 1 in eine Variable

OP #3741867
Lesenswert?

Moin Leute,
Folgendes:
Ich habe einen 165er an meinem ATmega32A, Am D0 & D1 vom165er hängt ein 
Drehencoder.
Das auselesen der Daten funktioniert auch ohne Probleme.
Nun aber zu meiner eigentlichen Frage, um die Drehencoder auszulesen 
brauche ich in meiner Funktion 2variablen die entweder 0 oder 1 sind, je 
nach aktuellen status vom drehencoders halt. Nun dachte ich mir ok kein 
Ding, und habs folgendermaßen ausprobiert:
1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1));
4
  test2 = (v165 & _BV(2));
5
}

v165 ist meine Variable in der mein Binärcode vom 165er gespeichert ist.

So ansich funktioniert das ganze auch, jedoch ist in test eine 2 wenn 
der pin an ist und in test2 steht eine 4.
Eigentlich ja auch recht klar...
Aber wie umgehe ich das?
ich möchte halt wirklich nur eine null oder eine eins drin stehen haben.

Oder geht das ganze auch noch einfacher?

Ich freu mich auf eure Lösungsvorschläge.

Grüße
Martin
Gast #3741887
Lesenswert?

Martin Kathke schrieb:
> Moin Leute,
> Folgendes:
> Ich habe einen 165er an meinem ATmega32A, Am D0 & D1 vom165er hängt ein
> Drehencoder.

Und was ist "ein 165er"? Eine Motorradklasse?

> void get_Encoder_data(int v165)
> {
>   test = (v165 & _BV(1));
>   test2 = (v165 & _BV(2));
> }
>
> v165 ist meine Variable in der mein Binärcode vom 165er gespeichert ist.
>
> So ansich funktioniert das ganze auch, jedoch ist in test eine 2 wenn
> der pin an ist und in test2 steht eine 4.

> ich möchte halt wirklich nur eine null oder eine eins drin stehen haben.
1
   test = v165 & _BV(1) ? 1 : 0;
2
   test2 = v165 & _BV(2) ? 1 : 0;
#3741889
Lesenswert?

1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1))>>1;
4
  test2 = (v165 & _BV(2))>>2;
5
}
1
void get_Encoder_data(int v165)
2
{
3
  test = (v165 & _BV(1))?1:0;
4
  test2 = (v165 & _BV(2))?1:0;
5
}
1
void get_Encoder_data(int v165)
2
{
3
  test = !!(v165 & _BV(1));
4
  test2 = !!(v165 & _BV(2));
5
}

Viele Möglichkeiten..

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