本帖最后由 lxf 于 2020-8-15 13:45 编辑
目标
1、读取可调电位器不同阶段数值
2、映射模块的运用
3、完成可调电位器同时控制LED灯的亮度
实验材料
Arduino UNO开发板 可调电位器模块 LED发光模块 配套USB数据线 配套杜邦线若干 Arduino IDE软件
内容
接线图
接线方式
Arduino UNO开发板 <------> LED发光模块 3V3/5V <------> VCC GND <------> GND D3 <------> IN Arduino UNO开发板 <------> 可调电位器模块 3V3/5V <------> VCC GND <------> GND A1 <------> OUT
基础案例1
通过串口监视器,读取可调电位器的模拟输入数值范围
程序实现代码
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- Serial.println(analogRead(A1)); //串口监视器打印显示可调电位器的模拟输入值
- delay(1000);
- }
复制代码
基础案例2
用可调电位器调节LED灯亮度
程序实现代码
- void setup(){
- }
- void loop(){
- analogWrite(3,(map(analogRead(A1), 0, 1023, 0, 255))); //将可调电位器的模拟输入信号值0~1023,
- //等比映射到Arduino主控板上的模拟输出范围0~255
- }
复制代码
说明:输入为0~1023
Arduino主控板上,用于储存读入模拟量的寄存器用一个十位的二进制数来保持这个值,这个寄存器可以表示1024种状态,分别对应0~1023,这1024个整数。案例中的可调电位器实际是一个可变电阻,顺时针旋转旋钮,接入电路的电阻会增大,对应的模拟信号值也会相应的增大。而Arduino主控板上的模拟输出范围为0~255,所有要用到映射模块来完成。
map() - 等比映射
map()可以用来将某一数值从一个区间等比映射到一个新的区间。
语法
map (x, in_min, in_max, out_min, out_max)
参数
x: 要映射的值
in_min: 映射前区间最小值
in_max: 映射前区间最大值
out_min: 映射后区间最小值
out_max 映射后区间最大值
注意
map()不会将数值限制在映射区间内,例如:
- void setup() {
- Serial.begin(9600);
- }
- void loop() {
- for (int i = 1; i < 11; i++){
- int x = i;
- Serial.print ("x before map: ");
- Serial.println (x);
- x = map (x, 1, 5, 1, 50) ; //将x数值从区间1 - 5 映射到区间 1 - 50
- Serial.print ("x after map:");
- Serial.println (x);
- Serial.println ("");
- delay(1000);
- }
- }
复制代码
运行显示结果:
|