Arduino 常用函数参考文档
封装好的API,使得程序中的语句更容易被理解,我们不用理会单片机中繁杂的寄存器配置,就能直观的控制Arduino,增强程序可读性的同时,也提高了开发效率。
本篇主要介绍:
一,项目结构
1.setup
2.loop
3.main
二,数字输入输出
1.pinMode ( pin , mode )
2.digitalWrite ( pin , value )
3.digitalRead ( pin )
三,模拟输入输出
1.analogRead
2.analogWrite
四,模拟输入输出
1.tone
2.pulisein
3.外部中断
-----------------------------------------------------------------------------------------------------------
一,项目结构
1.setup
2.loop
3.main
1.setup():
Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。 通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。
eg.示例程序
// 给13号引脚连接的设备设置一个别名“led” ; // 在板子启动或者复位重启后, setup部分的程序只会运行一次 void setup(){ // 将“led”引脚设置为输出状态 pinMode(led, OUTPUT); } // setup部分程序运行完后,loop部分的程序会不断重复运行 void loop() { digitalWrite(led, HIGH); // 点亮LED delay(); // 等待一秒钟 digitalWrite(led, LOW); // 通过将引脚电平拉低,关闭LED delay(); // 等待一秒钟 }
2.loop():
在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。 通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。
eg.示例程序
// 给13号引脚连接的设备设置一个别名“led” ; // 在板子启动或者复位重启后, setup部分的程序只会运行一次 void setup(){ // 将“led”引脚设置为输出状态 pinMode(led, OUTPUT); } // setup部分程序运行完后,loop部分的程序会不断重复运行 void loop() { digitalWrite(led, HIGH); // 点亮LED delay(); // 等待一秒钟 digitalWrite(led, LOW); // 通过将引脚电平拉低,关闭LED delay(); // 等待一秒钟 }
3.main():
在进行Arduino开发时,没有像传统C/C++程序使用入口函数main。实际上main函数存在于Arduino核心库中,且仍然是程序的入口。 在Arduino核心库中可见main.cpp文件,其内容如下:
#include <Arduino.h> // Declared weak in Arduino.h to allow user redefinitions. ; } // Weak empty variant initialization function. // May be redefined by variant files. void initVariant() __attribute__((weak)); void initVariant() { } void setupUSB() __attribute__((weak)); void setupUSB() { } int main(void) { init(); initVariant(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } ; }
通过以上程序可见,Arduino程序中编写的setup和loop函数,都在main函数中调用了。 loop的循环执行,是通过for循环实现的,且每次loop结束后,都会进行串口事件判断,也正是因为这种设计,串口事件不能实时响应。
二,数字输入输出
1.pinMode ( pin , mode )
2.digitalWrite ( pin , value )
3.digitalRead ( pin )
1.pinMode ( pin , mode ) :
在使用输入或输出功能前,你需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。
参数:
参数pin为指定配置的引脚编号 参数mode为指定的配置模式 通常可用模式有三种: INPUT 输入模式 OUTPUT 输出模式 INPUT_PULLUP 输入上拉模式
eg.示例程序
/* Blink 等待一秒钟,点亮LED,再等待一秒钟,熄灭LED,如此循环 */ // 在大多数Arduino控制板上 13号引脚都连接了一个标有“L”的LED灯 // 给13号引脚连接的设备设置一个别名“led” int led = 13; // 在板子启动或者复位重启后, setup部分的程序只会运行一次 void setup(){ // 将“led”引脚设置为输出状态 pinMode(led, OUTPUT); } // setup部分程序运行完后,loop部分的程序会不断重复运行 void loop() { digitalWrite(led, HIGH); // 点亮LED delay(1000); // 等待一秒钟 digitalWrite(led, LOW); // 通过将引脚电平拉低,关闭LED delay(1000); // 等待一秒钟 }
2.digitalWrite ( pin , value ) :
之前我们在Blink程序中使用到了pinMode(, OUTPUT),即是把13号引脚配置为输出模式。 配置成输出模式后,你还需要使用digitalWrite() 让其输出高电平或者是低电平。
参数:
参数pin为指定输出的引脚编号; 参数value为你要指定输出的电平 使用HIGH指定输出高电平,或是使用LOW指定输出低电平。
eg.示例程序
/* Blink 等待一秒钟,点亮LED,再等待一秒钟,熄灭LED,如此循环 */ // 在大多数Arduino控制板上 13号引脚都连接了一个标有“L”的LED灯 // 给13号引脚连接的设备设置一个别名“led” int led = 13; // 在板子启动或者复位重启后, setup部分的程序只会运行一次 void setup(){ // 将“led”引脚设置为输出状态 pinMode(led, OUTPUT); } // setup部分程序运行完后,loop部分的程序会不断重复运行 void loop() { digitalWrite(led, HIGH); // 点亮LED delay(1000); // 等待一秒钟 digitalWrite(led, LOW); // 通过将引脚电平拉低,关闭LED delay(1000); // 等待一秒钟 }
Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压。 例如Arduino UNO的工作电压为5V,其高电平输出也是5V;Arduino Uno工作电压为3.3V,所以高电平输出也就是3.3V。
3.digitalRead ( pin ) :
在使用输入或输出功能前,你需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。
参数:
参数pin为指定读取状态的引脚编号。
返回值:
返回值为获取到的信号状态,1为高电平,0为低电平。
eg.示例程序
/* 通过2号引脚连接的按键,控制13号引脚连接的LED */ // 设置各引脚别名 ; // 连接按键的引脚 ; // 连接LED的引脚 // 变量定义 ; // 存储按键状态的变量 void setup() { // 初始化LED引脚为输出状态 pinMode(ledPin, OUTPUT); // 初始化按键引脚为输入状态 pinMode(buttonPin, INPUT); } void loop(){ // 读取按键状态并存储在变量中 buttonState = digitalRead(buttonPin); // 检查按键是否被按下 // 如果按键按下,那buttonState应该为高电平 if (buttonState == HIGH) { // 点亮LED digitalWrite(ledPin, HIGH); } else { // 熄灭LED digitalWrite(ledPin, LOW); } }
三,模拟输入输出
1.analogRead
2.analogWrite
1.analogRead ( pin ) :
模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。 它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能。 模拟输入功能需要使用analogRead() 函数。
参数:
参数pin是指定要读取模拟值的引脚,被指定的引脚必须是模拟输入引脚。如analogRead(A0),即是读取A0引脚上的模拟值。
返回值:
Arduino Uno模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
eg.示例程序
/* 光敏电阻检测环境光 http://www.arduino.cn/ */ void setup() { // 初始化串口 Serial.begin(); } void loop() { // 读出当前光线强度,并输出到串口显示 int sensorValue = analogRead(A0); Serial.println(sensorValue); delay(); }
2.analogWrite ( pin , value ) :
使用analogWrite() 函数实现PWM输出功能。
在Arduino Uno中,提供PWM功能的引脚为3、5、6、9、10、11。
在analogWrite() 和analogRead() 函数内部,已经完成了引脚的初始化,因此不用在Setup() 函数中进行初始化操作。
参数:
参数pin是指定要输出PWM波的引脚;参数value指定是PWM的脉冲宽度,范围为0~255。
返回值:
Arduino Uno模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
eg.示例程序
/* Fading 通过analogWrite() 函数实现呼吸灯效果 */ ; // LED连接在9号引脚上 void setup() { // Setup部分不进行任何处理 } void loop() { // 从暗到亮,以每次加5的形式逐渐亮起来 ; fadeValue <= ; fadeValue +=) { // 输出PWM analogWrite(ledPin, fadeValue); // 等待30ms,以便观察到渐变效果 delay(); } // 从亮到暗,以每次减5的形式逐渐暗下来 ; fadeValue >= ; fadeValue -=) { // 输出PWM analogWrite(ledPin, fadeValue); // 等待30ms,以便观察到渐变效果 delay(); } }
四,模拟输入输出
1.tone
2.pulisein
3.外部中断
1.调声函数
1)tone ( ) :
可以让指定引脚产生一个占空比为50%的指定频率的方波。
语法:
tone(pin, frequency) tone(pin, frequency, duration)
返回值:
Arduino Uno模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
2)no Tone ( pin ):
停止指定引脚上的方波输出。
语法:
noTone(pin)
参数:
pin : 余姚停止方波输出的引脚
eg.示例程序
/* Melody Plays a melody This example code is in the public domain. http://arduino.cc/en/Tutorial/Tone */ #include "pitches.h" // 记录曲子的音符 int melody[] = { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,, NOTE_B3, NOTE_C4}; // 音符持续时间 4为四分音符, 8为八分音符 int noteDurations[] = { , , , ,,,, }; void setup() { // 遍历整个曲子的音符 ; thisNote < ; thisNote++) { // noteDurations[]数组中存储的是音符的类型 // 我们需要将其换算为音符持续时间,方法如下: // 音符持续时间=1000ms / 音符类型 // 例如,四分音符=1000 / 4,8分音符 = 1000/8 /noteDurations[thisNote]; tone(, melody[thisNote],noteDuration); // 为了能辨别出不同的音调,你需要在两个音调间设置一定的延时 // 增加30%延时时间是比较合适的 int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // 停止发声 noTone(); } } void loop() { // 程序并不重复,因此这里为空 }
2.pulisein() :
检测指定引脚上的脉冲信号宽度。
例如当要检查高电平脉冲时,pulseln()会等待指定引脚输入的电平变高,当变高后开始记时,知道输入电平变低,停止计时。
pulseln()函数会返回这个脉冲信号的持续时间,即这个脉冲的宽度。
函数还可以设定超时时间,如果超时设定时间,仍未检测到脉冲,则会退出pulseln()函数并返回0.
当没有设定超时时间时,pulseln()会默认1秒钟的超时时间。
语法:
1)pulseln ( pin , value )
2)pulsein ( pin , value , timeout )
参数:
pin : 需要读取脉冲的引脚
value :需要读取的脉冲类型, HIGH OR LOW
timeout :超时时间 ,单位微秒 ,数据类型为无符号长整型。
返回值:
返回脉冲宽度 , 单位微秒 ,数据类型为无符号长整型 。 如果在指定时间内没有检测到脉冲,则返回0 .
eg.示例程序
/* SR04超声波传感器驱动 串口显示检测距离 */ // 设定SR04连接的Arduino引脚 ; ; float distance; void setup() { // 初始化串口通信及连接SR04的引脚 Serial.begin(); pinMode(TrigPin, OUTPUT); // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态 pinMode(EchoPin, INPUT); Serial.println("Ultrasonic sensor:"); } void loop() { // 产生一个10us的高脉冲去触发TrigPin digitalWrite(TrigPin, LOW); delayMicroseconds(); digitalWrite(TrigPin, HIGH); delayMicroseconds(); digitalWrite(TrigPin, LOW); // 检测脉冲宽度,并计算出距离 distance = pulseIn(EchoPin, HIGH)/ 58.00; Serial.print(distance); Serial.print("cm"); Serial.println(); delay(); }
3.外部中断
影响中断的处理程序——中断函数,当中断触发后,Arduino便会进行这个函数。
该函数不能带任何参数,且返回类型为空。如:
void Hello () { flag = ture ; }
1)attachlneterrupt ( pin , ISR , mode )
对中断引脚进行初始化设置,以开启Arduino的外部中断功能
示例:
attachinterrupt ( 2 , Hello , LOW ) ;该语句会开启Arduino Uno 的 2 号引脚(中断编号0)的外部中断功能,并指定下降沿时触发该中断。
当2号引脚上电平由高变低后,该中断会被触发,Arduino即会运行Hello ()函数中的语句。
2) detachlnterrupt ( pin )
如果你不需要使用外部中断了,你可以用中断分离函数detachlnterrupt()来关闭中断功能。
参数:
pin : 需要禁用中断的引脚。
示例:
detachlnterrupt( 2 )
eg.示例程序
/* Arduino外部中断的使用 外部中断触发警报声 */ // 默认无遮挡,蜂鸣器发声 volatile boolean RunBuzzer = true; void setup() { Serial.begin(); // 初始化外部中断 // 当2号引脚输入的电平由高变低时,触发中断函数warning attachInterrupt(, warning, CHANGE); } void loop() { if(RunBuzzer) { tone(,); } else { noTone(); } } // 中断函数 void warning () { RunBuzzer=!RunBuzzer; }
Arduino 常用函数参考文档的更多相关文章
- redis参考文档
本文为之前整理的关于redis的文档,放到博客上一份,也方便我以后查阅. redis简介 Redis是一个开源的.高性能的.基于键值对的缓存与存储系统, 通过提供多种键值数据类型来适应不同场景下的缓存 ...
- 微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html
微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 友情提示: 大家 ...
- Web Api 在线参考文档
参考文档: https://developer.mozilla.org/zh-CN/docs/Web/API
- 让IE8兼容问题,参考文档bootstrap
问题:制作的页面基本没啥问题,只有IE8不好使 参考文档:bootstrap官网 方案一 方案二
- 教您怎么从spring 官网下载参考文档
假如您使用spring,那么本经验可能帮助到您. 假如您使用spring的过程中,需要查询一些文档,那么本经验可能帮助到您. 假如您对下载spring的文档有疑惑,那么本经验可能帮助到您. 教您怎么从 ...
- nexus 参考文档
参考文档: http://books.sonatype.com/nexus-book/reference/index.html E:\e\nexus\nexus-2.12.0-01\conf\nexu ...
- Oracle官网下载参考文档
最近有人问我有没有Oracle11g数据库官方参考文档,我就想,这不是在官网可以下载到的吗,疑惑,问了之后才知道,他官网找过,但时没有找到.不要笑,其实有很多人一样是找不到的,下面就一步一步操作下: ...
- Qt5.11参考文档
Qt5.11参考文档: http://www.bim-times.com/qt/Qt-5.11.1/qtdoc/index.html (来源于Qt官网)
- RxJava 参考文档
/*************************************************************** * RxJava 参考文档 * 说明: * 最近无意中发现RxJava ...
随机推荐
- python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal
6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...
- SP1805 HISTOGRA - Largest Rectangle in a Histogram 题解
题目链接:https://www.luogu.org/problemnew/show/SP1805 分析: 我们可以用一个单调栈由低到高来存储它的高度,并用数组对每个高度记录一下它前面(包括它自己)一 ...
- android在style中使用自定义属性 error: style attribute not found.
异常: Error:(128, 5) error: style attribute 'com.honghui0531.prebiotics.view:attr/item_right_icon_src' ...
- Spark-windows安装
Spark 目的:达到能在pycharm中测试 1.安装必要的文件: JDK AnaConda spark hadoop jdk测试:java -version Anaconda测试: 打开Anaco ...
- C#3.0新增功能10 表达式树 03 支持表达式树的框架类型
连载目录 [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...
- ASP.NET Core系列(三):启动类Startup
前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144. ...
- AppBoxFuture: 二级索引及索引扫描查询数据
数据库索引对于数据查询的重要性不可言喻,因此作者在存储层实现了二级索引,以及利用索引进行扫描的功能.目前仅实现了分区表与非分区表的本地索引(数据与索引共用一个Raft组管理),全局索引及反向索引待 ...
- Java设计模式——工厂设计模式
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- laravel 5.6初学笔记
laravel 5.6初学笔记 http://note.youdao.com/noteshare?id=bf4b701b49dd035564e7145ba2d978b4 框架简介 laravel文档齐 ...
- hive show databases 添加条件
show databases like 'test012301' ; 通配符: show databases like 'a*';