本帖最后由 洋芋。煮不跁 于 2013-11-15 21:55 编辑
经过半天的搭建,终于成功将UNO和mpu6050搭建好了
用了示范代码测试,串口监视器上的数据比较正常。
现在想通过6050数据的值间接来控制 舵机的运动
才开始学习Arduino,试着改了下原代码,但是失败了。
比如说6050中的一个角度(angle[0])大于30度时,舵机转过60度,该怎么写呢?
我自己改法是:
1)在开头添加Servo库,然后servo servo1;
2)在void setup 里添加 插脚值,舵机初始值;
3)在void loop 里最后添加控制舵机的指令
实践证明这是一种错误的方法
小白请教大家这个代码应该怎么改写
才能正确用6050里面值的变化来驱动舵机的不同运动
就如【当6050中angle[0]的值大于30时 舵机转过60度】
灰常感谢各位前辈的指导啊
附没有改动的原始代码如下
- unsigned char Re_buf[11],counter=0;
- unsigned char sign=0;
- float a[3],w[3],angle[3],T;
- void setup() {
- // initialize serial:
- Serial.begin(115200);
- }
-
- void loop() {
- if(sign)
- {
- sign=0;
- if(Re_buf[0]==0x55) //检查帧头
- {
- switch(Re_buf [1])
- {
- case 0x51:
- a[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*16;
- a[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*16;
- a[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*16;
- T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
- break;
- case 0x52:
- w[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*2000;
- w[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*2000;
- w[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*2000;
- T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
- break;
- case 0x53:
- angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180;
- angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180;
- angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180;
- T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
- Serial.print("a:");
- Serial.print(a[0]);Serial.print(" ");
- Serial.print(a[1]);Serial.print(" ");
- Serial.print(a[2]);Serial.print(" ");
- Serial.print("w:");
- Serial.print(w[0]);Serial.print(" ");
- Serial.print(w[1]);Serial.print(" ");
- Serial.print(a[2]);Serial.print(" ");
- Serial.print("angle:");
- Serial.print(angle[0]);Serial.print(" ");
- Serial.print(angle[1]);Serial.print(" ");
- Serial.print(angle[2]);Serial.print(" ");
- Serial.print("T:");
- Serial.println(T);
- break;
- }
- }
- }
- }
-
- void serialEvent() {
- while (Serial.available()) {
-
- //char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code
-
- Re_buf[counter]=(unsigned char)Serial.read();
- if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头
- counter++;
- if(counter==11) //接收到11个数据
- {
- counter=0; //重新赋值,准备下一帧数据的接收
- sign=1;
- }
-
- }
- }
复制代码
|