找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2969|回复: 1
打印 上一主题 下一主题
收起左侧

Arduino红外传感器控制机械臂程序 程序有错误请大家来讨论一下

[复制链接]
跳转到指定楼层
楼主
用红外避障传感器控制机械臂抓取物体。
当红外避障传感器检测到物体时,输入低电平。然后调用函数机械臂抓取物体。
但是程序有错误,找了半天也没找出来。请大家来讨论一下。

Arduino源程序如下
  1. #include <Servo.h>                //使用servo库

  2. const int Aarm = 0;
  3. const int Barm = 1;
  4. const int Carm = 2;
  5. const int Darm = 3;
  6. const int Earm = 4;
  7. const int Farm = 5;

  8. const int maxServos = 6;
  9. Servo servos[maxServos];

  10. int DSD = 15; //Default Servo Delay (默认电机运动延迟时间)
  11.               //此变量用于控制电机运行速度.增大此变量数值将
  12.               //降低电机运行速度从而控制机械臂动作速度。
  13. int val_left=0;
  14. int val_centre=0;
  15. int val_Right=0;

  16. void setup(){
  17.   pinMode(A0,INPUT);
  18.   pinMode(A1,INPUT);
  19.   pinMode(A2,INPUT);

  20.   for(int i=0;i<=5;i++){
  21.     servos[i].attach(i);
  22.     servos[i].write(90);
  23.     delay(10);
  24.   }
  25. }


  26. void loop(){
  27.   val_left = digitalRead(A0);
  28.   val_centre= digitalRead(A0);
  29.   val_Right = digitalRead(A0);

  30.   if (val_left == LOW) {       //例如:b67三个字节
  31.     servos[0].write();   //底盘向左旋转
  32.     Servo_Stretch();    //舵机抓取物体
  33.     servos[0].write();   //舵机转回中位
  34.     armIniPos();      //舵机收缩
  35.   }
  36.   else if(val_centre == LOW){
  37.      Servo_Stretch();     //舵机抓取物体
  38.      armIniPos();      //舵机收缩
  39.     }
  40.   else if(val_Right == LOW){
  41.      servos[0].write();   //底盘向左旋转
  42.      Servo_Stretch();    //舵机抓取物体
  43.      servos[0].write();   //舵机转回中位
  44.      armIniPos();      //舵机收缩
  45.       }
  46. }

  47. void armIniPos(){     //舵机收缩回起始位置
  48.   int robotIniPos[5][3] = {    //每个舵机角度不同,需要修改
  49.     {Barm, 90, DSD},
  50.     {Carm, 90, DSD},
  51.     {Darm, 90, DSD},
  52.     {Earm, 90, DSD},
  53.     {Farm, 90, DSD}
  54.   };   
  55.    for (int i = 0; i < 5; i++){
  56.     servoCmd(robotIniPos[i][0], robotIniPos[i][1], robotIniPos[i][2]);   //舵机编号,目标角度,延迟.此函数控制舵机的速度

  57.   }
  58. }

  59. void servoCmd(int j,int toPos, int servoDelay){   //舵机编号,目标角度,延迟.此函数控制舵机的速度

  60.   int fromPos;
  61.   fromPos = servos(j).read();
  62.     if (fromPos <= toPos){  //如果“起始角度值”小于“目标角度值”
  63.     for (int i=fromPos; i<=toPos; i++){
  64.       servos(j).write(i);
  65.       delay (servoDelay);
  66.     }
  67.   }  else { //否则“起始角度值”大于“目标角度值”
  68.     for (int i=fromPos; i>=toPos; i--){
  69.       servos(j).write(i);
  70.       delay (servoDelay);
  71.     }
  72.     }
  73.   }

  74. void Servo_Stretch(){
  75.   int diceMove1[5][3] = {
  76.     {Barm, 30, DSD},
  77.     {Carm, 90, DSD},
  78.     {Darm, 43, DSD},
  79.     {Earm, 126, DSD},
  80.     {Farm, 90, DSD}   
  81.   };
  82.   for (int i = 0; i < 5; i++){
  83.     servoCmd(diceMove1[i][0], diceMove1[i][1], diceMove1[i][2]);
  84.     delay(200);
  85.   }   
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:309562 发表于 2018-4-16 20:45 | 只看该作者
C:\Users\Administrator\Desktop
红框中的分号“;”应该去掉,大括号后不需要“;”
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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