1-25 模拟输出1-analogWrite

在这里插入图片描述

在这之前是数字输入输出实验

这里是模拟输出输入

开关两种情况

LED开关外还需要亮度,以及速度等需要模拟输入输出

小LED亮度调节模拟输出和模拟输入

电路

在这里插入图片描述
在这里插入图片描述

LED正极连接电阻,连接arduino开发板的9号引脚(发现引脚有波浪线,3、5、6、10、11也都有,开发板还有说明PWM=~,非常重要)

我们要调节led亮度的话,只能使用带有~波浪线的引脚,其余的引脚都不行

LED负极接在GND引脚上

按键开关一个接在8号引脚,一个接在2号引脚,另外接地

效果演示

通电后,led点亮
在这里插入图片描述

按下右侧的按键,led亮度变暗,最后熄灭数值为0
在这里插入图片描述

按下左侧按键,led亮度变亮,最后达到最大值255
在这里插入图片描述

模拟输出analog output

数字输出模式下,只有熄灭点亮两种状态
在这里插入图片描述

对led亮度调节时,需要模拟输出,0~255共256个级别的数值
在这里插入图片描述

Analogwrite不仅能控制led亮度还有控制电机

复合运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例程序

示例程序非ide自带,而是太极创客编写,可以到官网查看
在这里插入图片描述
在这里插入图片描述

模拟输出的信号值大于255以及小于0不会对led产生损害

/*
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(防止范围超出0~255)
    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);				//延时10ms,稍微减缓速度,防止亮度变化太快
}

Analogwrite()

在这里插入图片描述

Analogwrite并不简单,每次对引脚执行此命令,都会给其一个固定频率的PWM信号,PWM信号的频率大约为490HZ

注意只支持analogwrite的3,5,10,11引脚操作,其他引脚是不能使用此操作的
在调用此analogwrite之前,可以不用pinmode引脚设置,也可以设置不影响

1-26 模拟输出2-PWM

在这里插入图片描述

只有3,5,10,11的引脚才能作为亮度调节的引脚(PWM=~)
在这里插入图片描述

PWM概念(极其重要)

PWM 脉冲宽度调制
在这里插入图片描述

使用analogwrite函数时,实际就是PWM控制

让led点亮,就让其保持在5V即可
在这里插入图片描述

让LED熄灭,就让其保持0V即可
在这里插入图片描述

让一段时间

在这里插入图片描述

在1
在这里插入图片描述

点亮1秒熄灭1秒
在这里插入图片描述

若是1毫秒呢?

在这里插入图片描述

例子,人物动起来的,个画面动
在这里插入图片描述

当非常快的速度让led闪烁时,速度快到一定程度以后就再也看不到闪烁的效果了
实际看到的是保持点亮状态的led

因为长时间闪烁所,所以看到其亮度是减弱的,led点亮和熄灭比较那个长,那个短

点亮和熄灭时间各占50%,那么亮度就是50%
在这里插入图片描述

点亮的时间占75%,熄灭的时间占25%,那么亮度就是75%
在这里插入图片描述

点亮的时间占25%,熄灭的时间占75%,那么亮度就是75%
在这里插入图片描述

在这里插入图片描述

255就是led的最大亮度,127就是50%的亮度,analogwrite函数只能给参数整数,无法写127.5的,所以127或者128都是可以的

设置为75%时,如下
在这里插入图片描述

Arduino的PWM的时间间隔周期并不是2毫秒的,这里只是演示,不同的开发板的周期也会有所不同

在这里插入图片描述

具体的led灯亮度型号不同,亮度也会有所不同,不同灯的同一个级别50%的亮度也会有所不一样

1-27 模拟输出3-for

在这里插入图片描述

电路

在这里插入图片描述

Led正极连接电阻,连接9号引脚(PWM~)
负极接地GND

效果演示

在这里插入图片描述

Led进行着明暗的交替变化,串口监视器中的数字也在变化,从小(0)到大(255)变化,再从大(255)到小(0)变化

程序示例

如何让led产生忽明忽暗的呼吸灯效果呢?
需要程序编写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.taichi-maker.com/homepage/arduino-basic-tutorial-index/arduino-basic-tutorial-27/

/*
27 模拟输出3 - for
太极创客
www.taichi-maker.com

此程序用于太极创客<<零基础入门学用Arduino教程>> 
27 模拟输出3 - for

演示如何通过for循环语句实现LED明暗交替(呼吸灯)效果。

2017-04-28
*/
void setup() {
  pinMode(9, OUTPUT);      //设置9号引脚为输出模式
  Serial.begin(9600);     //启动串口通讯
}

void loop() {
  // LED由暗到明
  for (int brightness = 0; brightness <= 255; brightness++){
    analogWrite(9, brightness);   
    Serial.println(brightness);
    delay(10);
  }
  
  // LED由明到暗  
  for (int brightness = 255; brightness >=0 ; brightness--){
    analogWrite(9, brightness);
    Serial.println(brightness);
    delay(10);
  }
}

For循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Brightness+=5

将自加修改后如下(+=5,每次都会隔着5个增加或者减小,变化速度变快了)

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐