前段时间就准备做个无线头追想集成到我的遥控汽车上。昨天模块刚到齐,今晚开工了。之前只有一个nano和GY-85姿态传感器,计算姿态的代码已有现成的,我拿来简单修改了一下,把姿态数据通过串口发送出去格式是%数据;数据 数据全部使用的字符串方式发送的。接收端通过串口接收之后解析数据,转化成整形数据,然后控制舵机转动带动摄像头。
先上几张图吧。目前摄像头和图传还没买到,准备先把控制部分做出来再说。
- //接收端代码
- #include <Servo.h>
- #define SERIAL_BAUD 9600
- Servo servoPan;
- Servo servotill;
- char data[10];
- 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[index++]=Serial.read();
- delay(10);
- }
-
- if(data[0]=='%')
- {
-
- 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无线传输模块,串口的,只管发送和读取即可,对于我们来说相当于用串口线连接起来的。
后续工作待续。。。 |