求助各位大神 现在读取编码器时正、反出现误触,怎样才能优化好正反转,
uint8_t encode_A[4]={2,0,3,1};//Õýת״̬£¬ÏÂÒ»¸ö״̬
uint8_t encode_B[4]={1,3,0,2};//·´×ª×´Ì¬£¬ÏÂÒ»¸ö״̬
unsigned long encode_left=0;
unsigned long encode_right=0;
void Encode_right(void)
{
sta
tic u8 curstat=0;
static u8 flag;
flag=(encode_right<<1)|encode_left;
if(flag==curstat)
{
}
if(flag==encode_A[curstat])
{
encode_right++;
}
else
{
}
curstat=flag;
}
void Encode_left(void)
{
static u8 curstat=0;
static u8 flag;
flag=(encode_right<<1)|encode_left;
if(flag==curstat)
{
}
if(flag==encode_B[curstat])
{
encode_left--;
}
else
{
}
curstat=flag;
}
uint8_t Joystick_Buffer[13]={0};
uint8_t Joystick_Buffer_Last[13]={0};
void JoystickSend(void)
{
int i;
long int indata1=0;
long int indata2=0;
uint8_t PROcess[8];
u8 cod1_8=0;
u8 cod2_8=0;
u8 cod3_8=0;
u8 cod4_8=0;
u8 cod5_8=0;
u8 cod6_8=0;
u8 cod7_8=0;
u8 cod8_8=0;
GPIO_WriteBit(GPIOB,SH_LD165,Bit_RESET);//SH-0;
delay_ms(5);
GPIO_WriteBit(GPIOB,SH_LD165,Bit_SET);//SH-1;
delay_ms(5);
for(i=0;i<32;i++)
{
GPIO_WriteBit(GPIOB,CLK165,Bit_RESET);//CLK-0;
indata1=indata1<<1;
if(GPIO_ReadInputDataBit(GPIOB,DATA165)==1)
{
indata1=indata1+1;
// LED0=0;
delay_ms(300);
// LED0=1;
}
GPIO_WriteBit(GPIOB,CLK165,Bit_SET);//CLK-1;
}
for(i=32;i<64;i++)
{
GPIO_WriteBit(GPIOB,CLK165,Bit_RESET);//CLK-0;
indata2=indata2<<1;
if(GPIO_ReadInputDataBit(GPIOB,DATA165)==1)
{
indata2=indata2+1;
// LED0=0;
delay_ms(300);
// LED0=1;
}
GPIO_WriteBit(GPIOB,CLK165,Bit_SET);//CLK-1;
}
cod1_8=((indata1&0xff000000)>>24);
cod2_8=((indata1&0xff0000)>>16);
cod3_8=((indata1&0xff00)>>8);
cod4_8=indata1&0xff;
cod5_8=((indata2&0xff000000)>>24);
cod6_8=((indata2&0xff0000)>>16);
cod7_8=((indata2&0xff00)>>8);
cod8_8=indata2&0xff;
Joystick_Buffer[5] = cod1_8;
Joystick_Buffer[6] = cod2_8;
Joystick_Buffer[7] = cod3_8;
Joystick_Buffer[8] = cod4_8;
Joystick_Buffer[9] = cod5_8;
Joystick_Buffer[10] = cod6_8;
Joystick_Buffer[11] = cod7_8;
Joystick_Buffer[12] = cod8_8;
PROcess[0]=Joystick_Buffer[5]^Joystick_Buffer_Last[5];
Joystick_Buffer_Last[5]=Joystick_Buffer[5];
switch(PROcess[0])
{
case 0x01:Encode_right();break;
case 0x02:Encode_left();break;
case 0x04:LED0=0;delay_ms(10);break;
case 0x08:LED0=0;delay_ms(10);break;
case 0x10:LED0=0;delay_ms(10);break;
case 0x20:LED0=0;delay_ms(10);break;
case 0x40:LED0=0;delay_ms(10);break;
case 0x80:LED0=0;delay_ms(10); break;
default :LED0=1;break;
}
USB_SIL_Write(EP1_IN, Joystick_Buffer, 13);
SetEPTxValid(ENDP1);
delay_ms(20);
}uint8_t encode_A[4]={2,0,3,1};//Õýת״̬£¬ÏÂÒ»¸ö״̬
uint8_t encode_B[4]={1,3,0,2};//·´×ª×´Ì¬£¬ÏÂÒ»¸ö״̬
unsigned long encode_left=0;
unsigned long encode_right=0;
void Encode_right(void)
{
static u8 curstat=0;
static u8 flag;
flag=(encode_right<<1)|encode_left;
if(flag==curstat)
{
}
if(flag==encode_A[curstat])
{
encode_right++;
}
else
{
}
curstat=flag;
}
void Encode_left(void)
{
static u8 curstat=0;
static u8 flag;
flag=(encode_right<<1)|encode_left;
if(flag==curstat)
{
}
if(flag==encode_B[curstat])
{
encode_left--;
}
else
{
}
curstat=flag;
}
uint8_t Joystick_Buffer[13]={0};
uint8_t Joystick_Buffer_Last[13]={0};
void JoystickSend(void)
{
int i;
long int indata1=0;
long int indata2=0;
uint8_t PROcess[8];
u8 cod1_8=0;
u8 cod2_8=0;
u8 cod3_8=0;
u8 cod4_8=0;
u8 cod5_8=0;
u8 cod6_8=0;
u8 cod7_8=0;
u8 cod8_8=0;
GPIO_WriteBit(GPIOB,SH_LD165,Bit_RESET);//SH-0;
delay_ms(5);
GPIO_WriteBit(GPIOB,SH_LD165,Bit_SET);//SH-1;
delay_ms(5);
for(i=0;i<32;i++)
{
GPIO_WriteBit(GPIOB,CLK165,Bit_RESET);//CLK-0;
indata1=indata1<<1;
if(GPIO_ReadInputDataBit(GPIOB,DATA165)==1)
{
indata1=indata1+1;
// LED0=0;
delay_ms(300);
// LED0=1;
}
GPIO_WriteBit(GPIOB,CLK165,Bit_SET);//CLK-1;
}
for(i=32;i<64;i++)
{
GPIO_WriteBit(GPIOB,CLK165,Bit_RESET);//CLK-0;
indata2=indata2<<1;
if(GPIO_ReadInputDataBit(GPIOB,DATA165)==1)
{
indata2=indata2+1;
// LED0=0;
delay_ms(300);
// LED0=1;
}
GPIO_WriteBit(GPIOB,CLK165,Bit_SET);//CLK-1;
}
cod1_8=((indata1&0xff000000)>>24);
cod2_8=((indata1&0xff0000)>>16);
cod3_8=((indata1&0xff00)>>8);
cod4_8=indata1&0xff;
cod5_8=((indata2&0xff000000)>>24);
cod6_8=((indata2&0xff0000)>>16);
cod7_8=((indata2&0xff00)>>8);
cod8_8=indata2&0xff;
Joystick_Buffer[5] = cod1_8;
Joystick_Buffer[6] = cod2_8;
Joystick_Buffer[7] = cod3_8;
Joystick_Buffer[8] = cod4_8;
Joystick_Buffer[9] = cod5_8;
Joystick_Buffer[10] = cod6_8;
Joystick_Buffer[11] = cod7_8;
Joystick_Buffer[12] = cod8_8;
PROcess[0]=Joystick_Buffer[5]^Joystick_Buffer_Last[5];
Joystick_Buffer_Last[5]=Joystick_Buffer[5];
switch(PROcess[0])
{
case 0x01:Encode_right();break;
case 0x02:Encode_left();break;
case 0x04:LED0=0;delay_ms(10);break;
case 0x08:LED0=0;delay_ms(10);break;
case 0x10:LED0=0;delay_ms(10);break;
case 0x20:LED0=0;delay_ms(10);break;
case 0x40:LED0=0;delay_ms(10);break;
case 0x80:LED0=0;delay_ms(10); break;
default :LED0=1;break;
}
USB_SIL_Write(EP1_IN, Joystick_Buffer, 13);
SetEPTxValid(ENDP1);
delay_ms(20);
}
一周热门 更多>