Arduino主要函数使用介绍

lcysts
34
2025-07-21

1. pinMode函数

void pinMode(uint8_t pin, uint8_t mode);

该函数的作用是设置某个引脚的工作模式,各个参数的作用如下:

  • pin:需要设置的引脚编号,比如对于ESP32开发板,pin值可以取GPIO后面的编号,例如,11,12,13

  • mode:需要设置引脚为哪一种工作模式,工作模式取值可为:

  • INPUT:输入模式,表示从外围设备向ESP32输入信号,比如从某个传感器的信号引脚读取传感器数据;

  • OUTPUT:输出模式,表示从发ESP32开发板向外围设备输出信号,比如通过ESP32引脚的高低电平控制LED灯的亮灭;

  • INPUT_PULLUP:输入上拉模式,和INPUT的不同之处在于,INPUT模式在引脚未连接外围设备的时候,引脚处于浮空状态,电平信号不确定,可能是高电平,也可能是低电平,但是INPUT_PULLUP模式,在引脚浮空状态下,会启用GPIO内部的上拉电阻,将引脚默认设置为高电平;

  • INPUT_PULLDOWN:输入下拉模式,和INPUT_PULLUP类似,只不过浮空状态会启用GPIO内部下拉电阻,将引脚默认设置为低电平。


特别提示:

  1. 当引脚设置为OUTPUT模式后,依然可以读取该引脚上的电平信号,但是当引脚设置为INPUT模式后,一定不能向该引脚输出高/低电平

  1. 并不是所有引脚都支持上述四种工作模式,比如ESP32上的GPIO34、GPIO35、GPIO36、GPIO39这些引脚就只支持INPUT一种模式。

2. digitalWrite函数

void digitalWrite(uint8_t pin, uint8_t val);

该函数的作用是往某个数字引脚输出高/低电平,各个参数作用如下:

  • pin:需要输出的引脚的编号,比如11、12、13

  • val:需要设置的电平的值,取值可为两种:
    HIGH:高电平,HIGH为Arduino框架内部的宏定义,实际值为1,对于ESP32来说,高电平的电压接近3.3V
    LOW:低电平,LOW为Arduino框架内部的宏定义,实际值为0,对于ESP32来说,低电平的电压范围接近0V


温馨提示

该函数输出的是数字信号,非零即一,只能控制开/关,无法控制强度、亮度、转速等

3. digitalRead函数

int digitalRead(uint8_t pin);

该函数的作用是从某个数字引脚读取电平信号,返回值为1(或者HIGH,表示高电平)或者0(或者LOW,表示低电平),参数作用如下:

  • pin:需要读取电平信号的引脚的编号,比如11、12、13

4. analogWrite函数

void analogWrite(uint8_t pin, int value);

该函数的作用是往某个支持PWM的引脚输出PWM信号,PWM信号的作用主要用于电机调速,LED灯亮度控制灯,关于PWM`的用法,后续章节将详细讲解,也会有更多高阶玩法,函数各个参数的作用如下:

  • pin:支持PWM信号的引脚,ESP32上,所有支持OUTPUT的引脚都支持输出PWM信号;

  • value:PWM的值,取值范围为[0,255],值越大,LED亮度越大,电机转速越快,反之亦然。

5. analogRead函数

int digitalRead(uint8_t pin);

该函数的作用是从某个模拟引脚读取模拟信号的值,返回值与单片机ADC位数有关系,比如10位的ADC,则返回值为0到2的10次方减一,也就是[0, 1023], 12位的ADC,则返回值为[0, 4095],这意味着ESP32可以将0-3.3伏特的电压输入信号映射到数值0-4095。参数作用如下:

  • pin:引脚编号,比如11、12、13


温馨提示:

在模拟输入引脚没有任何连接的情况下,用analogRead()指令读取该引脚,这时获得的返回值为不固定的数值。这个数值可能受到多种因素影响,如将手靠近引脚也可能使得该返回值产生变化。

6. delay函数

void delay(uint32_t ms);

该函数的作用是让程序在调用该函数的地方延迟(等待)一段时间,时间单位是毫秒(ms)

7. delayMicroseconds函数

void delayMicroseconds(uint32_t us);

该函数与delay函数作用一样,只是时间单位换成了微秒(us)

8.millis()函数

  • 功能:返回自Arduino板上电以来经过的毫秒数。

  • 返回值:无符号长整型。

  • 示例:unsigned long current_time = millis(); 获取当前时间。

9.Arduino内置数学库

提供了一系列数学函数,如三角函数(sin、cos、tan)、对数函数(log、log10)、指数函数(exp)、幂函数(pow)等。使用这些函数前,需在代码中包含<math.h>头文件。

10.Serial.begin(baud)

  • 功能:初始化串口通信并设置波特率。

  • 参数:baud(波特率,如9600、19200等)。

  • 示例:Serial.begin(9600); 初始化串口通信并设置波特率为9600。

11.Serial.print()

  • 功能:向串口发送数据,不自动换行。

  • 示例:Serial.print("Hello, World!"); 向串口发送字符串。

12.Serial.println()

  • 功能:向串口发送数据,并在末尾添加换行符。

  • 示例:Serial.println("Hello, World!"); 向串口发送字符串并换行。

13.map(value, in_min, in_max, out_min, out_max)

  • 功能:将一个值从一个范围映射到另一个范围。

  • 参数:value(要映射的值),in_min和in_max(输入范围的最小值和最大值),out_min和out_max(输出范围的最小值和最大值)。

  • 返回值:映射后的值。

  • 示例:int pwm_value = map(analog_value, 0, 1023, 0, 255); 将0~1023之间的模拟信号值映射到0~255之间的PWM信号值。

14.random(min, max)

  • 功能:生成一个指定范围内的随机数。

  • 参数:min(最小值),max(最大值,不包括此值)。

  • 返回值:指定范围内的随机整数。

  • 示例:int randNum = random(1, 101); 生成1到100之间的随机整数。

15.tone(pin, frequency)

  • 功能:在指定引脚上产生固定频率的PWM信号,通常用于驱动扬声器发声。

  • 参数:pin(数字引脚编号),frequency(频率,单位为赫兹)。

  • 示例:tone(8, 440); 在引脚8上产生440Hz的PWM信号。

16.noTone(pin)

  • 功能:停止在指定引脚上产生PWM信号。

  • 参数:pin(数字引脚编号)。

  • 示例:noTone(8); 停止在引脚8上产生PWM信号。

17.pulseIn(pin, value)

  • 功能:读取指定引脚上脉冲的持续时间。

  • 参数:pin(数字引脚编号),value(HIGH或LOW,指定要测量的脉冲类型)。

  • 返回值:脉冲持续时间,单位为微秒。

  • 示例:long duration = pulseIn(3, HIGH); 读取引脚3上的高电平脉冲持续时间。

18.vTaskDelete(TaskHandle_t xTaskToDelete)

  • 表示要删除的任务的句柄,这个句柄就是上面xTaskCreate函数中传入的最后一个参数~,如果参数设置为NULL,表示删除当前任务。一般建议,该函数在每个任务运行结束时传入NULL调用,不建议跨任务删除,有些情况下会产生一些不可预知的问题。

19.attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode)

  • pin:中断触发的中断号,虽然对于ESP32,这个参数可以直接写GPIO引脚编号,但是建议尽量调用digitalPinToInterrupt函数,将原始GPIO引脚转换成中断系统中的对应编号使用,比如digitalPinToInterrupt(23),ESP32能直接使用GPIO编号,是因为对于ESP32,digitalPinToInterrupt函数的返回值就是原样返回,但对于其他类型的单片机,逻辑就不一样了

  • intRoutine:中断处理函数,就是当触发中断时,需要执行的操作,注意这个操作应该尽可能轻量,不能将繁重的工作写在中断处理函数中,这样会极大降低单片机响应,最糟糕时可能导致单片机重启

  • mode:中断触发的模式,一共有以下几种模式可选

20.detachInterrupt(uint8_t pin)

  • 该函数用于解除某个中断号的中断逻辑

  • pin:要取消中断程序的中断号,同样地,建议调用digitalPinToInterrupt函数来将GPIO编号转换成中断号

动物装饰