找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3293|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Arduino紅外傳感器控制機(jī)械臂程序 程序有錯誤請大家來討論一下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:226815 發(fā)表于 2018-4-13 14:22 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用紅外避障傳感器控制機(jī)械臂抓取物體。
當(dāng)紅外避障傳感器檢測到物體時,輸入低電平。然后調(diào)用函數(shù)機(jī)械臂抓取物體。
但是程序有錯誤,找了半天也沒找出來。請大家來討論一下。

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 (默認(rèn)電機(jī)運動延遲時間)
  11.               //此變量用于控制電機(jī)運行速度.增大此變量數(shù)值將
  12.               //降低電機(jī)運行速度從而控制機(jī)械臂動作速度。
  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三個字節(jié)
  31.     servos[0].write();   //底盤向左旋轉(zhuǎn)
  32.     Servo_Stretch();    //舵機(jī)抓取物體
  33.     servos[0].write();   //舵機(jī)轉(zhuǎn)回中位
  34.     armIniPos();      //舵機(jī)收縮
  35.   }
  36.   else if(val_centre == LOW){
  37.      Servo_Stretch();     //舵機(jī)抓取物體
  38.      armIniPos();      //舵機(jī)收縮
  39.     }
  40.   else if(val_Right == LOW){
  41.      servos[0].write();   //底盤向左旋轉(zhuǎn)
  42.      Servo_Stretch();    //舵機(jī)抓取物體
  43.      servos[0].write();   //舵機(jī)轉(zhuǎn)回中位
  44.      armIniPos();      //舵機(jī)收縮
  45.       }
  46. }

  47. void armIniPos(){     //舵機(jī)收縮回起始位置
  48.   int robotIniPos[5][3] = {    //每個舵機(jī)角度不同,需要修改
  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]);   //舵機(jī)編號,目標(biāo)角度,延遲.此函數(shù)控制舵機(jī)的速度

  57.   }
  58. }

  59. void servoCmd(int j,int toPos, int servoDelay){   //舵機(jī)編號,目標(biāo)角度,延遲.此函數(shù)控制舵機(jī)的速度

  60.   int fromPos;
  61.   fromPos = servos(j).read();
  62.     if (fromPos <= toPos){  //如果“起始角度值”小于“目標(biāo)角度值”
  63.     for (int i=fromPos; i<=toPos; i++){
  64.       servos(j).write(i);
  65.       delay (servoDelay);
  66.     }
  67.   }  else { //否則“起始角度值”大于“目標(biāo)角度值”
  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.   }   
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:309562 發(fā)表于 2018-4-16 20:45 | 只看該作者
C:\Users\Administrator\Desktop
紅框中的分號“;”應(yīng)該去掉,大括號后不需要“;”
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表