版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MadeInJack/article/details/51711459
1、硬件部分
通过外部信号来让舵机随着输入的改变来相应改变角度,方便做一些可控的转动装置。电位器相当于一个可变阻值的电阻,两个引脚的一边分别接5V与GND,而另一边只有单独一个引脚的接模拟口0,用于做输入信号。
2、软件部分
#include<Servo.h>
Servo myServo;
int potpin = 0; //连接到模拟0脚
int val; //从模拟口0读到的值
void setup() {
myServo.attach(9);
}
void loop() {
val = analogRead(potpin);
val = map(val,0,1023,0,178); //通过MAP函数进行数值转换
myServo.write(val); //给舵机写入角度值并等待使其转到
delay(15);
}
3、核心回顾
代码的开始部分还是需要调用<Servo.h>库,并创建相应的对象。同时,需要一个模拟口用来读取电位器的值,我们这里用变量potPin代表模拟口0。
这里主要讲下map函数。
函数格式如下:
map(value, fromLow, fromHigh, toLow, toHigh)
map函数的作用是将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow 到 fromHigh 之间的值映射到 toLow 在 toHigh 之间的值。
map函数参数含义:
value:需要映射的值
fromLow:当前范围值的下限
fromHigh:当前范围值的上限
toLow:目标范围值的下限
toHigh:目标范围值的上限
map的神奇之处还在于,两个范围中的“下限”可以比“上限”更大或者更小,因此map()函数可以用来翻转数值的范围,可以这么写:
y = map(x, 1, 50, 50, 1);
y = map(x, 1, 50, 50, -100);
val = map(val, 0, 1023, 0, 179);
所以,回到代码中,我们是想将模拟口读到的0~1023的值,转换为舵机的0~180°。