arduino 控制SERVO的代码
大家好,我想写一个代码:将信号“0”输入arduino, 则servo不动。
将信号“1”输入arduino, 则servo转动20°。每给一个“1”就转动20°直到转到180°后开始反转。
问题:
1,arduino可以读出servo的位置么?我想将代码写成输入“1”后servo转到相应的角度(即当前位置+20°),但是我不知道用什么代码读出servo的位置。或者大家有没有更好的建议?
2,当arduino转到180°后开始反转,这个代码我也不知道怎么写。
请大家帮帮我,谢谢啦! 请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。 林定祥 发表于 2015-9-28 19:52 static/image/common/back.gif
请对几种电机了解下,直流电机,伺服电机,舵机,根据指令控制电机角度应该使用舵机,角度控制自成体系。
你没有认真看我的问题。第一,servo就是舵机。第二,我想知道怎么读出servo的当前角度。
我知道可以用write()直接让servo到指定角度,但是我想用write(当前角度+20°)。所以我的问题是当前角度怎么读出? 可以私聊我811146927 本帖最后由 afei420 于 2015-9-29 08:14 编辑
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电平自加1,再*20。还是不难吧? afei420 发表于 2015-9-29 08:12 static/image/common/back.gif
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...
那请问当到达180°后,要反转。这个怎么写? afei420 发表于 2015-9-29 08:12 static/image/common/back.gif
180度舵机,你给它多少度,它就转多少度。你给的值,不需要再检测位置再读了。做一个累加计数器。来一个高电 ...
if (packetBuffer=='1'){
for (int i=0;i<9;i=i+1){
myServo.write(20*(i+1));
delay(2000);
}是这样计数器么?我现在是收到1就一个循环,我想把1放进循环里面。就是输入1,就只动20°。请问怎么改? 要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。 afei420 发表于 2015-9-30 08:57 static/image/common/back.gif
要反转,你只要确定这个累加的值是否已经到9,到了9,来个1,就让它自减1,就反转了。
if (packetBuffer=='1'){
for (int i=0;i<=9;i=i+1){
myServo.write(20*(i+1));
delay(2000);
}
for(int i=9;i>=0;i=i-1){
myServo.write(20*(i-1));
delay(2000);
}
}我现在是这样写的,但是我只要给个1,舵机就完成0-180,180-0.
我想每给个1只转动20°。请问应该怎么改代码?应该不是把if语句放在for语句的下面吧? 最简单舵机测试程序,自己参考下:
int pos = 0;
void loop()
{
for(pos = 0; pos < 180; pos += 1)// goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(1); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(1); // waits 15ms for the servo to reach the position
}
}
页:
[1]