Arduino数字引脚作为GPIO的使用
引脚与GPIO的关系
引脚(pin)是对芯片的外部物理接口的一个称呼,它是在不把这个物理接口投入到具体应用场合下的称呼。例如,我们可以说,某某芯片的P1.5引脚可以作为数字输出驱动外部数字设备,也可以作为串口接受引脚接受串口数据。那么P1.5就是一个引脚(pin),而作为数字输出,UART的RX就是这个引脚的2个功能。
所以我们可以发现:
1、大多数MCU的引脚都不止一个功能。不同引脚内部结构不一样,拥有的功能也不一样。通过不同的配置,切换引脚的实际功能。
2、不是所有的引脚都能在程序中使用,比如芯片的Vcc和GND,除了供电,就没做其他的用处。
数字引脚函数
pinMode(pin, mode)
作用:设置一个引脚(pin)作为GPIO时的I/O模式。
参数:
pin:引脚编号
mode:GPIO的I/O模式,取值有3种
INPUT :作为数字输入
OUTPUT :作为数字输出
INPUT_PULLUP:作为数字输入,且使能引脚的内部上拉电阻
Arduino的引脚,在上电时默认就是输入模式,但最好使用pinMode设置,更加明确。
当配置引脚为数字输入模式时,引脚表现为高阻抗状态,引脚内部的电流非常小,就如同在引脚前接了一个100M欧姆的电阻一样。这也意味外部转换引脚的电平只需很小的电流输入即可。
当使用INPUT模式时,引脚作为数字输入,但是不连接任何的拉电阻,处于悬空转态,容易受电子噪声干扰而随机的改变其电平状态。一般来说,当引脚作为数字输入使用时,都让引脚连接一个拉电阻:上拉电阻(引脚电平拉高到+5V或者+3.3V)或者下拉电阻(引脚电平拉低到GND)。可以使用Arduino引脚内部的上拉电阻(绝大多数AVR芯片为20K~50K,而Due则是50K~150K,具体参考MCU的数据手册),或者自己外接拉电阻,外接拉电阻阻值一般使用10K的。
关于上拉和下拉电阻,可以参考-->上拉电阻和下拉电阻
当使用INPUT_PULLUP模式时,引脚作为数字输入,且使能内部上拉电阻。13号引脚不建议作为数字输入引脚使用。因为13脚默认连接了一个板载的LED灯,即便是你使能了上拉电阻,LED的电阻会拉低电压,使得引脚依然是低电平。如果你非要使用13作为输入,那就外置拉电阻。
当使用OUTPUT模式时,引脚作为数字输出,引脚表现为低阻抗,输出的电流大,高达40mA,足够驱动一些基本的设备,如LED小灯。但不足以驱动马达等对电流要求很高的元件。
注:
1、引脚作为PWM输出时,无需先前使用pinMode配置其模式,因为PWM本身就代表了输出的意思。且官方库源代码中可以发现,它已经帮我们配置为输出了。
void analogWrite(uint8_t pin, int val)
{
pinMode(pin, OUTPUT);
if (val == ){
digitalWrite(pin, LOW);
}
//...
}
2、模拟引脚也可以作为数字引脚使用,完全OK。这在数字引脚不够用的情况下非常有用。
下面是示例代码
//使用模拟引脚A0作为数字输出驱动LED小灯,Blink程序。
int LEDpin = A0; void setup() {
pinMode(LEDpin, OUTPUT);
digitalWrite(LEDpin, LOW);
} void loop() {
digitalWrite(LEDpin, HIGH);
delay();
digitalWrite(LEDpin, LOW);
delay(); }
digitalWrite(pin,value)
作用:设置一个数字输出引脚的输出电平值,HIGH或者LOW。
参数:
pin:引脚编号。此引脚必须在之前使用pinMode设置为OUTPUT模式。
value:2个值
LOW:输出低电平
HIGH:输出高电平
int digitalRead(pin)
作用:读取一个数字输入引脚的电平值。
返回:HIGH(高电平)或者LOW(低电平)。
参数:
pin:引脚编号。
Arduino数字引脚作为GPIO的使用的更多相关文章
- ARDUINO UNO数字引脚端口上电后不稳定状态。
ARDUINO UNO数字引脚端口上电后不稳定状态. 在使用4*4矩阵键盘时,遇到了输入端的电平无法稳定,一直被识别为高电平. 在发现这一问题后,首先检查程序是否出错.检查后发现程序没有任何问题. 于 ...
- Arduino 模拟引脚
Arduino的模拟引脚的引用,网上不错的一篇文章 参考:http://blog.sina.com.cn/s/blog_156e62ef90102xjio.html 模拟引脚 本文是对于Arduino ...
- 使用MPU6050陀螺仪自制Arduino数字量角器
MPU6050惯性单元是一个3轴加速度计和一个3轴陀螺仪组合的单元.它还包含温度传感器和DCM,可执行复杂的任务. MPU6050通常用于制作无人机和其他远程控制机器人,如自平衡机器人.在本篇文章中, ...
- Arduino 数字函数总结
Arduino 有三个数字函数,分别是:pinMode( ), digitalWrite( ),digitalRead( ).三个函数各有其作用,pinMode( ) 在初始化 setup( )函数中 ...
- 配置nRF52832 的NFC 专用引脚为 GPIO
nRF52832 是支持NFC的,真可惜本码农没用过. NFC的引脚为 P0.09/P0.10,这两个引脚正常情况下是不能直接当做GPIO来用的,要用的时候,需要在编译环境配置一个宏. 下面是Keil ...
- Arduino uno 引脚说明
http://openhome.cc/Gossip/Books/mBlockArduino1-3and1-4.html http://swf.com.tw/?p=406
- Arduino学习笔记⑧ 红外通信
1.前言 红外通信是一种利用红外光编码进行数据传输的无线通信方式,在目前来说是使用非常广泛的.生活中常见电视遥控器,空调遥控器,DVD遥控器(现在估计是老古董了),均使用红外线遥控.使用红外线 ...
- 单片机—Arduino UNO-R3—学习笔记002
led控制 本篇主要介绍Arduino数字引脚及相关函数,通过数字I/O输出控制板载LED灯亮灭状态(数字引脚13). 数字信号是以0.1表示的电平不连续变化的信号,也就是以二进制的形式表示的信号. ...
- HC-05初探
catalogue . 蓝牙嗅探抓包 . HC05蓝牙模块AT模式设置 . USB转串口芯片CH340 . 蓝牙小车 1. 蓝牙嗅探抓包 针对蓝牙通信包的嗅探抓包不能直接使用wincap+wiresh ...
随机推荐
- CentOS安装mysql*.rpm提示conflicts with file from package的解决办法
看到“conflicts”,是产生冲突了,文件“/usr/share/mysql/charsets/*”需要MySQL-server-5.6.19-1.linux_glibc2.5.x86_64版本的 ...
- Java ThreadLocal的使用
Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量.因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread ...
- 如何在生产环境使用Btrace进行调试
占小狼 转载请注明原创出处,谢谢! 背景 记得前几天有人问我:在生产环境中可能经常遇到各种问题,你们一般是如何进行调试的? 很惭愧,没有经验.因为平时碰不到生产环境的服务器,定位问题需要各种数据,所以 ...
- 面试题:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。(c++实现)
实例说明 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ...
- 常见的机器学习&数据挖掘知识点
原文:http://blog.csdn.net/heyongluoyao8/article/details/47840255 常见的机器学习&数据挖掘知识点 转载请说明出处 Basis(基础) ...
- MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Max, Min, Count , DistinctCount 以及其它 TopCount, Generate
MDX 中最大值和最小值 MDX 中最大值和最小值函数的语法和之前看到的 Sum 以及 Aggregate 等聚合函数基本上是一样的: Max( {Set} [, Expression]) Min( ...
- C# System.Collections.SortedList
using System; using System.Collections; public class SamplesSortedList { public static void Main() { ...
- 你可能不知道的51个Linux经典命令
1.删除0字节文件 代码如下: find -type f -size 0 -exec rm -rf {} \; 2.查看进程按内存从大到小排列 代码如下: ps -e -o "%C : %p ...
- 深入理解C++中public、protected及private用法
深入理解C++中public.protected及private用法 这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念 ...
- java证书
默认情况下,密钥项存储在.keystore文件中,而可信的CA证书项存储在.cacerts文件中,该文件位于JRE安全目录中. 想在Linux环境下,用keytool命令检查一下一个证书,打keyto ...