highplay86 发表于 2012-7-28 12:32:38

求助!!!一个关于Wireless JoyStick 手柄的小问题...

本帖最后由 highplay86 于 2012-7-29 10:44 编辑

/***********************************************************************************************************************************************************
头文件包�?***********************************************************************************************************************************************************/

/***********************************************************************************************************************************************************
宏定�?***********************************************************************************************************************************************************/
#define joystick1_up_down 0
#define joystick1_left_right 1
#define joystick1_key 6
#define wheel_left 4

#define joystick2_up_down 2
#define joystick2_left_right 3
#define joystick2_key 7
#define wheel_right 5

/***********************************************************************************************************************************************************
变量定义
***********************************************************************************************************************************************************/
struct packet
{
    int _joystick1_up_down;
    int _joystick1_left_right;
    int _left_wheel;
    int _joystick2_up_down;
    int _joystick2_left_right;
    int _right_wheel;
    unsigned int _key_status;
}_packet;

int joystick_balance_value={0};//存储摇杆平衡位置�?
/***********************************************************************************************************************************************************
获得摇杆平衡位置�?***********************************************************************************************************************************************************/
void Get_Joystick_Balance_Value(void)
{
    unsigned char i;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(joystick1_up_down);
    joystick_balance_value/=20;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(joystick1_left_right);
    joystick_balance_value/=20;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(joystick2_up_down);
    joystick_balance_value/=20;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(joystick2_left_right);
    joystick_balance_value/=20;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(wheel_left);
    joystick_balance_value/=20;
   
    for(i=0;i<20;i++)
      joystick_balance_value+=analogRead(wheel_right);
    joystick_balance_value/=20;
}

/***********************************************************************************************************************************************************
获得摇杆当前�?***********************************************************************************************************************************************************/
void Get_Joystick_Present_Value(void)
{
    unsigned char KEY_temp;
    int temp;
    temp=(analogRead(joystick1_up_down)-joystick_balance_value)/20*20;
    _packet._joystick1_up_down=*((unsigned int *)&temp);
   
    temp=(analogRead(joystick1_left_right)-joystick_balance_value)/20*20;
    _packet._joystick1_left_right=*((unsigned int *)&temp);
   
    temp=(analogRead(joystick2_up_down)-joystick_balance_value)/20*20;
    _packet._joystick2_up_down=*((unsigned int *)&temp);
   
    temp=(analogRead(joystick2_left_right)-joystick_balance_value)/20*20;
    _packet._joystick2_left_right=*((unsigned int *)&temp);
   
    temp=(joystick_balance_value-analogRead(wheel_left))/20*20;
    _packet._left_wheel=*((unsigned int *)&temp);
   
    temp=(joystick_balance_value-analogRead(wheel_right))/20*20;
    _packet._right_wheel=*((unsigned int *)&temp);
   
    _packet._key_status=0;
    if(analogRead(joystick1_key)>(0x03ff-500))
      _packet._key_status+=1<<13;
    if(analogRead(joystick2_key)>(0x03ff-0x02ff))//有问�?      _packet._key_status+=1<<12;
   KEY_temp=PIND;
   KEY_temp>>=2;
   _packet._key_status+=KEY_temp<<6;
   
   KEY_temp=PINB;
   KEY_temp&=0x3f;
   _packet._key_status+=KEY_temp;
}

void setup()
{
    Serial.begin(57600);   
    DDRB&=0xc0;
    DDRD&=0x03;
}

void loop()
{
    unsigned char i;
    unsigned int ADC_temp;
    unsigned char KEY_temp;
    unsigned char XOR_check=0;
    delay(100);
    Get_Joystick_Balance_Value();
   
    while(1)
    {
      XOR_check=0x55^0xaa;
      Get_Joystick_Present_Value();
      for(i=0;i<14;i++)
      {
            //XOR_check^=*((unsigned char *)&_packet+i+1);
            XOR_check^=*((unsigned char *)&_packet+i);
      }
      Serial.print(0x55,BYTE);
      Serial.print(0xaa,BYTE);
      for(i=0;i<14;i++)
      {
            //Serial.print( *((unsigned char *)&_packet+i+1),BYTE);
            Serial.print( *((unsigned char *)&_packet+i),BYTE);
      }
      Serial.print(XOR_check,BYTE);
      delay(200);
    }
}最后 void loop()里面的那些0x55,0xaa啥的是什么意思?我知道是十六进制代码,但是翻译成二进制代码后有什么具体含义?...

弘毅 发表于 2012-7-28 13:09:05

比如0x55对应的二进制是1010101,这个会在datasheet里有通信相关的地方,写着。。这几个二进制数值。。代表操作哪个寄存器。。或者什么功能
页: [1]
查看完整版本: 求助!!!一个关于Wireless JoyStick 手柄的小问题...