,最近在玩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);
}
}
}
}
|