极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15206|回复: 1

机械手动作组编号转换成了角度。。。程序复杂化,求教啊

[复制链接]
发表于 2011-12-14 17:22:49 | 显示全部楼层 |阅读模式
本帖最后由 咸鱼geek 于 2011-12-14 17:37 编辑

动作组就是六个舵机中的其中几个轮流步进5度来实现,看着像同时运行一样。。。
se,v分别是舵机初始值和待输入的舵机值。。。a,b数组就是舵机执行动作必须改变的舵机角度数组
  1. #include <Servo.h>
  2. //定义变量
  3. Servo servo[6];
  4. int se[6]={80,110,80,90,100,130};//舵机初始化数组
  5. int i=0,t=1000;//t为延时

  6. String data="";
  7. int mark=0,v[6]={80,110,80,90,100,130}, over=0;
  8. boolean tag[6]={1,1,1,1,1,1};//初始化标志位数组,不相等

  9. //舵机初始化
  10. void datadeal()
  11. {
  12. int j = 0;
  13. while(Serial.available() > 0)
  14. {
  15.   delay(20);
  16.   data+=char(Serial.read());
  17.   mark=1;
  18. }
  19. if(mark==1)
  20. {
  21. Serial.println(data);
  22. Serial.println(data.length());
  23.   int A[6]={0};
  24. for(int i = 0; i < data.length() ; i++)
  25. {

  26.    if(data[i] == ',')
  27.       {
  28.         j++;
  29.       }
  30.        else
  31.      {
  32.      A[j] = A[j] * 10 + (data[i] - '0');
  33.      v[j] =A[j];
  34.   // v[j] =data[i]*10+(data[i] - '0');
  35.      }
  36.   }
  37. data=String("");
  38. for(int i = 0; i < 6; i++)
  39.     {
  40.       Serial.print("Servo");
  41.       Serial.print(i);
  42.       Serial.print(" = ");
  43.        Serial.println(v[i]);

  44.     }
  45.     mark = 0;
  46.     over=1;
  47. }
  48. }


  49. //单个舵机控制函数
  50. void fun(int a,int b,int i)
  51. {
  52. if(a!=b)
  53. {
  54.   if(a<b)
  55.   {
  56.   while(a<b)
  57.        {
  58.          a+=5;
  59.      servo[i].write(a);
  60.      se[i]=a;
  61.      Serial.println(a);
  62.      delay(t);
  63.    
  64.        }
  65.   }
  66. else if(a>b)
  67.   {
  68.    while(a>b) {
  69.        a-=5;
  70.        servo[i].write(a);
  71.        se[i]=a;
  72.      Serial.println(a);
  73.      delay(t);
  74.    
  75.      }
  76.   }
  77. }

  78. else
  79. return;
  80. }
  81. //舵机动作函数
  82. void Action(int a,int b,int i)
  83. {
  84.   if(a<b)
  85.   {
  86.          a+=5;
  87.      servo[i].write(a);
  88.      se[i]=a;
  89.      Serial.println(a);
  90.      delay(t);      
  91.   }
  92. else if(a>b)
  93.   {
  94.        a-=5;
  95.        servo[i].write(a);
  96.        se[i]=a;
  97.      Serial.println(a);
  98.      delay(t);     
  99.    }
  100. }

  101. void setup()
  102. {
  103.   servo[0].attach(22,380,1200);
  104.   servo[1].attach(23,380,1200);
  105.   servo[2].attach(24,380,1200);
  106.   servo[3].attach(25,380,1200);
  107.   servo[4].attach(26,380,1200);
  108.   servo[5].attach(27,380,1200);
  109.   for(i=0;i<6;i++)
  110.   servo[i].write(se[i]);
  111.     delay(2000);
  112.     Serial.begin(9600);//设置波特率
  113.     Serial.println("Ready");
  114. }
  115. void loop()
  116. {
  117. datadeal();
  118. //单个舵机控制函数
  119. if(over==1)
  120. {

  121. //boolean tag[6]={1,1,1,1,1,1};//初始化标志位数组,不相等
  122. //判断两个数组元素是否相等
  123. for(int i=0;i<6;i++)
  124. {
  125. //相等则置标志位为0
  126. if(se[i]==v[i])//对应元素相等则tag=0
  127. tag[i]=0;

  128. }
  129. int sum=0;
  130. for(int j=0;j<6;j++)
  131. sum+=tag[j];
  132. if(sum>0)//当tag的和大于0时,有对应元素需改变,调用循环
  133. {
  134. for(int num=0;num<6;num++)
  135. {
  136.   Serial.println(v[num]);
  137. fun(se[num],v[num],num);//函数调用6次
  138. tag[num]=0;
  139. }
  140. }
  141. //}
  142. over=0;
  143. //舵机连续动作组控制
  144. while(Serial.available() > 0)
  145. {
  146.   delay(20);
  147.   char action=Serial.read();

  148. int a[6]={80,175,80,90,100,130};//下降
  149. switch(action)
  150. {
  151. case 'a'://下降

  152. while(sum>0)//当tag的和大于0时,有对应元素需改变,调用循环
  153. {
  154. for(int num=0;num<6;num++)
  155. {
  156.   Serial.println(v[num]);
  157.   delay (100);
  158. Action(se[num],a[num],num);//函数调用6次
  159. //tag[num]=0;
  160. delay(50);
  161. }
  162. for(int i=0;i<6;i++)
  163. {
  164. //相等则置标志位为0
  165. if(se[i]==v[i])//对应元素相等则tag=0
  166. tag[i]=0;
  167. }
  168. int sum=0;
  169. for(int j=0;j<6;j++)
  170. sum+=tag[j];
  171. if(sum==0)
  172. break;
  173. }
  174. break;
  175. case '2':
  176. break;
  177. //Action();
  178. }
  179. }
  180. }
  181. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2011-12-14 17:41:54 | 显示全部楼层
不懂,帮顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 01:18 , Processed in 0.041514 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表