求助!!!一个关于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啥的是什么意思?我知道是十六进制代码,但是翻译成二进制代码后有什么具体含义?... 比如0x55对应的二进制是1010101,这个会在datasheet里有通信相关的地方,写着。。这几个二进制数值。。代表操作哪个寄存器。。或者什么功能
页:
[1]