Arduino 函数库

Arduino I/O函数

Arduino板上的引脚可以配置为输入或输出。我们将在这些模式下解释引脚的功能。重要的是要注意,大多数Arduino模拟引脚可以按照与数字引脚完全相同的方式进行配置和使用。

引脚配置为INPUT

引脚默认配置为输入,因此在使用它作为输入时,不用显式的pinMode() 输入引脚对电路要求小,可用于电容式触摸传感器或者LED作为光电二极管。

使用方法

pinMode(pin, INPUT)

pin - 设置模式的引脚编号

mode - INPUT、OUTPUT或者INPUT_PULLUP

引脚配置为OUTPUT

通过pinMode()配置引脚为底阻抗状态时,意味着他可以向其他电路提供大量电流。Atmega 引脚可以提供正向电流,高达40mA。这足以点亮LED或者运行许多传感器。但是不足以运行继电器 、电机。

pinMode()函数

pin - 设置模式的引脚编号

mode - INPUT、OUTPUT或者INPUT_PULLUP

digitalWrite() 函数

digitalWrite()函数向 数字引脚写入HIGH或者LOW值:

1、如果引脚通过pinMode()设置为OUTPUT,这电压被设置为响应的值:HIGH为5V(3.3V),LOW为0V(接地)。

2、如果引脚配置为INPUT。则digitalWrite()将启用HIGH或者禁用LOW输入引脚的内部上拉,建议设置为 INPUT_PULLUP 以启用内部上拉电阻。

3、如果不将pinMode()设置为OUTPUT,而将LED连接到引脚,则在调用digitalWrite(HIGH)时,LED可能会变暗。在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。

Void loop() {digitalWrite (pin ,value);
}

pin - 你希望设置模式的引脚编号

value - HIGH 或者 LOW

int LED = 6; // LED connected to pin 6void setup () {pinMode(LED, OUTPUT); // set the digital pin as output
}void setup() { digitalWrite(LED,HIGH); // turn on leddelay(500); // delay for 500 msdigitalWrite(LED,LOW); // turn off leddelay(500); // delay for 500 ms
}

analogRead() 函数

Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。

在Arduino板的右下角,你会看到6个标记为“Analog In”的引脚。这些特殊引脚不仅可以告知是否有电压施加给它们,还可以告知它们的值。通过使用**analogRead()**函数,我们可以读取施加到其中一个引脚的电压。

此函数返回0到1023之间的数字,表示0到5伏特之间的电压。例如,如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。

analogRead(pin);
  • pin - 要读取的模拟输入引脚的编号(大多数电路板上为0至5,Mini和Nano上为0至7,Mega上为0至15)
int analogPin = 3;//使用analog in 引脚3 作为电压标记
int val = 0; // 读取到的电压值void setup() {Serial.begin(9600); //串口传输波特率 1s传输的字节
} void loop() {val = analogRead(analogPin); // 读取输入的电压值Serial.println(val); // 串口输出返回值
}

analogReference() 函数

配置用于模拟输入的参考电压(即用作输入范围顶部的值)。选项是:

  • DEFAULT - 5伏(5V Arduino板)或3.3伏(3.3V Arduino板)的默认模拟参考值
  • INTERNAL - 内置参考,在ATmega168或ATmega328上等于1.1伏特,在ATmega8上等于2.56伏特(不适用于Arduino Mega)
  • INTERNAL1V1 - 内置1.1V参考(仅限Arduino Mega)
  • INTERNAL2V56 - 内置2.56V参考(仅限Arduino Mega)
  • EXTERNAL - 施加到AREF引脚的电压(仅限0到5V)用作参考
analogReference (type);

type - 可以使用以下任何类型(DEFAULT,INTERNAL,INTERNAL1V1,INTERNAL2V56,EXTERNAL)

对AREF引脚的外部参考电压,请勿使用小于0V或大于5V的任何值。如果在AREF引脚上使用外部参考,则必须在调用 **analogRead()**函数之前将模拟参考设置为EXTERNAL。否则,将短路有效参考电压(内部产生的)和AREF引脚,可能会损坏Arduino板上的微控制器。

attachInterrupt() 中断函数

中断在 Arduino 程序中非常有用,因为它有助于解决时序问题。中断的良好应用是读取旋转编码器或观察用户输入。一般情况下,ISR 应尽可能短且快。如果你的草图使用多个 ISR,则一次只能运行一个。其他中断将在当前完成之后执行,其顺序取决于它们的优先级。

通常,全局变量用于在 ISR 和主程序之间传递数据。为了确保在 ISR 和主程序之间共享的变量正确更新,请将它们声明为 volatile。

Arduino 中主要有时钟中断和外部中断,本文所说的中断指的是外部中断。Arduino 中的外部中断通常是由Pin 口(数字 Pin 口,不是模拟口)电平改变触发的。每种型号的 Arduino 版都有数个 Pin 口可以用来注册中断,具体如下:

开发板 可以用来注册中断的Pin口
Uno, Nano, Mini, other 328-based 2, 3
Uno WiFi Rev.2 所有数字口
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, other 32u4-based 0, 1, 2, 3, 7
Zero 除了4号口外的所有数字口
MKR Family boards 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due 所有数字口
101 所有数字口 (只有 2, 5, 7, 8, 10, 11, 12, 13数字口可以使用 CHANGE 类型中断,中断类型在下文有介绍)

注册中断主要是通过attachInterrupt()函数实现的,其原型为:

void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);

第一个参数为中断号,Arduino上每个可以注册中断的Pin口都会被分配一个中断号,这里需要传入的是中断号而不是Pin口号。但是不同的Arduino开发板上面的中断号分配并不完全一样。各个开发板的Pin口号和中断号对应关系如下:

开发板 中断号0 中断号1 中断号2 中断号3 中断号4 中断号5
Uno, Ethernet PIN 2 PIN 3
Mega2560 PIN 2 PIN 3 PIN 21 PIN 20 PIN 19 PIN 18
基于32u4的开发板 如 Leonardo, Micro PIN 3 PIN 2 PIN 0 PIN 1 PIN 7

从上表中可以看出同一个 Pin 口在不同的开发板上可能会有不同的中断号,这势必会影响程序的可移植性。幸运的是,Arduino 还提供了另一个函数 digitalPinToInterrupt(int)。从名字就能看出,这个函数能输入 Pin 口号并输出对应的中断号。需要注意的是,输入的 Pin 口号需要在上述的支持列表当中。所以,Arduino 官方推荐我们使用

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);

  1. 第二个参数是中断服务例程(ISR)的函数指针,在 C/C++ 中直接写该函数的函数名即可。在触发时,该函数将会被调用。该函数必须没有任何的参数也没有任何的返回值。
  2. 第三个参数是中断触发条件,由几个可选的值:
    LOW 当中断所在 Pin 口处于低电平时触发
    CHANGE 当中断所在 Pin口电平改变时触发
    RISING 当中断所在Pin口从低电平变为高电平(上升沿)时触发
    FALLING 当中断所在Pin口从高电平变为低电平(下降沿)时触发
    对于 Due,Zero 和 MKR1000开发板,还有一个 HIGH 表示当中断所在 Pin 口处于高电平时触发
int pin = 2; //define interrupt pin to 2
volatile int state = LOW; // To make sure variables shared between an ISR
//the main program are updated correctly,declare them as volatile.void setup() {pinMode(13, OUTPUT); //set pin 13 as outputattachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);//interrupt at pin 2 blink ISR when pin to change the value
}
void loop() { digitalWrite(13, state); //pin 13 equal the state value
} void blink() { //ISR functionstate = !state; //toggle the state when the interrupt occurs
}

注意:

  1. 由于中断会打断正常代码的运行,因此 ISR 的应该尽可能快地执行完毕。
  2. 在 ISR 中修改的全局变量要用 volatile 修饰符修饰以防止编译器优化
  3. 在 ISR 中不能使用其他用中断实现的函数,如 millis() delay() 等。延时可以使用 delayMicroseconds(),它不是用中断实现的。

Arduino 开发 — Arduino 函数库相关推荐

  1. Arduino 开发 — Arduino 时间函数

    Arduino 时间函数 Arduino提供四种不同的时间操作函数: delay函数 delay()函数的工作方式非常简单.它接受单个整数(或数字)参数.此数字表示时间(以毫秒为单位).阻塞函数 de ...

  2. CSP应用开发-CryptAPI函数库介绍

    基本加密函数为开发加密应用程序提供了足够灵活的空间.所有CSP的通讯都是通过这些函数.一个CSP是实现所有加密操作的独立模块.在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作.如果使用多于 ...

  3. linux下eclipse cdt引用函数库设置问题

    ubuntu下eclipse cdt 编写C/C++代码时,如果使用openssl函数库,引用了ssl.h函数库: #include <openssl/ssl.h> 但编译仍会提示你引用的 ...

  4. STC8系列固件函数库开源

    前言: 年初学习51单片机,编写了STC8A的设备驱动软件函数库(以下称为函数库),经过几个版本的迭代,目前以及趋于稳定和成熟.之前我在论坛发布过,后来移到gitee进行规范化的开源,现在扩展到STC ...

  5. arduino loar_如何使用Arduino开发板制作函数生成器(波形发生器)

    对于喜欢偶尔鼓捣电子产品的工程师来说,他们都希望能有自己的实验室.万用表.钳形表.示波器.LCR表.函数发生器.双模电源和自动变压器都是实验室的基本配置.虽然所有这些都可以购买,但我们也可以轻松地自行 ...

  6. 《Arduino开发实战指南:机器人卷》一2.1 数字I/O口的操作函数

    本节书摘来华章计算机<Arduino开发实战指南:机器人卷>一书中的第2章 ,第2.1节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  7. arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天在之前的文章基础上, ...

  8. 200528更新arduino开发ESP8266配置方法,入门必看,esp8266开发板库离线安装包package2.7.1...

    公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 群里经常有朋友问arduino开发ESP8266的配置方法,今天(200528)在之 ...

  9. 《Arduino开发实战指南:机器人卷》一2.4 时间函数

    本节书摘来华章计算机<Arduino开发实战指南:机器人卷>一书中的第2章 ,第2.4节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  10. 《Arduino开发实战指南:机器人卷》一2.2 模拟I/O口的操作函数

    本节书摘来华章计算机<Arduino开发实战指南:机器人卷>一书中的第2章 ,第2.2节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

最新文章

  1. Spring-Boot的动态代理AOP原理
  2. OpenGL学习(4)——纹理
  3. Golang for循环使用多个变量
  4. SpringMVC如何获取请求带来的各种信息 ||如果我们的请求参数是一个POJO(自定义参数类型), SpringMVC会自动的为这个POJO进行赋值
  5. IT项目需求分析的注意事项
  6. 算法心经:数学的应用:概率的应用
  7. js笔记(三)ES5、ES5新增的数组的方法、字符串的方法、字符编码、对象的序列化和反序列化、bind
  8. 15名优秀女科学家拟获重量级荣誉
  9. 清除90天苹果充值记录_王者荣耀安卓可以转到苹果吗?角色迁移iOS怎么转移到安卓...
  10. Kubernetes 架构(上)- 每天5分钟玩转 Docker 容器技术(120)
  11. Linux下的网络桥接与链路聚合
  12. 【基础】吴恩达机器学习笔记 - 线性回归 代价函数 梯度下降
  13. rhel6mysql管理_RHEL 6平台MySQL数据库服务器的安装方法
  14. 最新系统分析师考试大纲
  15. 鸿蒙系统和全屋智能,不断升级“常用常新” 搭载鸿蒙系统的全屋智能有多酷?...
  16. Netty权威指南电子版(不要积分点个赞就好)
  17. Python为什么叫爬虫?Python与爬虫有什么关系?
  18. This computer does not support Intel Virtualization Technology (VT-x) or it is being exclusively use
  19. 青蛙跳台阶(pta)
  20. SSM整合案例分析(详解)

热门文章

  1. 工业设计三维软件有哪些?
  2. 启动Kettle时报错找不到文件javaw.exe
  3. 052: 单调性与极值及凹凸性之型三函数零点;渐近线
  4. P2P直播软件设计的技术原理和改进
  5. 秒搜神器everything背后的索引原理
  6. MATLAB中的resample函数根本理解,我专栏中有Guitar.MAT资源
  7. matlab中probIdx = 2 2,利用1stOpt1.5 pro来进行多元非线性拟合
  8. Win10 无线网卡驱动感叹号,显示错误代码56
  9. springboot+vue旅行社旅游拼团系统java
  10. inssider序列号_inSSIDer v4.2.1.109完美注册版