• Arduino 学习笔记_4 模拟输入和输出


    模拟输出

    在这里插入图片描述

    /*
    25 模拟输出1 - analogWrite
    太极创客
    www.taichi-maker.com
    
    此程序用于太极创客<<零基础入门学用Arduino教程>> 
    25 模拟输出1 - analogWrite
    
    演示如何通过两个按键开关通过analogWrite指令
    进行模拟输出操作。具体电路和其它信息请参考
    太极创客网站本教程相关页面。
    
    2017-04-28
    */
    boolean pushButton1;   // 创建布尔型变量用来存储按键开关1的电平状态
    boolean pushButton2;   // 创建布尔型变量用来存储按键开关2的电平状态
    int ledPin = 9;        //LED引脚号
    int brightness = 128;  //LED亮度参数
    
    void setup() {
      // put your setup code here, to run once:
      pinMode(2, INPUT_PULLUP); //将引脚2设置为输入上拉模式
      pinMode(8, INPUT_PULLUP); //将引脚8设置为输入上拉模式
      pinMode(ledPin, OUTPUT);  //将LED引脚设置为输出模式
      Serial.begin(9600);       //启动串口通讯
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
      pushButton1 = digitalRead(2); //读取引脚2电平状态并将其赋值给布尔变量
      pushButton2 = digitalRead(8); //读取引脚8电平状态并将其赋值给布尔变量
      
      if (!pushButton1 && brightness > 0){     // 当按下按键开关1并且LED亮度参数大于0
        brightness--;                          // 减低LED亮度参数
                                               //(brightness-- 相当于  brightness = brightness - 1;)
      } else if (!pushButton2 && brightness < 255) {  //当按下按键开关2并且LED亮度参数小于255
        brightness++;                                 //增加LED亮度参数
                                                      //(brightness++ 相当于  brightness = brightness + 1;)
      }
      analogWrite(ledPin, brightness);         //模拟输出控制LED亮度
      Serial.println(brightness);              //将LED亮度参数显示在串口监视器上
      delay(10);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    只有带有波浪线的可以调节LED亮度。

    当长按右边的键,输出从255降到0,灯亮度降至熄灭;

    当长按左边的键,输出从0升到255,灯亮度逐渐变亮。

    analogWrite()指定引脚输出,并控制亮度(0~255范围内)。支持356911引脚。

    执行analogWrite()时,会给该引脚一个指定的PWM频率,除了5,6引脚(980Hz),一般频率是490Hz左右。

    analogWrite()不需要pinMode()设置引脚,但是也可以设置。

    PWM

    主板上有一句话:PWM=~

    当修改analogWrite()的第二个参数时,就是修改在一个周期内LED亮的部分的占比。比如127就是127/255的时间处于亮的状态,其他时间处于灭的状态,频率过快时看起来就觉得亮度低了。

    模拟输入

    电位器

    Potentiometer 电位器,本课学习中使用的电位器类似一个螺丝侧面长者3个引脚的东西。原理类似滑动变阻器。

    有一个旋钮,三个引脚,电位器上写着电阻值(13号引脚之间的),比如我的是10000.

    旋钮向哪边转,哪边电阻降低。

    旋钮左转到头,则12间电阻为0,23间电阻为10000.

    在这里插入图片描述

    电位器可以把0~5v输入电压映射到0~1023范围,旋转旋钮模拟输入会从0~1023变化。

    /*
      模拟输入
     
      本程序旨在演示如何使用analogRead()读取Arduino的引脚电平。
      通过调节电位器, A0引脚的输入电压将在0V-5V之间。
      该输入电压将被映射到数值0-1023之间,并显示在串口监视器中。
      
     电路连接:
       电位器中间引脚连接到模拟输入A0引脚
       电位器两端引脚分别连接在Arduino +5V和接地引脚
     
     太极创客 www.taichi-maker.com
     2017-01-08
     
     This example code is in the public domain.
     
     */
     
    void setup() {
      // 串口通讯初始化(9600 bps):
      Serial.begin(9600);
    }
     
    void loop() {
      // 读取模拟输入值:
      int analogInputVal = analogRead(A0);
     
      // 将结果通过串口监视器显示:
      Serial.println(analogInputVal);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    Arduino每0.1毫秒读取一次输入。

    当模拟输入引脚没有连线的时候,读取到的值无法确定。甚至我们把手靠近该引脚,值都会变化。

    randomSeed()就是利用一个没连线的空引脚赋值。

    示例:电位器控制LED灯亮度

    其实很简单,analogInputVal获取到的值通过~引脚输出给电灯就可以了。

    一个小问题在于:analogInputVal的范围是01023,analogWrite输出电灯亮度范围是0255,要怎么处理?有一个线程的函数:map

    int ledpin=9;
    void setup() {
      // 串口通讯初始化(9600 bps):
      Serial.begin(9600);
      pinMode(ledpin,OUTPUT);
    }
     
    void loop() {
      // 读取模拟输入值:
      int analogInputVal = analogRead(A0);
     
      // 将结果通过串口监视器显示:
      Serial.print("analogInputVal:");
      Serial.println(analogInputVal);
      int brightness=map(analogInputVal,0,1023,0,255);//映射
      Serial.print("brightness:");
      Serial.println(brightness);
      analogWrite(ledpin,brightness);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

  • 相关阅读:
    独立站谷歌付费广告关键词选词技巧实操
    八皇后问题的实现(思路分析) [数据结构][Java]
    DataGridView绑定数据更新
    【Java 基础篇】Java 生产者-消费者模式详解
    前端练手3D爱心
    中国工业地产市场竞争格局与前景战略建议报告2022-2028年新版
    Goby 漏洞发布|深信服下一代防火墙 loadfile.php 文件读取漏洞
    Excel只读模式的密码如何取消?
    学习Source Generators之从swagger中生成类
    高效率的10进制转2进制(C版)
  • 原文地址:https://blog.csdn.net/jtwqwq/article/details/126317191