极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16827|回复: 6

关于模拟口的编号

[复制链接]
发表于 2016-7-30 16:58:49 | 显示全部楼层 |阅读模式
玩了一下模拟口,开始是用的analogRead(A0)这样的,突发奇想,想看一下A0到底是多少。于是:
int port=A0;
Serial.println(port);
结果竟然是14。

也对,如果模拟口当成数字口使用的话,的确A0就是14。(不知道如果当成数字口,是不是既能输入也能输出,是不是要初始化(好像用作数字输入是不需要初始化的))

但是,我记得我以前也用过analogRead(0)这样的形式,于是试了一下,发现结果也是一样的。

猜想:analogRead()中是不是有一个判断语句,如果是0到5,就自动加上14呢?
问题:A0到A5真正的端口号应该是多少呢?是0到5,还是14到18?
回复

使用道具 举报

发表于 2016-7-31 19:58:09 | 显示全部楼层
aread是自动变 其他不变
端口数字具体看芯片IDE里写好了 不要自己用数字
是否当成数字口也要看芯片 有的不行
回复 支持 反对

使用道具 举报

发表于 2016-8-1 11:00:35 | 显示全部楼层
A0~A5,在Arduino 328芯片的确是 D14~D19 ,也就是继续D0~D13。
这些都是在Arduino的硬件库中所定义的,针对于选择的不同开发板,进行了不同的引脚定义。
即使做模拟口,也可以写成14~19,只是在理解时会产生误解。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-5 11:34:49 | 显示全部楼层
164335413 发表于 2016-8-1 11:00
A0~A5,在Arduino 328芯片的确是 D14~D19 ,也就是继续D0~D13。
这些都是在Arduino的硬件库中所定义的,针 ...

arduino.cc的示例中是写的 int analogPin=3;
也就是沿用的0-5的版本

但如果用的是A0,如 int analogPin=A0;
后面再使用0,如if (0==analogPin) 的话,就会出现if语句无效的情况。

有什么书籍中有提过这一点么?
回复 支持 反对

使用道具 举报

发表于 2016-8-5 14:50:44 | 显示全部楼层
请问164335413 ,硬件库在哪里找?比如ATMEGA328的板子,硬件库在哪里找?比如我想找到哪些是模拟口,哪些是数字口,多谢!
回复 支持 反对

使用道具 举报

发表于 2016-8-6 14:24:23 | 显示全部楼层
sunwave 发表于 2016-8-5 14:50
请问164335413 ,硬件库在哪里找?比如ATMEGA328的板子,硬件库在哪里找?比如我想找到哪些是模拟口,哪些是 ...

xxxx\arduino-1.6.5-r5\hardware\arduino\avr\cores\Arduino
xxxx\arduino-1.6.5-r5\hardware\arduino\avr\variants
里面找
回复 支持 反对

使用道具 举报

发表于 2016-8-6 14:32:24 | 显示全部楼层
pumpitup 发表于 2016-8-5 11:34
arduino.cc的示例中是写的 int analogPin=3;
也就是沿用的0-5的版本

这和你用的版本有关,最早的版本和现在的版本有区别,
但我定义int analogPin = A0; 然后使用 if (0 == analogPin)并没有报错。
如果想弄明白,可以去看Arduino的相应的库,那些.h文件里面会有你想了解的。
A0实际上是在最早就被定义了,如果你自己想定义一个A0,那是行不通的。
而定义只是定义了别名 比如A0在Arduino 328芯片的主控中就代表 static const uint8_t A0 = 14,当你选mega2560时A0就变成了static const uint8_t A0 = 54;
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 04:13 , Processed in 0.037106 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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