Arduino入门-基本函数介绍
本帖最后由 skyone 于 2021-7-5 15:31 编辑主要内容这个帖子主要包含:Arduino核心库常用函数的用法以及示例。
主要包含以下分类:
[*]必备函数
[*]引脚控制
[*]时间相关
[*]串口通信
STM32还不太会,先水水Arduino吧(笑)
注意: 本文档由作者纯手打,请勿转载,但可以部分引用,请注明出处。
一人血书求支持MarkDown一人血书求支持MarkDown
一人血书求支持MarkDown
你们看Markdown多漂亮:
本帖最后由 skyone 于 2021-7-5 15:19 编辑
setup()
函数原型
void setup();
作用Arduino通电或复位后,即会开始执行 setup() 函数中的程序,该函数只会执行一次。
loop()
函数原型
void loop();
作用
在setup() 函数中的程序执行完后,Arduino会接着会无限循环 loop() 函数。
main() 函数呢?
我们知道,不管是C语言还是C++,程序的入口都是 main() 函数,那么为什么 Arduino 程序没有 main() 函数呢?实际上,main() 函数并没有消失,它依然是 Arduino 程序的入口,只是 Arduino 设计人员将它移到了核心库里,让我们翻看一下 Arduino 核心库的 main.cpp 文件,它在 Arduino安装目录/hardware/arduino/avr/cores/arduino 里
// main.cpp
#include <Arduino.h>
int atexit(void (* /*func*/ )()) { return 0; }
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();
}
return 0;
}注意: 一个程序不能有两个 main() 函数,Arduino 核心库已经定义了 main() 函数,因此我们的程序里不能包含 main() 函数。
示例
这个例子可以使 LED 闪烁将 LED 的正极接电阻,再接 3 号引脚,负极接 GND 引脚
/*
* Author:Skyone
* Date: 2020/02/28
*/
#define 3 LED
void setup() {
// Put your setup code here, to run once.
// 将你用于初始化的代码放在这里,这些代码只会执行一次。
pinMode(LED, OUTPUT); // 将 `LED` 引脚初始化为输出模式
}
void loop() {
// Put your main code here, to run repeatedly.
// 将你的业务函数放在这里,这些代码会一直循环的运行。
digitalWrite(LED, HIGH); // 将 `LED` 引脚设为 高电平
sleep(1000); // 停止 1 秒
digitalWrite(LED, LOW); // 将 `LED` 引脚设为 低电平
sleep(1000); // 停止 1 秒
} 本帖最后由 skyone 于 2021-7-5 15:24 编辑
引脚控制
简介
实现引脚控制的第一步是定义引脚,这一步使用 pinMode() 函数,这一步决定了该引脚是输入还是输出。然后我们使用例如 digitalWrite() 的函数控制引脚的具体电位。目录
[*]digitalWrite
[*]digitalRead
[*]analogWrite
[*]ananlogRead
函数原型
void pinMode(uint8_t pin, uint8_t mode);作用
在使用引脚前,需要先使用 pinMode() 定义引脚的模式。参数
[*]pin指定引脚的编号,如: 10 , A0 等。
[*]mode指定引脚的模式。
其中,mode 可以是以下值:
模式名称介绍
INPUT输入模式可以读取该引脚的电位
OUTPUT输出模式可以控制该引脚的输出
INPUT_PULLUP输入上拉模式启动板载电阻,使该引脚可以直接连接 5V 电压而不需要在之间另加电阻,但不能接负电位,不能接大于 5V 的电压。
示例
pinMode(3, INPUT); // 设置 3 号引脚为 输入模式
pinMode(4, OUTPUT); // 设置 4 号引脚为 输出模式
pinMode(5, INPUT_PULLUP); // 设置 5 号引脚为 输入上拉模式
函数原型
int analogRead(uint8_t pin);作用
读取指定引脚的电位,只有支持模拟输入的引脚才能调用此函数。注意: 在调用此函数之前要保证该引脚已经 pinMode 过,且为输入模式。参数
[*]pin指定引脚的编号,如: 10 , A0 等。
返回值
[*]int 整型指定的引脚的电位
返回值的范围为 0~1023示例
// 假设 4 号引脚连接的是 3V
int state = digitalWrite(4);
// state = 3 * 1023 / 5;
函数原型
void analogWrite(uint8_t pin, int val);
作用设置指定引脚的电压,而且只有支持模拟输出的引脚才能使用此函数。判断是否支持模拟输出的标志是引脚编号旁有一个小波浪线,但 Arduino Uno 中 A 开头的引脚除外,它们既支持模拟输出,又支持模拟输入。注意: 在调用此函数之前要保证该引脚已经 pinMode 过,且为输出模式。
参数
[*]pin指定引脚的编号,如: 10 , A0 等。
[*]val引脚的电平。
其中,val 的值的范围是 0~255,也就是电压位 0 对应 0, 电压为 5V 对应 255,成比例对应
示例
digitalWrite(3, 0); // 设置 3 号引脚为 0V
digitalWrite(3, 255); // 设置 3 号引脚为 5V
digitalWrite(3, 233); // 设置 3 号引脚为 (5 * 233 / 255)V
函数原型
int digitalRead(uint8_t pin);
作用
读取指定引脚的电位
注意: 在调用此函数之前要保证该引脚已经 pinMode 过,且为输入模式。
参数
[*]pin指定引脚的编号,如: 10 , A0 等。
返回值
[*]int 整型指定的引脚的电位
返回值有以下两种可能:
值名称介绍
HIGH高电平引脚电压为 5V
LOW低电平引脚电压为 0V
示例
// 假设 4 号引脚连接的是 高电平
int state = digitalWrite(4);
// state = HIGH; 也就是 stats = 1;
函数原型
void digitalWrite(uint8_t pin, uint8_t val);
作用
设置指定引脚的电位注意: 在调用此函数之前要保证该引脚已经 pinMode 过,且为输出模式。
参数
[*]pin指定引脚的编号,如: 10 , A0 等。
[*]val引脚的电平。
其中,val 可以是以下值:
值名称介绍
HIGH高电平使引脚输出5V电压
LOW低电平使引脚变为0V
示例
digitalWrite(3, HIGH);// 设置 3 号引脚为 高电平
digitalWrite(3, HIGH);// 设置 3 号引脚为 低电平
时间相关
简介控制时间分为两类:
[*]延时
[*]获取时间
目录
[*]delay
[*]delayMicrosecond
[*]millis
[*]micros
函数原型
void delay(unsigned long ms);
作用
是程序停止执行一段时间,就像 Windows 下 C 中的 sleep()
参数
[*]ms如你所加,程序暂停的时间,单位毫秒
示例
delay(1000); // 延时 1 秒
delay(333); // 延时 333 毫秒
函数原型
void delayMicroseconds(unsigned int us);
作用
是程序停止执行一段时间,就像 Linux 下 C 中的 usleep()
参数
[*]us如你所加,程序暂停的时间,单位微秒
示例
delayMicroseconds(1314); // 延时 1314 微秒
delayMicroseconds(521); // 延时 521 微秒
函数原型
unsigned long millis(void);
作用
获取 Arduino 通电后或复位后到现在的时间,单位毫秒就类似于 Python 里的 time.time() ,只不过单片机不知道现在的时间,所以不是 1970 年 1 月 1 日 0 时 0 分 0 秒起至现在的总秒数,而是Arduino 通电后或复位后到现在的时间。
返回值
[*]unsigned long 无符号整型Arduino 通电后或复位后到现在的时间,单位毫秒
示例
void setup() {
return;
}
coid loop() {
delay(500);
int time = millis();
// time 约等于 500
}
static/image/hrline/line9.png
函数原型
unsigned long micros(void);
作用
获取 Arduino 通电后或复位后到现在的时间,单位微秒
返回值
[*]unsigned long 无符号整型Arduino 通电后或复位后到现在的时间,单位微秒
示例
void setup() {
return;
}
coid loop() {
delay(500);
int time = micros();
// time 约等于 500,000
}
页:
[1]
2