无线头追
前段时间就准备做个无线头追想集成到我的遥控汽车上。昨天模块刚到齐,今晚开工了。之前只有一个nano和GY-85姿态传感器,计算姿态的代码已有现成的,我拿来简单修改了一下,把姿态数据通过串口发送出去格式是%数据;数据 数据全部使用的字符串方式发送的。接收端通过串口接收之后解析数据,转化成整形数据,然后控制舵机转动带动摄像头。先上几张图吧。目前摄像头和图传还没买到,准备先把控制部分做出来再说。
//接收端代码
#include <Servo.h>
#define SERIAL_BAUD 9600
Servo servoPan;
Servo servotill;
char data;
int index,panAngle,tiltAngle;
char *p;
void setup() {
// put your setup code here, to run once:
Serial.begin(SERIAL_BAUD);
servoPan.attach(9);
servotill.attach(10);
}
void loop() {
// put your main code here, to run repeatedly:
memset(data,0,10);
index=0;
p=NULL;
while(Serial.available())
{
data=Serial.read();
delay(10);
}
if(data=='%')
{
p=strtok(data+1,";");
if(p==NULL)
return;
panAngle = atoi(p);
p=strtok(NULL,";");
if(p==NULL)
return;
tiltAngle = atoi(p);
servoPan.write((int)panAngle);
servotill.write((int)tiltAngle);
}
}//发送端代码
void loop() {
// Check button
if (digitalRead(BUTTON_INPUT)==0) {
resetValues = 1;
}
// if "read_sensors" flag is set high, read sensors and update
if (read_sensors == 1) {
updateSensors();
gyroCalc();
accCalc();
magCalc();
filter();
}
Serial.print("%");
itoa((int)panAngle,tmp,10);
Serial.print(tmp);
Serial.print(";");
itoa((int)tiltAngle,tmp,10);
Serial.println(tmp);
// servoPan.write((int)panAngle);
//servotill.write((int)tiltAngle);
}其中姿态计算的代码我没上传,论坛中相关代码多如牛毛。
中间传输部分我买了一对433无线传输模块,串口的,只管发送和读取即可,对于我们来说相当于用串口线连接起来的。
后续工作待续。。。 沙发自己坐。
接收端代码中有个漏洞
while(Serial.available())
{
data=Serial.read();
delay(10);
}
如果接收的数据大于10个字节就会崩溃,最好是加个判断,如果index大于9就跳出循环,或者加个结束符遇到结束符就跳出循环 先请教一下,什么叫头追? 就是云台追踪头部动作,用头部动作控制云台,用于第一视角遥控。 @leicheng哪有13个字符?角度最大也就占用3个字符 %180;180 这就是一个数据,加上\0 也只有9个字符啊。
你说的NULL是指字符串结束标志吗?串口发送数据的时候不会发送'\0'这个字符的 @leicheng0没有被传输,0的概念只在存储字符串的内存中存在,传输的时候0是不会被传输的,即使有负号也不会超过10个字符的。
举个例子char tmp={'1','2','3','\0','4','5'};
这个tmp,如果使用Serial.print(tmp); 接收的时候只会收到“123”,因为遇到0就结束了不会继续发送了。 本帖最后由 yiyp77 于 2014-4-12 19:47 编辑
顶LZ。
顺道发个国外的外源头追:
DIY_Headtracker航模头追中文说明书
http://pan.baidu.com/s/1o6nZnnG 请问转角,你的433M模块从照片上看,好像只连接了4根线,是模块自带TX,RX接口,还是采用SPI接口的? 程序里直接用serial.print()就能够发送和接收了,有对应的库支持? leicheng 发表于 2014-4-12 20:26 static/image/common/back.gif
请问转角,你的433M模块从照片上看,好像只连接了4根线,是模块自带TX,RX接口,还是采用SPI接口的? 程序里 ...
模块自带tx、rx,程序直接使用串口的发送就行,这个无线433模块对我们来说是透明的 yiyp77 发表于 2014-4-12 19:44 static/image/common/back.gif
顶LZ。
顺道发个国外的外源头追:
我看过这个,我的姿态计算的代码就是用的他的。他是用遥控传过数据去,我简单的改了一下,就不需要使用遥控器了 转角 发表于 2014-4-12 21:14 static/image/common/back.gif
我看过这个,我的姿态计算的代码就是用的他的。他是用遥控传过数据去,我简单的改了一下,就不需要使用遥 ...
做好了吗?期待更新~ 留个记号,最近正好用到。楼主有联系方式吗?
页:
[1]