本篇介绍Arduino模拟输入功能,通过读取电位器输入的电压值来控制LED灯的亮度。
模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能。
Arduino 模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1024的整数形式表示。
我们通过使用analogRead() 函数读取电位器输入的电压值,然后通过analogWrite()函数来控制LED灯亮度。
1. 实验材料
- Uno R3开发板
- 配套USB数据线
- 面包板及配套连接线
- 1个LED灯
- 1个220Ω限流电阻
- 1个电位器
电位器是一个可调的电阻,其原理如下图所示:
通过旋转旋钮改变2号脚位置,从而改变2号脚到两端的阻值。实验中将1脚和3脚分别接到开发板的5V的GND,再通过模拟输入引脚A0来读取电位器2号脚分得的电压,其范围在0V和5V之间。
2. 实验步骤
-
根据原理图搭建电路。
直插LED灯正极连接限流电阻,电阻另一端连接开发板第10引脚,LED灯负极接开发板GND。电位器1号脚和3号脚分别连接开发板5V和GND,2号脚连接开发板A0引脚。
实验原理图如下图所示:
实物连接图如下图所示:
- 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。
/*
AnalogRead
通过电位器改变LED灯亮度
*/
int ledPin = 10;
int readValue = 0; //保存读到的模拟值
int ledValue = 0; //保存LED灯占空比
void setup()
{
pinMode(ledPin, OUTPUT); //数字口要选择带~号的具有pwm功能的输出口
}
void loop()
{
readValue = analogRead(A0); //读取A0模拟口的数值(0-5V 对应 0-1204取值)
ledValue = map(readValue, 0, 1024, 0, 255); //将0到1024之间的数据映射成0到255之间的数据
analogWrite(ledPin, ledValue); //PWM最大取值255
}
-
连接开发板,设置好对应端口号和开发板类型,进行程序下载。
3. 实验现象
通过旋转电位器旋钮,LED灯亮度改变。
4. 函数介绍
analogRead()
- 描述:读取指定模拟引脚的值。
- 函数原型:analogRead(pin)
- 参数:模拟输入引脚。
- 返回值:0到1024之间的整数。
map()
- 描述:将数据从一个范围映射到另一个范围。
- 函数原型:map(value, fromLow, fromHigh, toLow, toHigh)
- 参数:
- value: 要映射的数据
- fromLow: 当前范围的下限值。
- formHigh: 当前范围的上限值。
- toLow: 目标范围的下限值。
- toHigh: 目标范围的上限值。
- 返回值:重新映射后的数据。
5. 实验分析
程序中通过analogRead()函数来读取模拟输入值,这个输入值的范围是0到1024之间,然后通过analogWrite()函数来改变LED灯占空比,占空比的范围是0到255之间。通过使用map()函数将范围做了重新映射。
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注: