skyone 发表于 2021-7-5 15:17:35

Arduino入门-基本函数介绍

本帖最后由 skyone 于 2021-7-5 15:31 编辑

主要内容这个帖子主要包含:Arduino核心库常用函数的用法以及示例。
主要包含以下分类:
[*]必备函数
[*]引脚控制
[*]时间相关
[*]串口通信
STM32还不太会,先水水Arduino吧(笑)
注意: 本文档由作者纯手打,请勿转载,但可以部分引用,请注明出处。
一人血书求支持MarkDown一人血书求支持MarkDown
一人血书求支持MarkDown


你们看Markdown多漂亮:

skyone 发表于 2021-7-5 15:18:32

本帖最后由 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:21:01

本帖最后由 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;

skyone 发表于 2021-7-5 15:21:30

函数原型

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

skyone 发表于 2021-7-5 15:21:57

函数原型

int digitalRead(uint8_t pin);
作用

读取指定引脚的电位
注意: 在调用此函数之前要保证该引脚已经 pinMode 过,且为输入模式。
参数


[*]pin指定引脚的编号,如: 10 , A0 等。
返回值


[*]int 整型指定的引脚的电位
返回值有以下两种可能:

值名称介绍
HIGH高电平引脚电压为 5V
LOW低电平引脚电压为 0V
示例

// 假设 4 号引脚连接的是 高电平
int state = digitalWrite(4);
// state = HIGH; 也就是 stats = 1;

skyone 发表于 2021-7-5 15:23:15

函数原型

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 号引脚为 低电平

skyone 发表于 2021-7-5 15:26:40

时间相关


简介控制时间分为两类:
[*]延时
[*]获取时间
目录
[*]delay
[*]delayMicrosecond
[*]millis
[*]micros

skyone 发表于 2021-7-5 15:27:14

函数原型

void delay(unsigned long ms);
作用

是程序停止执行一段时间,就像 Windows 下 C 中的 sleep()
参数


[*]ms如你所加,程序暂停的时间,单位毫秒

示例

delay(1000);    // 延时 1 秒
delay(333);   // 延时 333 毫秒

skyone 发表于 2021-7-5 15:27:40

函数原型

void delayMicroseconds(unsigned int us);
作用

是程序停止执行一段时间,就像 Linux 下 C 中的 usleep()
参数


[*]us如你所加,程序暂停的时间,单位微秒

示例

delayMicroseconds(1314);    // 延时 1314 微秒
delayMicroseconds(521);   // 延时 521 微秒

skyone 发表于 2021-7-5 15:28:53

函数原型

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
查看完整版本: Arduino入门-基本函数介绍