Arduino学习笔记⑤ 模拟IO实验
1.前言
还记得前几个我们都是在讲解数字IO,而其实我们生活中大多数信号都是模拟信号,如声音以及温度变化。在Arduino中,常用0~5v的电压来表示模拟信号。
1.1 模拟输入功能
在Arduino,编号前带有“A”的引脚是模拟输入引脚,Arduino可以读取这些引脚上输入的模拟值,也就是可以读取引脚上输入的电压大小。
模拟输入引脚带有ADC功能(ADC:Analog-to-Digital Converter 模数转换)。它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读取模拟值的功能。
- 使用AVR芯片的Arduino模拟输入功能有10位精度,意味着0~5V电压会转换成0~1023的整数形式表示。
模拟输入功能需要使用analogRead(pin)函数,其中pin是读取模拟值的引脚,被指定的引脚必须是模拟输入引脚。
1.2 模拟输出功能
要使用analogWrite()函数来实现模拟输出功能。
注意:
- 该函数并不是输出真正意义上的模拟值,而是以一种特殊的方式来达到输出模拟值的效果,也就是我们经常听到的“PWM”(脉冲宽度调制 Pulse Width Modulation)。
当使用analogWrite函数,指定引脚会通过高低电平的不断转换来输出一个周期固定(约490Hz)的方波,通过改变高低电平在每个周期中所占比例(占空比),而得到近似输出不同电压的效果。
analogWrite(pin,value):参数pin为要输出的PWM波的引脚,参数value是PWM的脉冲宽度,范围为0~255。
大多数Arduino控制器的PWM引脚都会用“~”标识,可以查看一下自己的板子。常见几款板子PWM引脚为:
基础知识介绍好了,那么就开始接下来的实验了。
2.实验内容
主要实现两个实验内容:
- 固定呼吸灯
- 可调呼吸灯
2.1 固定呼吸灯
实验介绍:
将LED连接到PWM引脚,主要利用模拟输出功能 analogWrite 函数输出电压,呼吸频率固定。
实验代码:
/**
* @Desc 固定呼吸灯
* @author 单片机菜鸟
* @Date 2016/12/8
* 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
* 按键是高电平有效
*/
#define LED 9
#define DELAY_TIME 30 //延时时间
void setup() {
// put your setup code here, to run once:
}
void loop() {
//从暗到亮,每次亮度值加5,直到最亮
for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
//输出PWM
analogWrite(LED,fadeValue);
//延时一下
delay(DELAY_TIME);
}
//从亮到暗 每次亮度-5直到最暗
for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
//输出PWM
analogWrite(LED,fadeValue);
//延时一下
delay(DELAY_TIME);
}
}
2.2 可调呼吸灯
实验介绍:
在固定呼吸灯基础上,通过读入的模拟电压大小(模拟输入我们采用一个电位器来分压)来调整频率,同时利用analogRead以及analogWrite函数。
实验代码:
/**
* @Desc 可调呼吸灯
* @author 单片机菜鸟
* @Date 2016/12/8
* 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
* 按键是高电平有效
*/
#define LED 9
void setup() {
// put your setup code here, to run once:
}
void loop() {
//从暗到亮,每次亮度值加5,直到最亮
for(int fadeValue = 0;fadeValue<=255;fadeValue+=5){
//输出PWM
analogWrite(LED,fadeValue);
//延时一下
int delaytime = analogRead(A0)/5;//读取电位器输出电压 用于延时
delay(delaytime);
}
//从亮到暗 每次亮度-5直到最暗
for(int fadeValue=255;fadeValue>=0;fadeValue-=5){
//输出PWM
analogWrite(LED,fadeValue);
//延时一下
int delaytime = analogRead(A0)/5;
delay(delaytime);
}
}
当然,上面电位器可以换成光敏电阻之类的,这样就可以考虑做一个晚上呼吸白天熄灭的呼吸灯。
3.总结
这一课,相对很简单,我们主要学习模拟IO口的使用。以后当我们遇到光敏电阻、热敏电阻、温度传感器、气体传感器之类的可以产生模拟信号的,就应该想到模拟IO口了。
Arduino学习笔记⑤ 模拟IO实验的更多相关文章
- Arduino学习笔记④ 经典按键实验
1.前言 我们讲了数字IO口介绍以及做了流水灯演示(主要用到IO口的输出功能),这节课我们讲解一下IO口的输入功能,说到输入功能,最经典的例子莫过于按键实验.废话少说,赶紧上车. 2.实验材料 ...
- Arduino学习笔记① 初识Arduino
1.前言 近段时间,博主陆续更新了ESP8266学习笔记,主要开发平台是Arduino.但是,对于很多无基础的初学者来说,甚至不了解Arduino是什么.因此,博主决定加入一个Arduino学 ...
- Arduino学习笔记③ 经典LED
1.前言 今天我们开始同时讲解理论以及实践.对于绝大部分有过单片机编程经历的人来说,第一个接触的大多数就是LED灯(忽然想起博主大一那个懵懂的时代,当时大三的师兄给我们展现了一把流水灯功力,当 ...
- Arduino学习笔记二:修改LED点灯程序
看了开源社区的LED控制程序,开始上手代码编写,修改,下载以及调试,原文地址:http://www.arduino.cn/thread-1072-1-1.html,这个帖子写的比较通俗易懂. 自己移植 ...
- linux学习笔记之IO
一.基础知识. 1:普通IO类型. 1,非阻塞IO:发出open/read/write等IO操作,并使这些操作不会永远阻塞.当不能完成时,会立即出错返回. 1)非阻塞的两种标志方式:指定标志:O_NO ...
- Java学习笔记之——IO
一. IO IO读写 流分类: 按照方向:输入流(读),输出流(写) 按照数据单位:字节流(传输时以字节为单位),字符流(传输时以字符为单位) 按照功能:节点流,过滤流 四个抽象类: InputStr ...
- Arduino学习笔记⑧ 红外通信
1.前言 红外通信是一种利用红外光编码进行数据传输的无线通信方式,在目前来说是使用非常广泛的.生活中常见电视遥控器,空调遥控器,DVD遥控器(现在估计是老古董了),均使用红外线遥控.使用红外线 ...
- Arduino学习笔记⑦ EEPROM断电保存数据
1.前言 EEPROM,叫做电可擦可编程可读寄存器(是不是觉得好官方,不知道是什么鬼?反正我也一脸懵逼),只需要知道这是一种断电后数据不会丢失的存储设备,可以用来应对需要做记录做保存的场合.简 ...
- Arduino学习笔记⑥ 硬件串口通信
1.前言 Ardunio与计算机通信最常用的方式就是串口通信.在Arduino控制器上,串口都是位于Rx和Tx两个引脚,Arduino的USB口通过一个转换芯片与这两个串口引脚连接.该转换芯片 ...
随机推荐
- Channel使用技巧
前言 Go协程一般使用channel(通道)通信从而协调/同步他们的工作.合理利用Go协程和channel能帮助我们大大提高程序的性能.本文将介绍一些使用channel的场景及技巧 场景一,使用cha ...
- 【linux】【jenkins】自动化运维五 整合邮件提醒
1.安装插件 Email Extension Template Plugin 安装教程参考:https://www.cnblogs.com/jxd283465/p/11542680.html 2.系统 ...
- Maven 创建项目之简单示例
maven 是一个项目管理工具.可以用来管理jar包依赖,构建项目等. 那么接下来,就在eclipse中使用maven创建一个简单的项目. 1,依次点击File-> New -> Othe ...
- centos使用android studio遇到的一些问题
1.下载完成后进入bin目录启动 ./studio 2. 由于google被墙,SDK 下载不了, 照此教程添加下载源 http://jingyan.baidu.com/album/adc815137 ...
- 程序员写 2000 行 if else?领导:这个锅我不背
前言 知乎上有小伙伴提了这么一个问题,如何看待陕西省普通话水平测试成绩查询系统?查询系统前端代码就直接给出了身份账号,姓名,证书编号,如果信息是真的,就泄露了这么多考生的信息,白给那种.为什么会发生这 ...
- C#控件及常用属性
1.窗体(Form) 1.常用属性 (1)Name 属性:用来获取或设置窗体的名称,在应用程序中可通过Name 属性来引用窗体. (2) WindowState 属性: 用来获取或设置窗体的窗口状态. ...
- 完整的Android MVP开发之旅
开发背景 最近是在做一个与健身相关的APP,里面有训练器模块基本功能是按照特点动作的演示和描述来引导用户完成训练.在第一个版本时由于没接触过些类项目与功能花了几周的时间大概1500行代码才完成这个功能 ...
- druid 连接池的配置参数
介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生 ...
- C语言——2019秋季作业
1.[你对软件工程专业或者计算机科学与技术专业专业了解是怎样? ] 答:1.软件工程专业是2002年国家教育部新增专业,随着计算机应用领域的不断扩大及中国经济的不断发展,软件工程专业成为一个新的热门专 ...
- SSM框架手动实现分页逻辑(非PageHelper)
第一种方法:查询出所有数据再分页 分析: 分页时,需要获得前台传来的两个参数,分别为pageNo(第几页数据),pageSize(每页的条数); 根据这两个参数来计算出前端需要的数据是查出数据list ...