Arduino 常用函数参考文档

一、程序结构

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 ) :

在使用输入或输出功能前,你需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。

参数:
1、参数pin为指定配置的引脚编号
2、参数mode为指定的配置模式
3、通常可用模式有三种:
4、INPUT 输入模式
5、OUTPUT 输出模式
6、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 ( 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.调声函数

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;
}

转载:https://www.bbsmax.com/A/VGzlae21Jb/

Arduino程序设计基础实验说明文档Arduino编程学习例程40个合集: 实验一 Hello World.docx 实验七 自动补光实验.docx 实验三 按键控制LED.docx 实验三十 红外接收.docx 实验三十一 遥控家电.docx 实验三十三 电位器控制舵机角度.docx 实验三十二 认识舵机.docx 实验三十五 自动降温.docx 实验三十四 可调速小风扇.docx 实验九 声控灯.docx 实验二 流水灯.docx 实验二十 学会使用MQ2烟雾传感器.docx 实验二十一 烟雾报警.docx 实验二十七 距离检测.docx 实验二十三 温度报警.docx 实验二十九 红外发射.docx 实验二十二 闯入报警.docx 实验二十五 串口控制RGBled调光.docx 实验二十八 74HC595.docx 实验二十六 超声波测距.docx 实验二十四 认识RGBled.docx 实验五 电位器控制呼吸灯频率.docx 实验八 检测声音大小.docx 实验六 光敏电阻检测光亮度.docx 实验十 触摸传感器的使用.docx 实验十七 简易电子琴.docx 实验十三 人体感应灯.docx 实验十九 外部中断触发蜂鸣器报警.docx 实验十二 人体感应模块的应用.docx 实验十五 蜂鸣器的使用.docx 实验十八 红外避障传感器的应用.docx 实验十六 播放音乐.docx 实验十四 电子温度计.docx 实验四 呼吸灯.docx 拓展实验 12864.docx 拓展实验 1602显示串口数据.docx 拓展实验 DHT11温湿度检测模块的使用.docx 拓展实验 使用数字电位器AD5206.docx 拓展实验 制作电子时钟.docx 拓展实验1602 LCD的使用.docx
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值