【转载】零知开源快速入门9-读取模拟数值-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3267|回复: 2

【转载】零知开源快速入门9-读取模拟数值

[复制链接]
发表于 2018-6-25 18:18 | 显示全部楼层 |阅读模式
本帖最后由 零知实验室-roc 于 2018-6-25 18:51 编辑

转载自:零知开源快速入门9-读取模拟数值
http://www.lingzhilab.com/forum.php?mod=viewthread&tid=180&fromuid=2
(出处: 零知实验室)

在前面我们一直使用的是数字引脚,但是很多情况下我们需要测量一个模拟量,比如读取某个变化的电压值,这时候就需要模拟引脚的功能了,下面我们在电路中加入一个电位器,看看随着电位器的变化,读取到的模拟数值变化。
一、工具原料
  • 电脑,windows系统
  • 零知开发板
  • micro-usb线
  • 电位器
  • 面包板一个+若干跳线


二、硬件连接
1、电路原理图

2、电路连接

三、方法步骤
1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:
  • /**
  • *    文件: 电位器测试.ino
  • *    作者: 零知实验室
  • *    时间: 2018/06/25 17:59
  • *    说明:
  • **/
  • int value = 0;//读取的值
  • // the setup routine runs once when you press reset:
  • void setup() {
  •     // put your setup code here, to run once:
  •         pinMode(LED_BUILTIN, OUTPUT);//设置板子上的LED灯引脚
  •         Serial.begin(9600);//打开串口,可以在串口监视器中查看测量的数值
  • }
  • // the loop routine runs over and over again forever:
  • void loop() {
  •     // put your main code here, to run repeatedly:
  •         value = analogRead(A0);
  •         Serial.println(value);
  •         //读取一次后,我们让开发板上的LED灯闪烁一次,表示一次读取完成
  •         digitalWrite(LED_BUILTIN, HIGH);
  •         delay(80);
  •         digitalWrite(LED_BUILTIN, LOW);
  •         delay(80);
  •         //延时一会儿,让串口输出慢一点便于观察
  •         delay(500);
  • }

[color=rgb(51, 102, 153) !important]复制代码


2、按照之前的方式先【编译】,然后【上传】到开发板中。
四、成果展示
上面步骤成功完成后,我们就可以看到预期的结果了,打开零知开发工具的【串口监视器】,然后我们把电位器从开始调到最大,可以看到如下数据变化。



五、扩展
在上面我们读取的数值有些人可能比较迷惑,我们现在把这些原始模拟值转换为实际的电压值,编写如下代码:
  • /**
  • *    文件: 电位器测试.ino
  • *    作者: 零知实验室
  • *    时间: 2018/06/25 17:59
  • *    说明:
  • **/
  • int value = 0;//读取的原始模拟数值
  • int voltage = 0;//实际电压值
  • // the setup routine runs once when you press reset:
  • void setup() {
  •     // put your setup code here, to run once:
  •         pinMode(LED_BUILTIN, OUTPUT);//设置板子上的LED灯引脚
  •         Serial.begin(9600);//打开串口,可以在串口监视器中查看测量的数值
  • }
  • // the loop routine runs over and over again forever:
  • void loop() {
  •     // put your main code here, to run repeatedly:
  •         value = analogRead(A0);
  •         //次函数就可以把数值进行范围映射,可以测量的最大值为4095,而我实际的最大测量电压为3.3v
  •         voltage = map(value, 0, 4095, 0, 330);
  •         Serial.println((float)voltage/100.00); //保留两位小数
  •         //读取一次后,我们让开发板上的LED灯闪烁一次,表示一次读取完成
  •         digitalWrite(LED_BUILTIN, HIGH);
  •         delay(80);
  •         digitalWrite(LED_BUILTIN, LOW);
  •         delay(80);
  •         //延时一会儿,让串口输出慢一点便于观察
  •         delay(500);
  • }

[color=rgb(51, 102, 153) !important]复制代码


然后重新编译代码后上传到开发板中,然后打开串口监视器可以看到当我们旋转电位器的时候,实际的电压变化:

发表于 2019-6-26 06:18 来自手机 | 显示全部楼层
map(   )函数原型意思?到哪里找到原型函数说明好方便引用
 楼主| 发表于 2019-6-26 14:35 | 显示全部楼层
gaobao_1 发表于 2019-6-26 06:18
map(   )函数原型意思?到哪里找到原型函数说明好方便引用

零知WIKI查看说明,或者右键【查看源码】可以看到它如何实现。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:31 , Processed in 0.287370 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表