找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-15 13:45 编辑

12课 模拟输入串口读取可调电位器模拟值


目标

1、读取可调电位器不同阶段数值
2、映射模块的运用
3、完成可调电位器同时控制LED灯的亮度

实验材料

Arduino UNO开发板
可调电位器模块
LED发光模块
配套USB数据线
配套杜邦线若干
Arduino IDE软件

图片1.png

内容

接线图

图片2.png

接线方式

Arduino UNO开发板    <------>   LED发光模块
            3V3/5V            <------>            VCC
             GND               <------>            GND
               D3                <------>              IN
Arduino UNO开发板    <------>   可调电位器模块
          3V3/5V             <------>             VCC
            GND               <------>             GND
             A1                  <------>             OUT

基础案例1

通过串口监视器,读取可调电位器的模拟输入数值范围

程序实现代码

  1. void setup(){
  2.   Serial.begin(9600);
  3. }
  4. void loop(){
  5.   Serial.println(analogRead(A1));  //串口监视器打印显示可调电位器的模拟输入值
  6.   delay(1000);
  7. }
复制代码

基础案例2

用可调电位器调节LED灯亮度

程序实现代码

  1. void setup(){
  2. }
  3. void loop(){
  4.   analogWrite(3,(map(analogRead(A1), 0, 1023, 0, 255)));  //将可调电位器的模拟输入信号值0~1023,
  5. //等比映射到Arduino主控板上的模拟输出范围0~255
  6. }
复制代码

说明:输入为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()不会将数值限制在映射区间内,例如:

  1. void setup() {
  2.   Serial.begin(9600);
  3. }
  4. void loop() {
  5.   for (int i = 1; i < 11; i++){
  6.     int x = i;
  7.     Serial.print ("x before map: ");
  8.     Serial.println (x);
  9.     x = map  (x,  1,  5,  1,  50) ;  //将x数值从区间1 - 5 映射到区间 1 - 50   
  10.     Serial.print ("x after map:");
  11.     Serial.println (x);
  12.     Serial.println ("");
  13.     delay(1000);
  14.   }
  15.   }
复制代码

运行显示结果:

图片3.png
分享至 : QQ空间
收藏

0 个回复

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