<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.jackslab.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Arduino_I%2FO_%E4%B9%8B%E6%95%B0%E5%AD%97%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA</id>
		<title>Arduino I/O 之数字输入输出 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.jackslab.org/index.php?action=history&amp;feed=atom&amp;title=Arduino_I%2FO_%E4%B9%8B%E6%95%B0%E5%AD%97%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA"/>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Arduino_I/O_%E4%B9%8B%E6%95%B0%E5%AD%97%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA&amp;action=history"/>
		<updated>2026-08-12T10:14:54Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.19.2</generator>

	<entry>
		<id>http://wiki.jackslab.org/index.php?title=Arduino_I/O_%E4%B9%8B%E6%95%B0%E5%AD%97%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA&amp;diff=2701&amp;oldid=prev</id>
		<title>Comcat：以“数字输出即：用于输出的 pin（管脚，可以叫 GPIO）只能输出 '0' 和 '1' 即低电平 (0V) 和高电平 (5V)  Arduino 普通板（相对于有 50 ...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.jackslab.org/index.php?title=Arduino_I/O_%E4%B9%8B%E6%95%B0%E5%AD%97%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA&amp;diff=2701&amp;oldid=prev"/>
				<updated>2014-06-25T09:03:35Z</updated>
		
		<summary type="html">&lt;p&gt;以“数字输出即：用于输出的 pin（管脚，可以叫 GPIO）只能输出 &amp;#039;0&amp;#039; 和 &amp;#039;1&amp;#039; 即低电平 (0V) 和高电平 (5V)  Arduino 普通板（相对于有 50 ...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;数字输出即：用于输出的 pin（管脚，可以叫 GPIO）只能输出 '0' 和 '1' 即低电平 (0V) 和高电平 (5V)&lt;br /&gt;
&lt;br /&gt;
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，下图的绿色编号即是：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:Atmega-pin.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
特别地，带 ADC（用于模拟信号到数字信号转换）的管脚（可用于模拟输入），不开启 ADC 也能用于数字输入输出（不使用 analogRead() 操作这些管脚）&lt;br /&gt;
&lt;br /&gt;
数字 I/O 端口是输入还是输出，Arduino 通过 pinMode() 这个函数来设置，比如设置 pin 12 为输出， pin 0 为输入（接受信号），则：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pinMode(12, OUTPUT);&lt;br /&gt;
pinMode(0, INPUT);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arduino 的引脚默认是输入，因此可以不用 pinMode() 显式声明为输入。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
设置输出模式后就可以使用 digitalWrite() 函数往针脚上输出电平；同样输入模式使用 digitalRead() 读取对应针脚上的信号：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
digitalWrite(12, HIGH);    // pin 12 output 1&lt;br /&gt;
digitalWrite(12, LOW);     // pin 12 output 0&lt;br /&gt;
digitalRead(0);            // Read the pin 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Arduino 引脚电气特性&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
数字 I/O 端口的信号，5V 的电压表示 '1'，0V 电压表示  '0'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arduino (ATMEGA) 引脚可以提供最高40mA的电流输出，供外部设备/电路使用。这足够点亮一个LED(最好串联一个电阻限流，以防电流过大烧坏引脚)，或给大多数传感器供电。若要驱动大多数继电器和电机，Arduino I/O 口提供的电流是不够的，得加额外的驱动电路模块。&lt;br /&gt;
&lt;br /&gt;
Arduino (ATMEGA) 引脚设置为输入时，其能吸收最高40mA的电流流入&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;深入数字输出&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arduino 的 I/O 输出即是 ATMEGA 单片机的 I/O 输出。&lt;br /&gt;
&lt;br /&gt;
用 pinMode() 配置引脚为输出时，引脚处于低阻抗模式，即：其能为外部模块提供一定的电流（最大 40mA）&lt;br /&gt;
&lt;br /&gt;
不加驱动能力扩展板（电路）的 Arduino，只能驱动很小功率的外设，对诸如：电机，大功率 LED 灯（1W 以上），其驱动能力是不够的，需要对其进行扩流；对需要大电压（比如 220v）的外设，需要对其进行扩展（添加外围驱动电路，暂时可参考：[http://www.geek-workshop.com/forum.php?mod=viewthread&amp;amp;tid=196 Arduino 输出引脚扩流]）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arduino (ATMEGA) 引脚的输出电流过大，可能会破坏引脚内的输出晶体管，甚至烧毁整个 Atmega 芯片。多数情况下会导致单片机的一个引脚烧毁而其他引脚仍然正常工作。&lt;br /&gt;
&lt;br /&gt;
输出电流过大的情形，通常会出现在：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*直接将 Arduino 的数字输出引脚接地&lt;br /&gt;
*直接驱动需要大工作电流的设备（比如继电器和电机，通常需要 1A 以上的电流）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
因此，在输出引脚连接其他设备时，除非必需使用最大的电流驱动，最好串联一个 470&amp;amp;Omega; 或 1k&amp;amp;Omega; 的电阻&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
实验时，在任意一个数字输出针脚与 GND （接地）之间直接串一个小功率 LED，当我们让该针脚输出 '1'（高电平，5V)，去点亮 LED 时，最好串一个 1k&amp;amp;Omega; 的电阻，以防电流过大&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;深入数字输入&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Arduino (ATMEGA) 引脚默认为输入模式&lt;br /&gt;
&lt;br /&gt;
读数字输入引脚获得的值要不为 0，要不为 1，则其需要“测量”的就是引脚的输入电压，高电平为 '1'，低电平为 '0'&lt;br /&gt;
&lt;br /&gt;
配置为输入模式的引脚，处于高阻态（可以视为引脚内串联了一个 100M&amp;amp;Omega; 的电阻）。输入电阻高则输入电流就小，因此数字输入引脚采样时（测电压是 HIGH 还是 LOW）只需消耗极小的电流。因此外部设备或电路只要微小的电流就能改变输入引脚的状态，其对外部电压的感觉很灵敏。对于像电容触摸屏这样的传感器，接入 Arduino 数字输入口完全没有压力。&lt;br /&gt;
&lt;br /&gt;
当然，灵敏也会有副作用，如果引脚配置为输入且没有连接外部电路（悬空），则该引脚的状态会因环境的原因（电子杂波或靠近电容）而变成随机值，对于这种情形，则需要给输入端加一个上拉电阻（连接到 5V）或者下拉电阻（连接到 GND 地），使其在悬空时保持一个已知的状态。&lt;br /&gt;
&lt;br /&gt;
关于上拉电阻，可以看看这个需要开关的通断作为输入量的应用（比如按码开关作为按键输入）：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[文件:开关输入-上拉电阻1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pin 1 配置为输入引脚，开关一端接地，一端接 Pin 1，设计本意是低电平表示开关闭合。则当开关断开时 Pin 1 处于悬空状态，其值随机。因此我们需将其电平“拉”高，以示开关处于断开状态。直接将 Pin 1 连接 Vcc 5V 是个最简单的拉高电平的方法，但直接连接电源会导致输入电流过大，容易烧坏引脚，因此需要在 Vcc 和 Pin 1 间加一个电阻，通常称这个电阻为上拉电阻：&lt;br /&gt;
&lt;br /&gt;
[[文件:开关输入-上拉电阻2.png]]&lt;br /&gt;
&lt;br /&gt;
所谓上拉电阻即：拉高引脚电压的电阻，关于上拉电阻的进一步信息可以参考 [[上拉电阻]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
下拉电阻的原理类似：&lt;br /&gt;
&lt;br /&gt;
[[文件:开关输入-下拉电阻.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
特别地，ATMEGA 芯片内置了一个可以用软件设置的 20k&amp;amp;Omega; 的上拉电阻，可以通过以下方法设置：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pinMode(pin, INPUT);           // 设置为输入&lt;br /&gt;
digitalWrite(pin, HIGH);       // 开启上拉电阻&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
需要注意的是，上拉电阻的电流足够使接在输入引脚上的LED发出微光。如果一个项目里的LED看起来已经工作了，但是亮度却很低，那么很可能是忘了用 pinMode() 设置引脚为输出端&lt;br /&gt;
&lt;br /&gt;
另一个需要注意的事是控制上拉电阻和控制引脚保持高/低电平使用的是同一个寄存器。因此当一个配置为输入端又开启了上拉电阻的引脚在程序中用 pinMode() 改为输出端时，该引脚就被设置为高电平输出。同样的，高电平状态的输出端用 pinMode() 转为输入端时就同时开启了上拉电阻&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;特殊的 Pin 13&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
13号数字引脚在大多数Arduino板上已经焊接了一个LED和电阻。若要使用这个引脚内部的 20k&amp;amp;Omega; 上拉电阻，其电平将不是你期望的5V，而是因LED和串联电阻的作用被拉低到了1.7V，也就是说这个引脚会保持在低电平状态。如果你一定要把13号引脚作为数字输入，需要使用一个外置的下拉电阻。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Comcat</name></author>	</entry>

	</feed>