Das Coding ist immer
00 - 10 - 11 - 01
ausgehend von einem Zustand kann als nächstes immer nur der Code rechts oder Links davon als nächstes kommen. Je nach dem ob man rechts oder links rum dreht.
Ich stell den Code, obwohl in C, trotzdem mal ein...
Im Prinzip dürfte es mit Bascom ja genauso gehen.
Code:
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Rotary Encoder PD2 + PD3
uc_rot=(PIND&0b00001100);
if(uc_mode>100) //Hab das Modus abhängig gemacht
{
// Diese 4 Ursprungszustände sind möglich
if(uc_oldrot==0b00000000)
{
if(uc_rot==0b00001000){ui_sendbuffer[uc_position]-=2;}; //Die Variable wird runter gezählt
if(uc_rot==0b00000100){ui_sendbuffer[uc_position]+=2;}; //Die Variable wird hoch gezählt
}
if(uc_oldrot==0b00001000)
{
if(uc_rot==0b00001100){ui_sendbuffer[uc_position]-=2;};
if(uc_rot==0b00000000){ui_sendbuffer[uc_position]+=2;};
}
if(uc_oldrot==0b00001100)
{
if(uc_rot==0b00000100){ui_sendbuffer[uc_position]-=2;};
if(uc_rot==0b00001000){ui_sendbuffer[uc_position]+=2;};
}
if(uc_oldrot==0b00000100)
{
if(uc_rot==0b00000000){ui_sendbuffer[uc_position]-=2;};
if(uc_rot==0b00001100){ui_sendbuffer[uc_position]+=2;};
}
}
uc_oldrot=uc_rot; //Der aktuelle Zustand wird für den nächsten Durchlauf abgespeichert
}
Lesezeichen