|
楼主 |
发表于 2016-6-10 16:38:44
|
显示全部楼层
下面贴上代码,自己写的遥控程序:
#include <Wire.h>
int YPR[3];
int a=0,b=0,c=0,d=0,f=0;
unsigned char Re_buf[8],counter=0;
unsigned char sign=0;
void setup()
{ Serial1.begin(115200);
delay(2000);
Serial1.write(0XA5);
Serial1.write(0X52); //初始化GY25,连续输出模式
// set the data rate for the NewSoftSerial port
Serial.begin(9600); //
}
void loop() // run over and over again
{
if(sign)
{
sign=0;
if(Re_buf[0]==0xAA && Re_buf[7]==0x55) //检查帧头,帧尾
{
YPR[0]=(Re_buf[1]<<8|Re_buf[2])/100; //合成数据,去掉小数点后2位
YPR[1]=(Re_buf[3]<<8|Re_buf[4])/100;
YPR[2]=(Re_buf[5]<<8|Re_buf[6])/100;
}
}
if(YPR[0]<80&&YPR[0]>30&&abs(YPR[1])<30&&c==0)
{
Serial.write('O');
Serial.write('N');
Serial.write('C');
a=0;b=0;c=1;d=0;f=0;
}
else if(YPR[0]>-80&&YPR[0]<-30&&abs(YPR[1])<30&&d==0)
{
Serial.write('O');
Serial.write('N');
Serial.write('D');
a=0;b=0;c=0;d=1;f=0;
}
else if(YPR[1]>-80&&YPR[1]<-30&&abs(YPR[0])<30&&a==0)
{
Serial.write('O');
Serial.write('N');
Serial.write('A');
a=1;b=0;c=0;d=0;f=0;
}
else if(YPR[1]>30&&YPR[1]<80&&abs(YPR[0])<30&&b==0)
{
Serial.write('O');
Serial.write('N');
Serial.write('B');
a=0;b=1;c=0;d=0;f=0;
}
else
{
if(abs(YPR[0])<30&&abs(YPR[1])<30&&f==0)
{
Serial.write('O');
Serial.write('N');
Serial.write('F');
a=0;
b=0;
c=0;
d=0;
f=1;
}
}
}
void serialEvent1() {
while (Serial1.available()) {
Re_buf[counter]=(unsigned char)Serial1.read();
if(counter==0&&Re_buf[0]!=0xAA) return; // 检查帧头
counter++;
if(counter==8) //接收到数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
} |
|