用紅外避障傳感器控制機械臂抓取物體。
當紅外避障傳感器檢測到物體時,輸入低電平。然后調(diào)用函數(shù)機械臂抓取物體。
但是程序有錯誤,找了半天也沒找出來。請大家來討論一下。
IMG_20180413_120423.jpg (4.7 MB, 下載次數(shù): 33)
下載附件
2018-4-13 14:22 上傳
Arduino源程序如下
- #include <Servo.h> //使用servo庫
- const int Aarm = 0;
- const int Barm = 1;
- const int Carm = 2;
- const int Darm = 3;
- const int Earm = 4;
- const int Farm = 5;
- const int maxServos = 6;
- Servo servos[maxServos];
- int DSD = 15; //Default Servo Delay (默認電機運動延遲時間)
- //此變量用于控制電機運行速度.增大此變量數(shù)值將
- //降低電機運行速度從而控制機械臂動作速度。
- int val_left=0;
- int val_centre=0;
- int val_Right=0;
- void setup(){
- pinMode(A0,INPUT);
- pinMode(A1,INPUT);
- pinMode(A2,INPUT);
- for(int i=0;i<=5;i++){
- servos[i].attach(i);
- servos[i].write(90);
- delay(10);
- }
- }
- void loop(){
- val_left = digitalRead(A0);
- val_centre= digitalRead(A0);
- val_Right = digitalRead(A0);
- if (val_left == LOW) { //例如:b67三個字節(jié)
- servos[0].write(); //底盤向左旋轉
- Servo_Stretch(); //舵機抓取物體
- servos[0].write(); //舵機轉回中位
- armIniPos(); //舵機收縮
- }
- else if(val_centre == LOW){
- Servo_Stretch(); //舵機抓取物體
- armIniPos(); //舵機收縮
- }
- else if(val_Right == LOW){
- servos[0].write(); //底盤向左旋轉
- Servo_Stretch(); //舵機抓取物體
- servos[0].write(); //舵機轉回中位
- armIniPos(); //舵機收縮
- }
- }
- void armIniPos(){ //舵機收縮回起始位置
- int robotIniPos[5][3] = { //每個舵機角度不同,需要修改
- {Barm, 90, DSD},
- {Carm, 90, DSD},
- {Darm, 90, DSD},
- {Earm, 90, DSD},
- {Farm, 90, DSD}
- };
- for (int i = 0; i < 5; i++){
- servoCmd(robotIniPos[i][0], robotIniPos[i][1], robotIniPos[i][2]); //舵機編號,目標角度,延遲.此函數(shù)控制舵機的速度
- }
- }
- void servoCmd(int j,int toPos, int servoDelay){ //舵機編號,目標角度,延遲.此函數(shù)控制舵機的速度
- int fromPos;
- fromPos = servos(j).read();
- if (fromPos <= toPos){ //如果“起始角度值”小于“目標角度值”
- for (int i=fromPos; i<=toPos; i++){
- servos(j).write(i);
- delay (servoDelay);
- }
- } else { //否則“起始角度值”大于“目標角度值”
- for (int i=fromPos; i>=toPos; i--){
- servos(j).write(i);
- delay (servoDelay);
- }
- }
- }
- void Servo_Stretch(){
- int diceMove1[5][3] = {
- {Barm, 30, DSD},
- {Carm, 90, DSD},
- {Darm, 43, DSD},
- {Earm, 126, DSD},
- {Farm, 90, DSD}
- };
- for (int i = 0; i < 5; i++){
- servoCmd(diceMove1[i][0], diceMove1[i][1], diceMove1[i][2]);
- delay(200);
- }
復制代碼 |