
int servopin = 7 //定义舵机接口数字接链蠢世口7
void servopulse(int angle)//定档让义一个脉冲函数
{
int pulsewidth=(angle*11)+500 //将角度转化为500-2480的脉宽值
digitalWrite(servopin,HIGH) //将舵机接口电平至高
delayMicroseconds(pulsewidth) //延时脉宽值的微秒数
digitalWrite(servopin,LOW)//将舵机接口电平至低
delayMicroseconds(20000-pulsewidth)
}
voidsetup()
{
pinMode(servopin,OUTPUT)//设定舵机接口为输出接口
}
voidloop()
{
//读取电位器(传感器)的读数,接到3.3V,值范围从0到660左右
int readValue = analogRead(readPin)
//把值的范围映射到0到165左右
int angle = readValue / 4
//发送50个脉冲
for(int i=0i<50i++)
{
//引用脉冲函数
servopulse(angle)
}
}
// 使用可变电阻控制伺服电机位置#include <Servo.h> //引入lib
Servo myservo // 创建一个伺服电机对象
int photocellPin = 2 // 设定连接电位器的模拟引脚A2
int val 塌辩 // 创建变量,储存从模拟端口读取的值范围0到1023
void setup()
{
myservo.attach(9) // D9号引脚输出电机控制信号
}
void loop()
{
val = analogRead(photocellPin) // 读取电位器的模拟值(0到1023之间)
val = map(val, 0, 1023, 0, 179) //利用“map”函数缩放该值,得到伺服电机需要的角度(0到180之间)
if (val>60) { //如果传来的值大于60
for(int pos = 0 pos < val pos++) // 从0度到60度运动 ,调节delay()来调节速度
{
myservo.write(pos) // 指定舵机转向的角度
delay(15) // 每次步进一度等待15ms
}
} else {
myservo.write(0) //否则转回0位
}
delay(15) // 等待电机旋转到目标角度
}
舵机的转动速度取决于起始角度和目誉衫戚标角度的差,差别越大转得越快,当接近时就放慢角度。所以没有专门的函数控制转速。但在大角度转动时,你可以用庆陵程序把它设成几个小角度递进,加上延时delay(),这样可以放慢速度。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)