查看Arduino I/O 之数字输入输出的源代码
←
Arduino I/O 之数字输入输出
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
数字输出即:用于输出的 pin(管脚,可以叫 GPIO)只能输出 '0' 和 '1' 即低电平 (0V) 和高电平 (5V) Arduino 普通板(相对于有 50 个数字 I/O 的 Arduino ADK 而言)把 ATMEGA 8 位单片机(Atmega16/32/64/128/48/88/168/328/640/1280/2560 系列皆为 8 位单片机)的数字 I/O 端口汇总为 14 条,并编号为 0 ~ 13,下图的绿色编号即是: [[文件:Atmega-pin.png]] 特别地,带 ADC(用于模拟信号到数字信号转换)的管脚(可用于模拟输入),不开启 ADC 也能用于数字输入输出(不使用 analogRead() 操作这些管脚) 数字 I/O 端口是输入还是输出,Arduino 通过 pinMode() 这个函数来设置,比如设置 pin 12 为输出, pin 0 为输入(接受信号),则: <pre> pinMode(12, OUTPUT); pinMode(0, INPUT); </pre> Arduino 的引脚默认是输入,因此可以不用 pinMode() 显式声明为输入。 设置输出模式后就可以使用 digitalWrite() 函数往针脚上输出电平;同样输入模式使用 digitalRead() 读取对应针脚上的信号: <pre> digitalWrite(12, HIGH); // pin 12 output 1 digitalWrite(12, LOW); // pin 12 output 0 digitalRead(0); // Read the pin 0 </pre> <b>Arduino 引脚电气特性</b> 数字 I/O 端口的信号,5V 的电压表示 '1',0V 电压表示 '0' Arduino (ATMEGA) 引脚可以提供最高40mA的电流输出,供外部设备/电路使用。这足够点亮一个LED(最好串联一个电阻限流,以防电流过大烧坏引脚),或给大多数传感器供电。若要驱动大多数继电器和电机,Arduino I/O 口提供的电流是不够的,得加额外的驱动电路模块。 Arduino (ATMEGA) 引脚设置为输入时,其能吸收最高40mA的电流流入 <b>深入数字输出</b> Arduino 的 I/O 输出即是 ATMEGA 单片机的 I/O 输出。 用 pinMode() 配置引脚为输出时,引脚处于低阻抗模式,即:其能为外部模块提供一定的电流(最大 40mA) 不加驱动能力扩展板(电路)的 Arduino,只能驱动很小功率的外设,对诸如:电机,大功率 LED 灯(1W 以上),其驱动能力是不够的,需要对其进行扩流;对需要大电压(比如 220v)的外设,需要对其进行扩展(添加外围驱动电路,暂时可参考:[http://www.geek-workshop.com/forum.php?mod=viewthread&tid=196 Arduino 输出引脚扩流]) Arduino (ATMEGA) 引脚的输出电流过大,可能会破坏引脚内的输出晶体管,甚至烧毁整个 Atmega 芯片。多数情况下会导致单片机的一个引脚烧毁而其他引脚仍然正常工作。 输出电流过大的情形,通常会出现在: *直接将 Arduino 的数字输出引脚接地 *直接驱动需要大工作电流的设备(比如继电器和电机,通常需要 1A 以上的电流) 因此,在输出引脚连接其他设备时,除非必需使用最大的电流驱动,最好串联一个 470Ω 或 1kΩ 的电阻 实验时,在任意一个数字输出针脚与 GND (接地)之间直接串一个小功率 LED,当我们让该针脚输出 '1'(高电平,5V),去点亮 LED 时,最好串一个 1kΩ 的电阻,以防电流过大 <b>深入数字输入</b> Arduino (ATMEGA) 引脚默认为输入模式 读数字输入引脚获得的值要不为 0,要不为 1,则其需要“测量”的就是引脚的输入电压,高电平为 '1',低电平为 '0' 配置为输入模式的引脚,处于高阻态(可以视为引脚内串联了一个 100MΩ 的电阻)。输入电阻高则输入电流就小,因此数字输入引脚采样时(测电压是 HIGH 还是 LOW)只需消耗极小的电流。因此外部设备或电路只要微小的电流就能改变输入引脚的状态,其对外部电压的感觉很灵敏。对于像电容触摸屏这样的传感器,接入 Arduino 数字输入口完全没有压力。 当然,灵敏也会有副作用,如果引脚配置为输入且没有连接外部电路(悬空),则该引脚的状态会因环境的原因(电子杂波或靠近电容)而变成随机值,对于这种情形,则需要给输入端加一个上拉电阻(连接到 5V)或者下拉电阻(连接到 GND 地),使其在悬空时保持一个已知的状态。 关于上拉电阻,可以看看这个需要开关的通断作为输入量的应用(比如按码开关作为按键输入): [[文件:开关输入-上拉电阻1.png]] Pin 1 配置为输入引脚,开关一端接地,一端接 Pin 1,设计本意是低电平表示开关闭合。则当开关断开时 Pin 1 处于悬空状态,其值随机。因此我们需将其电平“拉”高,以示开关处于断开状态。直接将 Pin 1 连接 Vcc 5V 是个最简单的拉高电平的方法,但直接连接电源会导致输入电流过大,容易烧坏引脚,因此需要在 Vcc 和 Pin 1 间加一个电阻,通常称这个电阻为上拉电阻: [[文件:开关输入-上拉电阻2.png]] 所谓上拉电阻即:拉高引脚电压的电阻,关于上拉电阻的进一步信息可以参考 [[上拉电阻]] 下拉电阻的原理类似: [[文件:开关输入-下拉电阻.png]] 特别地,ATMEGA 芯片内置了一个可以用软件设置的 20kΩ 的上拉电阻,可以通过以下方法设置: <pre> pinMode(pin, INPUT); // 设置为输入 digitalWrite(pin, HIGH); // 开启上拉电阻 </pre> 需要注意的是,上拉电阻的电流足够使接在输入引脚上的LED发出微光。如果一个项目里的LED看起来已经工作了,但是亮度却很低,那么很可能是忘了用 pinMode() 设置引脚为输出端 另一个需要注意的事是控制上拉电阻和控制引脚保持高/低电平使用的是同一个寄存器。因此当一个配置为输入端又开启了上拉电阻的引脚在程序中用 pinMode() 改为输出端时,该引脚就被设置为高电平输出。同样的,高电平状态的输出端用 pinMode() 转为输入端时就同时开启了上拉电阻 <b>特殊的 Pin 13</b> 13号数字引脚在大多数Arduino板上已经焊接了一个LED和电阻。若要使用这个引脚内部的 20kΩ 上拉电阻,其电平将不是你期望的5V,而是因LED和串联电阻的作用被拉低到了1.7V,也就是说这个引脚会保持在低电平状态。如果你一定要把13号引脚作为数字输入,需要使用一个外置的下拉电阻。 <br><br><br><br> <br><br><br><br> <br><br><br><br>
返回到
Arduino I/O 之数字输入输出
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面