极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11092|回复: 0

三个舵机控制Uarm的基本动作实验请打什么指教

[复制链接]
发表于 2016-9-11 14:54:02 | 显示全部楼层 |阅读模式
,最近在玩Uarm 实验了几天之后总是感觉力不从心,控制不好,现在想实现的是按下按钮button 控制基座的舵机转到相应位置,按下按钮button1控制基座的舵机转回来,按下button2控制大臂的舵机伸出,按下button3控制大臂的舵机缩回来 。而给控制抓手部分高低的舵机 恒定的角度(10度)保持不变。现在程序如下但是控制起来 这个机械臂总不是那么听话有时候按按钮了  不动有时候不按按钮的时候自己动,而且并不是每次按按钮都按理想的运动而运动!总之控制起来乱七八糟的 不受控制呢!不知道是程序的问题还是硬件舵机或者是按钮的问题  我用的是arduino  Uno的板子。或者有没有可能板子有问题 啊   求大家指导!程序如下
#include <Servo.h>
Servo myservo0;//基座
Servo myservo1;//大臂
Servo myservo2;//高低
//*************************基座来回
int Button=3;
int Button1=5;
//**************************大臂伸缩
int Button2=10;//伸出
int Button3=11;//缩回
int pos1;
int i;
void setup() {
  // put your setup code here, to run once:
myservo0.attach(7);//基座
  myservo1.attach(8);//大臂
   myservo2.attach(9);//高低
pinMode(Button,INPUT);
  pinMode(Button1,INPUT);
  pinMode(Button2,INPUT);
  pinMode(Button3,INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
    myservo2.write(10);//10度保持末端抓手水平
  
if(digitalRead(Button)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,

     if(digitalRead(Button)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   
      
       for(pos1 = 50; pos1>5; pos1 -=1)//基座舵机从50度转到5度
  {
myservo0.write(pos1);
delay(100);   
    }
   
  
  
      while(digitalRead(Button)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
  if(digitalRead(Button1)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,

     if(digitalRead(Button1)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   
      
         for(pos1 =5; pos1<50; pos1 +=1)//基座舵机从5度转到50度
  {
myservo0.write(pos1);
delay(100);   
    }

   
  
      while(digitalRead(Button1)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
  //***********************************大臂舵机动作
  if(digitalRead(Button2)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,

     if(digitalRead(Button2)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   
      
       for(pos1 = 90; pos1>40; pos1 -=1)//大臂伸出 从90度转到40度
  {
myservo1.write(pos1);
delay(100);   
    }
   
  
  
      while(digitalRead(Button2)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
  if(digitalRead(Button3)==LOW)  //由于本例检测上升沿触发,所以先检测输入是否低电平,大臂缩回
  {
    delay(10); //然后延时一段时间,

     if(digitalRead(Button3)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   
      
         for(pos1 =40; pos1<90; pos1 +=1)
  {
myservo1.write(pos1);
delay(100);   
    }

   
  
      while(digitalRead(Button1)==HIGH) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
}



回复

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-4 19:19 , Processed in 0.037671 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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