极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17932|回复: 4

Arduino 控制SG90舵机

[复制链接]
发表于 2015-7-16 22:55:18 | 显示全部楼层 |阅读模式
本人刚接触Arduino Uno,教程上说通过调整占空比来控制转的角度,可是上传教程代码后,PC给板子发送1,舵机顺时针转180°,之后输入2,目测逆时针转20°左右,再依次输入3至9,每次都是逆时针转20°,有哪位大神可以给解惑这个现象的原因啊!!

代码如下:

int servopin=9;//定义数字接口9 连接伺服舵机信号线
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
void servopulse(int servopin,int myangle)//定义一个脉冲函数
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值
digitalWrite(servopin,HIGH);//将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);//将舵机接口电平至低
delay(20-pulsewidth/1000);
}
void setup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
Serial.begin(9600);//连接到串行端口,波特率为9600
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()//将0 到9 的数转化为0 到180 角度,并让LED 闪烁相应数的次数
{
val=Serial.read();//读取串行端口的值
if(val>'0'&&val<='9')
{
val=val-'0';//将特征量转化为数值变量
val=val*(180/9);//将数字转化为角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //给予舵机足够的时间让它转到指定角度
{
servopulse(servopin,val);//引用脉冲函数
}
}
}
回复

使用道具 举报

发表于 2015-7-17 09:31:19 | 显示全部楼层
首先说一下:第一,一开始你给 1 之前舵机应该处于最大的180度,所以它会逆时针旋转接近180度(也许是160度,)。你依次给 2、3、4、这时给舵机的意思是让舵机转到40、60、80度上,无论舵机处于什么位置,他都会乖乖的转动的你要的度数上,而不是每次让它转动40、60、80度。
另外逆时针旋转还是顺时针旋转只是舵机的问题,不是你代码的问题,如果你想让它顺时针的话,那就从9~1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 22:00:43 | 显示全部楼层
164335413 发表于 2015-7-17 09:31
首先说一下:第一,一开始你给 1 之前舵机应该处于最大的180度,所以它会逆时针旋转接近180度(也许是160度 ...

说的是啊,我后来想想,就觉得转动角度是相对于某一个固定位置而言的,谢谢啊!
回复 支持 反对

使用道具 举报

发表于 2015-10-27 14:30:37 | 显示全部楼层
学习以下。。。。。。
回复 支持 反对

使用道具 举报

发表于 2016-6-22 16:21:44 | 显示全部楼层
认真看一遍,有帮助!
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-20 19:15 , Processed in 0.041364 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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