PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion zum auslesen eines optischen Drehencoders



Janiiix3
25.09.2014, 17:14
Hallo Freunde,

ich habe mir eine kleine Funktion geschrieben, die mir meinen Drehencoder auswertet.
Klappt bis hier her auch super. Leider habe ich direkt den Wert "1" aus dem LCD Display stehen.
Ich hätte aber gerne als Startwert die "0"... Habe ich was falsch gemacht ?



uint8_t read_Encoder(uint8_t PinPORT, uint8_t BinaryNumber)
{

static uint8_t Enc_State_new = 0, Enc_State_old = 0, Enc_Counter = 0;

Enc_State_new = (PinPORT & BinaryNumber);

if ((Enc_State_new != Enc_State_old))

{

if (Enc_State_new == 0x01)
{

if (Enc_State_old == 0x00)
{
Enc_Counter++;
}
else
{

if ((Enc_Counter & 0xFE))
{
Enc_Counter--;
}


}
}

if (Enc_State_new == 0x03)
{

if (Enc_State_old == 0x01)
{
Enc_Counter++;
}
else
{

if ((Enc_Counter & 0xFE))
{
Enc_Counter--;
}
}

}

if (Enc_State_new == 0x02)
{
if (Enc_State_old == 0x03)
{
Enc_Counter++;
}
else
{

if ((Enc_Counter & 0xFE))
{
Enc_Counter--;
}
}

}

if (Enc_State_new == 0x00)
{
if (Enc_State_old == 0x02)
{
Enc_Counter++;
}
else
{

if ((Enc_Counter & 0xFE))
{
Enc_Counter--;
}
}

}

}

Enc_State_old = Enc_State_new;


return(Enc_Counter);


}

BastelWastel
25.09.2014, 17:55
Ich haette jetzt gesagt wenn dein Programm startet direkt erst einmal Enc_State_old mit dem aktuellem Wert fuettern..
Dann sollte deine Encoder Position auch erst mal 0 bleiben bis er wirklich bewegt wird.

Gruss, Andreas