А я так это делал

Author: Штирлиц [322 views] 2013-10-04 21:53:26
In response to: Re: устранитель дребезга для ротари енкодера by A. Fig Lee, 2013-10-04 19:50:55



void RotaryStepped1(void)
{
static uint8 state = 0;
uint8 res, tp;
res = (ROT_COS | (ROT_SIN << 1));

switch(state)
{
default:
state = 0; // SIN COS
case 0: // 0 0 0
if(res == 1)
{
state = res;
RotState1++;
}
else
if(res == 2)
{
state = res;
RotState1--;
}
RotTimeout = 10; // 100 mS
break;

case 1: // 0 1 1
if(res == 3)
{
state = res;
RotState1++;
}
else
if(res == 0)
{
state = res;
RotState1--;
}
RotTimeout = 10; // 100 mS
break;

case 3: // 1 1 3
if(res == 2)
{
state = res;
RotState1++;
}
else
if(res == 1)
{
state = res;
RotState1--;
}
break;

case 2: // 1 0 2
if(res == 0)
{
state = res;
RotState1++;
}
else
if(res == 3)
{
state = res;
RotState1--;
}
RotTimeout = 10; // 100 mS
break;
}
}

Reply
|
Reply to sender (private) |
Synchronize | Thread