Arduino API不完全手册

Arduino编程主要涉及程序结构,包括setup()和loop()函数,控制语句如if、for和while,以及中断操作。数据类型包括基本的整型、浮点型和布尔型,还有变量作用域的概念。此外,文章还介绍了数字和模拟I/O、时间函数、数学库以及串口通讯的相关函数和方法。
摘要由CSDN通过智能技术生成

程序结构

在 Arduino 中,标准的程序入口 main() 函数在内部被定义,用户只需要关心以下两个函数:

void setup()

setup() 函数用于初始化,一般放在程序开头,用于设置一些引脚的输出/输入模式,初始化串口通讯等类似工作。

void loop()

loop() 函数用于执行,loop() 函数中的代码将被循环执行,例如读取引脚状态、设置引脚输出状态等。

控制语句

Arduino 支持多种控制语句,包括:

if

条件语句 if,用于根据条件执行不同的代码块。

if...else

条件语句 if...else,用于在满足条件时执行一个代码块,否则执行另一个代码块。

for

循环语句 for,用于循环执行一段代码固定次数。

switch

选择语句 switch,用于根据表达式的值执行不同的代码块。

while

循环语句 while,用于在满足条件时循环执行一段代码。

do...while

循环语句 do...while,用于至少执行一次代码块,并在满足条件时继续循环执行。

break

控制语句 break,用于跳出循环或 switch 语句。

continue

控制语句 continue,用于跳过当前循环的剩余代码,继续下一次循环。

return

控制语句 return,用于从函数中返回一个值。

goto

控制语句 goto,用于无条件地跳转到程序中的另一位置。

相关语法

在 Arduino 编程中还有一些其他常用的语法元素,包括:

; (分号)

分号 ; 用于在语句的末尾表示语句的结束。

{} (大括号)

大括号 {} 用于定义代码块,用于将多个语句组合在一起。

// (单行注释)

双斜杠 // 用于表示单行注释,注释的内容将被编译器忽略。

/* */ (多行注释)

多行注释 /* */ 用于表示多行注释,注释的内容将被编译器忽略。

#define

预处理指令 #define,用于定义常量或宏。

#include

预处理指令 #include,用于包含外部头文件。

算术运算符

  • =(赋值):将右侧的值赋给左侧的变量。
  • +(加):执行加法运算。
  • -(减):执行减法运算。
  • *(乘):执行乘法运算。
  • /(除):执行除法运算。
  • %(取模):计算除法的余数。

比较运算符

  • ==(等于):判断两个值是否相等。
  • !=(不等于):判断两个值是否不等。
  • <(小于):判断左侧的值是否小于右侧的值。
  • >(大于):判断左侧的值是否大于右侧的值。
  • <=(小于等于):判断左侧的值是否小于等于右侧的值。
  • >=(大于等于):判断左侧的值是否大于等于右侧的值。

布尔运算符

  • &&(逻辑与):执行逻辑与操作,当两个条件都为真时返回真,否则返回假。
  • ||(逻辑或):执行逻辑或操作,当两个条件中至少有一个为真时返回真,否则返回假。
  • !(逻辑非):执行逻辑非操作,将真变为假,将假变为真。

指针运算符

  • *(指针运算符):用于声明指针变量,或者在解引用指针时获取指针所指向的值。
  • &(地址运算符):用于获取变量的内存地址。

位运算符

  • &(位与):对两个二进制数的每一位执行与操作。
  • |(位或):对两个二进制数的每一位执行或操作。
  • ^(位异或):对两个二进制数的每一位执行异或操作。
  • ~(位非):对一个二进制数的每一位执行取反操作。
  • <<(左移):将一个二进制数的所有位向左移动指定的位数。
  • >>(右移):将一个二进制数的所有位向右移动指定的位数。

端口操作

Arduino 端口操作是指通过编程语言来操作 Arduino 开发板上的数字和模拟端口,以控制外部电路或读取传感器数据等。

  • pinMode(pin, mode): 设置指定数字端口(pin)的模式为输入(INPUT)或输出(OUTPUT)。
  • digitalWrite(pin, value): 将指定数字端口(pin)的电平设置为 HIGH 或 LOW。
  • digitalRead(pin): 读取指定数字端口(pin)的电平状态,返回 HIGH 或 LOW。
  • analogWrite(pin, value): 向指定 PWM(脉冲宽度调制) 输出引脚(pin)写入一个占空比(value),控制 LED 亮度或马达转速等。
  • analogRead(pin): 读取指定模拟端口(pin)的模拟值(0~1023),用于读取模拟传感器的数据。

中断操作

Arduino 中断操作是指通过编程语言来实现硬件中断的功能,即当特定事件发生时,Arduino 可以立即停止当前正在执行的程序并跳转到中断服务程序中执行一段特定的代码,完成相应的处理后再返回原程序执行状态。

  • attachInterrupt(digitalPinToInterrupt(pin), ISR, mode): 将一个中断函数(ISR)附加到指定数字引脚(pin)的中断服务程序中,当该引脚触发指定的电平变化(mode)时,将调用中断函数。
  • detachInterrupt(digitalPinToInterrupt(pin)): 取消指定数字引脚上的中断服务程序。
  • noInterrupts(): 禁用所有中断。
  • interrupts(): 启用所有中断。

中断触发

中断触发是指当硬件上特定的事件发生时,通过中断引脚通知 Arduino 控制器来触发中断,从而实现相应的处理。在 Arduino 开发板上,可以使用 attachInterrupt() 函数来配置中断触发方式,主要有以下几种类型:

  • LOW: 当引脚电平为低电平时触发中断。
  • CHANGE: 当引脚电平状态发生变化时触发中断。
  • RISING: 当引脚电平从低电平变为高电平时触发中断。
  • FALLING: 当引脚电平从高电平变为低电平时触发中断。

const int buttonPin = 2;

const int ledPin = 13;

void setup() {

  pinMode(buttonPin, INPUT_PULLUP);

  pinMode(ledPin, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, FALLING);

}

void loop() {

  // do something else here

}

void buttonPressed() {

  digitalWrite(ledPin, !digitalRead(ledPin)); // change led status

}

注意:
  在中断函数中 delay函数不能使用。
  在使用 millis函数始终返回进入中断前的值。
  读取串行数据的话,可能会丢失。
  中断函数中使用的变量需要定义为 volatile 类型。
  detachInterrupt(interrupt); //取消中断
  interrupt为所要取消的中断源。

复合运算符

在编程中,复合运算符是一种结合了赋值运算符和其他运算符的运算符,可以简化代码并提高效率。以下是一些常见的复合运算符以及它们的功能:

  • ++(自加):将变量的值加 1,并将结果赋值给该变量。
  • --(自减):将变量的值减 1,并将结果赋值给该变量。
  • +=(复合加):将右侧操作数的值加到左侧操作数,并将结果赋值给左侧操作数。
  • -=(复合减):将右侧操作数的值从左侧操作数中减去,并将结果赋值给左侧操作数。
  • *=(复合乘):将右侧操作数的值乘以左侧操作数,并将结果赋值给左侧操作数。
  • /=(复合除):将左侧操作数的值除以右侧操作数,并将结果赋值给左侧操作数。
  • &=(复合与):将左侧操作数与右侧操作数进行按位与运算,并将结果赋值给左侧操作数。
  • |=(复合或):将左侧操作数与右侧操作数进行按位或运算,并将结果赋值给左侧操作数。

常量

在编程中,常量是指在程序运行时不可更改的固定值。以下是一些常见的常量及其功能:

  • HIGH/LOW:表示数字输出引脚的高电平和低电平,分别对应 5V 和 0V。
  • INPUT/OUTPUT/INPUT_PULLUP:表示数字引脚的输入、输出和上拉输入模式,可以通过 pinMode() 函数设置引脚模式。
  • true/false:表示布尔类型的真和假。
  • PI:表示圆周率,约等于 3.14159。
  • SERIAL/INPUT/SOFTWARE/EXTERNAL:表示不同类型的串口,可以通过 Serial.begin() 函数设置串口的波特率和其他参数。
  • LED_BUILTIN:表示内置 LED 灯所连接的数字引脚。

整数常量

在 Arduino 中,整数常量是表示整数值的不可变标识符,可以使用以下格式来定义:const int constantName = value;

其中,constantName 是常量的名称,value 是常量的值。常量的名称一般使用大写字母,以便与变量区分。常量的值可以是任何整数,包括正数、负数和零。

例如,以下代码定义了一个名为 LED_PIN 的整数常量,其值为 13:const int LED_PIN = 13;

在程序中,我们可以使用 LED_PIN 常量来代替数字 13,从而使代码更加易读和易于维护:

void setup() {

pinMode(LED_PIN, OUTPUT);

}

void loop() {

digitalWrite(LED_PIN, HIGH);

delay(1000);

digitalWrite(LED_PIN, LOW);

delay(1000);

}

使用常量的好处是,如果我们需要更改 LED 灯的引脚,只需要更改常量的值,而不需要在整个程序中查找并更改所有出现的数字 13。这可以使代码更加易于维护和重用。

数据类型

在 Arduino 中,有多种数据类型可供使用,用于存储和处理不同类型的数据。以下是常用的 Arduino 数据类型及其取值范围:

  • void:无类型,表示没有返回值的函数或方法。
  • word:字组,表示无符号 16 位整数,取值范围为 0 到 65535。
  • boolean:布尔型,表示逻辑值,取值范围为 0(假)或 1(真),占用 1 位。
  • char:字符型,表示有符号 8 位整数,取值范围为 -128 到 +127。
  • unsigned char:无符号字符型,表示无符号 8 位整数,取值范围为 0 到 255。
  • short:短整型,表示有符号 16 位整数,取值范围为 -32768 到 +32767。
  • byte:字节型,表示无符号 8 位整数,取值范围为 0 到 255,占用 8 位。
  • int:整型,表示有符号 32 位整数,取值范围为 -2147483648 到 +2147483647。
  • unsigned int:无符号整型,表示无符号 16 位整数,取值范围为 0 到 65535。
  • long:长整型,表示有符号 32 位整数,取值范围为 -2147483648 到 +2147483647。
  • unsigned long:无符号长整型,表示无符号 32 位整数,取值范围为 0 到 4294967295。
  • float:单精度浮点型,表示单精度浮点数,取值范围为 -3.4028235E+38 到 +3.4028235E+38。
  • double:双精度浮点型,表示双精度浮点数。
  • string:字符串型,表示字符串数据。
  • array:数组型,用于存储一系列相同类型的数据。

在 Arduino 中,可以使用不同的函数和方法进行数据类型转换。以下是一些常见的数据类型转换示例:

char():将整数转换为字符型。例如:

int i = 65;

char c = char(i); // 将整数 65 转换为字符 'A'

byte():将整数转换为字节型。例如:

int i = 255; byte b = byte(i); // 将整数 255 转换为字节 0xFF

int():将浮点数或字符型转换为整型。例如:

float f = 3.14;

int i = int(f); // 将浮点数 3.14 转换为整数 3

char c = '5';

int i = int(c); // 将字符 '5' 转换为整数 5

word():将整数或字符型转换为字组型(无符号 16 位整数)。例如:

int i = 65535;

word w = word(i); // 将整数 65535 转换为字组 0xFFFF

char c = 'A';

word w = word(c); // 将字符 'A' 转换为字组 0x0041

long():将整数或浮点数转换为长整型。例如:

int i = 12345;

long l = long(i); // 将整数 12345 转换为长整型 12345

float f = 3.14;

long l = long(f); // 将浮点数 3.14 转换为长整型 3

float():将整数或浮点数转换为单精度浮点型。例如:

int i = 12345;

float f = float(i); // 将整数 12345 转换为单精度浮点数 12345.0

long l = 987654321;

float f = float(l); // 将长整型 987654321 转换为单精度浮点数 987654336.0

需要注意的是,在进行数据类型转换时,可能会出现数据溢出或精度丢失的情况,需要根据具体的需求和数据范围进行合理的转换处理。

变量作用域

在 Arduino 中,变量作用域指的是变量在程序中的可访问范围。以下是一些常见的变量作用域:

  • static (静态变量): 用于定义静态变量,这些变量在函数调用结束后不会被释放,而是保留其值。静态变量在函数调用间保持持久性,可以在多次调用同一个函数时保留其值。例如:

void myFunction() {

static int counter = 0; // 静态变量

counter++; Serial.println(counter);

}

  • volatile (易变变量): 用于定义易变的变量,例如中断服务程序中需要修改的变量。由于中断可能在任何时候发生,因此中断服务程序中访问的变量应声明为 volatile,以确保编译器不会对其进行优化。例如:


volatile int flag = 0; // 易变变量

void interruptServiceRoutine() {

flag = 1; // 修改易变变量

}

  • const (不可改变变量): 用于定义不可变的常量,其值在定义后不能被修改。常量在程序执行期间保持不变,可以用于存储固定的数值或者字符串等。例如:


const int MAX_VALUE = 100; // 不可改变的常量

const float PI = 3.14159; // 不可改变的常量

请注意,在使用变量作用域和修饰符时,需要根据需求和编程逻辑合理地选择合适的作用域和修饰符来管理变量的生命周期和访问权限。

辅助工具

在 Arduino 编程中,有一些辅助工具可以帮助我们进行编码和调试:

  • sizeof() (sizeof运算符): sizeof 是一个运算符,用于获取变量或数据类型所占用的字节数。它可以用于任何数据类型,包括基本数据类型、数组、结构体和类等。例如:

int myVar = 42;

size_t size = sizeof(myVar); // 获取 myVar 变量所占用的字节数

  • ASCII码表: ASCII 码表是计算机使用的一种字符编码表,它将每个字符映射到一个唯一的数字。ASCII 码表共包含 128 个字符,编号从 0 到 127。其中,前 32 个字符是控制字符,用于控制计算机的输入和输出,后 96 个字符是可打印字符,包括字母、数字、标点符号等。在 Arduino 编程中,可以使用 ASCII 码表来进行字符处理和编码转换等操作。例如:

char c = 'A';

int asciiValue = c; // 获取字符 'A' 的 ASCII 码值

Serial.println(asciiValue); // 输出 ASCII 码值

这些辅助工具在 Arduino 编程中可以帮助我们进行更加灵活和高效的编码和调试,提升代码的可读性和可维护性。

以下是 ASCII 码表中的一些常见字符及其对应的编号:

字符

编号

字符

编号

字符

编号

字符

编号

NUL0SP32048A65
SOH1!33149B66
STX2"34250C67
ETX3#35351D68
EOT4$36452E69
ENQ5%37553F70
ACK6&38654G71
BEL7'39755H72
BS8(40856I73
TAB9)41957J74
LF10*42:58K75
VT11+43;59L76
FF12,44<60M77
CR13-45=61N78
SO14.46>62O79
SI15/47?63P80
DLE16048@64Q81
DC117149A65R82
DC218250B66S83
DC319351

基本函数

数字I/O

在 Arduino 编程中,数字I/O(数字输入/输出)是常用的操作,用于控制引脚的电平状态和读取引脚的电压值。以下是一些常用的数字I/O函数:

  • pinMode(pin, mode)pinMode 函数用于配置引脚的输入或输出模式。它是一个无返回值的函数,有两个参数:pin 表示要配置的引脚,mode 表示设置的模式,可以是 INPUT(输入模式)、OUTPUT(输出模式)或 INPUT_PULLUP(输入模式,且引脚内部拉高)。

示例:

int ledPin = 13;

pinMode(ledPin, OUTPUT); // 将引脚 13 配置为输出模式

  • digitalWrite(pin, value)digitalWrite 函数用于设置引脚的输出电平。它是一个无返回值的函数,有两个参数:pin 表示要设置输出电平的引脚,value 表示输出电压,可以是 HIGH(高电平)或 LOW(低电平)。

示例:

int ledPin = 13;

digitalWrite(ledPin, HIGH); // 将引脚 13 的输出电平设置为高电平

  • int digitalRead(pin)digitalRead 函数用于读取引脚的电压值,通常用于输入情况。它有一个参数 pin 表示要读取电压值的引脚,返回值为 int 类型,表示引脚的电压情况,可以是 HIGH(高电平)或 LOW(低电平)。

示例:

int buttonPin = 2;

int buttonState = digitalRead(buttonPin); // 读取引脚 2 的电压值

这些函数在 Arduino 编程中用于控制引脚的输入和输出,实现数字信号的处理和控制逻辑的实现。

模拟I/O

模拟I/O函数主要用于读取和设置引脚的模拟电压值,以及设置模拟参考电压。以下是一些常用的模拟I/O函数:

  1. analogRead(pin); //读取引脚的电压值

    analogRead函数用于读取引脚的模拟量电压值,每一次读取需要消耗的时间为 100us。参数 pin 参数表示要获取模拟量电压值的引脚,该函数返回值为 int 类型,表示模拟量电压值,范围在 0~1023。

  2. analogWrite(pin, value); //设置引脚输出模拟量(PWM)

    通过指定引脚输出模拟量(PWM),可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊PWM波形,直到下次调用 analogWrite()(或在同一引脚使用 digitalRead()或 digitalWrite())。PWM信号的频率大约是 490Hz。

    在大多 Arduino 板(ATmega168或ATmega328)上,只有引脚3,5,6,9,10和11可以实现该功能。Arduino Mega 上,引脚2~13可以实现该功能。Arduino 旧版本的板子 (ATmega8) 只有9,10,11可以使用 analogWrite()。

    在使用 analogWrite()前,不需要使用 pinMode()来设定引脚。analogWrite函数与模拟引脚、analogRead函数没有直接关系。

  3. analogReference(type); //设置模拟参考电压

    analogReference函数的作用是配置引脚的参考电压。在嵌入式应用中引脚获取模拟电压值之后,将根据参考电压将模拟值转换到0~1023。该函数为无返回值函数,参考为 mode 类型,有 3 种类型(DEFAULT/INTERNAL/EXTERNAL),具体含义如下所表示。

    DEFAULT:预设置,参考电压5V INTERNAL:低电压模式,使用偏内基准电压源。 INTERNAL1V1:1V的内基准电压源(只能在 Arduino Mega 使用) INTERNAL2V56:2.56V的内基准电压源(只能在 Arduino Mega 使用) EXTERNAL:扩展模式,通过 AREF 引脚获取参考电压

    实际电压 = (analogRead(pin)*基准电压)/1024;

高级I/O

shiftOut(dataPin, clockPin, bitOrder, val)

shiftOut(dataPin, clockPin, bitOrder, val) 函数用于将一个字节(8位)的数据从数据引脚(dataPin)以串行方式输出。数据从最高有效位(最左边)或最低有效位(最右边)开始输出,根据 bitOrder 参数的设置。在数据引脚上依次写入每一位数据后,通过时钟引脚(clockPin)的高低电平来指示数据的有效性。

注意:如果连接的设备时钟类型为上升沿触发时,应在调用 shiftOut() 函数前将时钟引脚设置为低电平,例如使用 digitalWrite(clockPin, LOW)

这是一个软件实现的功能,Arduino还提供了硬件实现的SPI函数库,速度更快但仅在特定引脚上有效。

参数说明:

  • dataPin:数据输出引脚,每一位数据将逐次输出。引脚的模式需要设置为输出。
  • clockPin:时钟输出引脚,为数据输出提供时钟信号,引脚的模式需要设置为输出。
  • bitOrder:数据位移顺序,选择字符的高位先入(MSBFIRST)或低位先入(LSBFIRST)。该参数为 byte 类型。
  • val:要输出的数据,为一个字节(8位)。

shiftOut() 函数可以通过串行方式在引脚上输出数据,相当于一般意义上的同步串行通信,这是控制器与控制器、控制器与传感器之间常用的一种通信方式。

pulseIn(pin, state, timeout)

pulseIn(pin, state, timeout) 函数用于读取指定引脚上的脉冲时长。

参数说明:

  • pin:要读取脉冲的引脚编号。
  • state:要读取引脚上的脉冲的电平状态,可以是 HIGH 或 LOW
  • timeout:最大的读取时长,单位为微秒(us)。

pulseIn() 函数会在指定引脚上等待脉冲出现,并返回脉冲的持续时间。如果超过设置的最大读取时长(timeout),函数将返回0。这个函数在测量脉冲宽度或读取脉冲信号时非常有用。

时间函数

millis();

函数描述

millis() 函数可通过返回值获取Arduino板的运行时间长度,单位为毫秒。系统最长的记录时间为9小时22分,如果超出时间从0开始计数。函数返回值为 unsigned long 型,无参数。

示例

unsigned long currentTime = millis(); // 获取当前的毫秒数

delay(ms);

函数描述

delay() 函数是一个用于实现延时的函数,其中参数表示要设置的延时时间,单位为毫秒。在程序中可以使用 delay() 函数来暂停程序的执行,用于实现定时、延时等功能。

参数

  • ms:要延时的时间,单位为毫秒。

示例

delay(1000); // 延时1秒

delayMicroseconds(us);

函数描述

delayMicroseconds() 函数是一个用于实现微秒级延时的函数,其中参数表示要设置的延时时间,单位为微秒。在程序中可以使用 delayMicroseconds() 函数来实现精确的微秒级延时。

参数

  • us:要延时的时间,单位为微秒。

示例

delayMicroseconds(500); // 延时500微秒

数学库

min(x, y)

函数描述

min() 函数返回两个参数中较小的值。

参数

  • x:要比较的第一个参数。
  • y:要比较的第二个参数。

max(x, y)

函数描述

max() 函数返回两个参数中较大的值。

参数

  • x:要比较的第一个参数。
  • y:要比较的第二个参数。

abs(x)

函数描述

abs() 函数返回参数的绝对值。

参数

  • x:要求绝对值的参数。

constrain(amt, low, high)

函数描述

constrain() 函数用于限制一个值在指定的范围内。

参数

  • amt:要限制的值。
  • low:范围的下限。
  • high:范围的上限。

返回值

  • 如果 amt 小于 low,则返回 low 的值。
  • 如果 amt 大于 high,则返回 high 的值。
  • 如果 amt 在 low 和 high 之间,则返回 amt 的值。

map(x, in_min, in_max, out_min, out_max)

函数描述

map() 函数用于将一个范围内的值映射到另一个范围内,进行比例缩放。

参数

  • x:要映射的值。
  • in_min:原始范围的最小值。
  • in_max:原始范围的最大值。
  • out_min:映射后范围的最小值。
  • out_max:映射后范围的最大值。

返回值

将 x 在原始范围 [in_min, in_max] 内的值映射到 [out_min, out_max] 范围内的值。

pow(base, exponent)

函数描述

pow() 函数用于计算一个数的指定次方。

参数

  • base:底数。
  • exponent:指数。

返回值

返回 base 的 exponent 次方的值。

sqrt(x)

函数描述

sqrt() 函数用于计算一个数的平方根。

参数

  • x:要计算平方根的数。

返回值

返回 x 的平方根。

sin(rad)

函数描述

sin() 函数用于计算一个角度的正弦值。

参数

  • rad:要计算正弦值的角度,单位为弧度。

返回值

返回角度 rad 的正弦值。

cos(rad)

函数描述

cos() 函数用于计算一个角度的余弦值。

参数

  • rad:要计算余弦值的角度,单位为弧度。

返回值

返回角度 rad 的余弦值。

tan(rad)

函数描述

tan() 函数用于计算一个角度的正切值。

参数

  • rad:要计算正切值的角度,单位为弧度。

返回值

返回角度 rad 的正切值。

randomSeed(seed)

函数描述

randomSeed() 函数用于初始化随机数生成器的种子,从而生成伪随机数序列。

参数

  • seed:随机数生成器的种子,可以是任意的长整型值。

返回值

无返回值。

random(max)

函数描述

random() 函数用于生成一个伪随机数。

参数

  • max:生成的随机数的上限(不包括上限值),取值范围为 0 到 max-1

返回值

返回一个伪随机数,取值范围为 0 到 max-1

random(howsmall, howbig)

函数描述

random() 函数用于生成一个伪随机数。

参数

  • howsmall:生成的随机数的下限(包括下限值)。
  • howbig:生成的随机数的上限(不包括上限值)。

返回值

返回一个伪随机数,取值范围为 howsmall 到 howbig-1

以上是随机数相关函数的介绍,可以通过调用这些函数来生成伪随机数用于模拟噪声信号等应用。注意,随机数生成器是伪随机的,生成的随机数序列在相同的种子下是确定性的,因此可以使用 randomSeed() 函数来设置种子以产生不同的随机数序列。

字符串(string)

charAt(n)

函数描述

charAt() 函数用于获取字符串中的第 n 个字符。

参数

  • n:要获取的字符的索引值,从 0 开始计数。

返回值

返回字符串中第 n 个字符。

compareTo(string2)

函数描述

compareTo() 函数用于比较两个字符串的大小关系。

参数

  • string2:要比较的字符串。

返回值

如果两个字符串相等,返回 0;如果当前字符串小于 string2,返回负值;如果当前字符串大于 string2,返回正值。

concat(string2)

函数描述

concat() 函数用于将一个字符串拼接到另一个字符串的末尾。

参数

  • string2:要拼接的字符串。

返回值

返回拼接后的字符串。

endsWith(string2)

函数描述

endsWith() 函数用于判断一个字符串是否以指定的字符串结尾。

参数

  • string2:要判断的字符串。

返回值

如果当前字符串以 string2 结尾,返回 true;否则返回 false

equals(string2)

函数描述

equals() 函数用于判断两个字符串是否相等。

参数

  • string2:要判断的字符串。

返回值

如果两个字符串相等,返回 true;否则返回 false

equalsIgnoreCase(string2)

函数描述

equalsIgnoreCase() 函数用于判断两个字符串是否相等,忽略大小写。

参数

  • string2:要判断的字符串。

返回值

如果两个字符串相等,忽略大小写,返回 true;否则返回 false

getBytes()

函数描述:将字符串复制到目标变量中,类似于函数 toCharArray() 的功能。 用法:string1.getBytes(buf, len);

  • string1:原始字符串
  • buf:目标变量,用于存储复制后的字符串
  • len:字符串长度 返回值:无

indexOf()

函数描述:在字符串中查找特定字符,并返回位置。 用法:string1.indexOf(val); 或者 string1.indexOf(val, from);

  • string1:原始字符串
  • val:要查找的关键字,可以是字符或字符串
  • from:可选参数,指定从哪个位置开始查找关键字 返回值:成功返回位置,失败返回-1

lastIndexOf()

函数描述:在字符串中反向查找特定字符串,并返回位置。 用法:string1.lastIndexOf(val); 或者 string1.lastIndexOf(val, from);

  • string1:原始字符串
  • val:要查找的关键字,可以是字符或字符串
  • from:可选参数,指定从哪个位置开始反向查找关键字 返回值:成功返回位置,失败返回-1

length()

函数描述:测量字符串的长度。 用法:string1.length();

  • string1:要测量长度的字符串 返回值:字符串的长度

replace()

函数描述:替换字符串中的内容。 用法:string1.replace(string2, string3);

  • string1:原始字符串
  • string2:要被替换的字符串
  • string3:替换后的新字符串 返回值:无

setCharAt()

函数描述:替换字符串中指定位置的字符。 用法:string1.setCharAt(i, char1);

  • string1:原始字符串
  • i:要替换的字符的位置
  • char1:要替换的字符,注意只能是单个字符,而不是字符串 返回值:无

startsWith()

函数描述:判断字符串是否以特定字符串开始。 用法:string1.startsWith(string2);

  • string1:原始字符串
  • string2:要判断是否为起始字符串的字符串 返回值:布尔值,true 或 false

substring()

函数描述:截取字符串中某一部分。 用法:string1.substring(from); 或者 string1.substring(from, to);

  • string1:原始字符串
  • from:要截取的起始位置
  • to:要截取的结束位置 返回值:截取的子字符串

toCharArray()

函数描述:将字符串复制到字符数组中。 用法:string1.toCharArray(buf, len);

  • string1:原始字符串
  • buf:指定的字符数组位置,注意字符数组的大小,要大于等于复制的字符串大小,否则可能会出现存储器和程序的意外问题
  • len:要复制的字符串长度 返回值:无

toInt()

函数描述:将字符串转换为整数。 用法:string1.toInt();

  • string1:要转换的字符串,例如 "123" 返回值:整数,例如 123

toLowerCase()

函数描述:将英文字符串转换为小写。 用法:string1.toLowerCase();

  • string1:要转换为小写的字符串(全英文) 返回值:字符串(小写)

toUpperCase()

函数描述:将英文字符串转换为大写。 用法:string1.toUpperCase();

  • string1:要转换为大写的字符串(全英文) 返回值:字符串(大写)

trim()

函数描述:自动清除字符串中最前面和最后面的空白字符。 用法:string1.trim();

  • string1:原始字符串 返回值:无

位操作

  • lowByte()

    函数描述:获取一个16位整数的低字节(低8位)。 用法:lowByte(value);

    • value:16位整数值 返回值:一个字节(低8位)

    highByte()

    函数描述:获取一个16位整数的高字节(高8位)。 用法:highByte(value);

    • value:16位整数值 返回值:一个字节(高8位)

    bitRead()

    函数描述:读取一个字节(8位)中指定位置的位(0或1)。 用法:bitRead(value, bit);

    • value:字节(8位)值
    • bit:要读取的位的位置(0-7) 返回值:位的值(0或1)

    bitWrite()

    函数描述:将指定值(0或1)写入一个字节(8位)中指定位置的位。 用法:bitWrite(value, bit, bitValue);

    • value:字节(8位)值
    • bit:要写入的位的位置(0-7)
    • bitValue:要写入的位的值(0或1) 返回值:无

    bitSet()

    函数描述:将一个字节(8位)中指定位置的位设置为1。 用法:bitSet(value, bit);

    • value:字节(8位)值
    • bit:要设置为1的位的位置(0-7) 返回值:无

    bitClear()

    函数描述:将一个字节(8位)中指定位置的位设置为0。 用法:bitClear(value, bit);

    • value:字节(8位)值
    • bit:要设置为0的位的位置(0-7) 返回值:无

    bit()

    函数描述:获取一个字节(8位)中指定位置的位的值(0或1)。 用法:bit(value, bit);

    • value:字节(8位)值
    • bit:要获取的位的位置(0-7) 返回值:位的值(0或1)

串口通讯

Serial.begin(speed)

函数描述:设置串口的通信速率。 用法:Serial.begin(speed);

  • speed:整数,用来设定传输速率,通常是以下几个数:300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 或 115200 返回值:无

Serial.available()

函数描述:获取前串口缓冲池的数据量。串口的缓存区默认只有64字节,但大小是可以改变的。 用法:Serial.available(); 返回值:一个整数,表示当前串口缓冲区中可用的字节数

Serial.read()

函数描述:用来读取数据,每次只能读取一个字符。 用法:Serial.read(); 返回值:读取到的数据,以整数形式表示(0-255),如果没有数据可读,则返回-1

Serial.flush()

函数描述:清空缓冲区数据。Serial.flush()函数的功能在Arduino 1.0之前和之后版本是不一样的。之前版本用于清除已经进入缓冲区的输入的串口数据,1.0版之后,用于等待要发送的串口数据发送完毕。 用法:Serial.flush(); 返回值:无

Serial.print(data)

函数描述:向串口输出数据。 用法:Serial.print(data);

  • data:要输出的数据,可以是数字、字符、字符串等 返回值:无

Serial.println(data)

函数描述:向串口输出数据,并在尾部添加一个换行符。 用法:Serial.println(data);

  • data:要输出的数据,可以是数字、字符、字符串等 返回值:无

使用 Serial 和 Stepper 库控制步进电机

在 Arduino 中,我们可以使用 Serial 和 Stepper 库来控制步进电机。首先,我们需要将步进电机的引脚连接到 Arduino 板子上,通常步进电机有 4 个引脚,分别是 IN1、IN2、IN3 和 IN4,这些引脚需要连接到 Arduino 板子的数字引脚上。

接下来,在 Arduino 代码中导入 Stepper 库,并创建一个 Stepper 对象,指定步进电机的引脚和步进模式。然后,可以使用 Serial 监视器来控制步进电机的旋转方向和步数。

以下是一个示例代码,演示如何使用 Serial 和 Stepper 库来控制步进电机:

#include <Stepper.h>

const int stepsPerRevolution = 200;  // 步进电机每圈的步数

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); // 创建一个 Stepper 对象

void setup() {

  Serial.begin(9600);  // 初始化串口

  myStepper.setSpeed(60);  // 设置步进电机转速

}

void loop() {

  if (Serial.available() > 0) {  // 如果有数据可读取

    int steps = Serial.parseInt();  // 读取输入的步数

    if (steps > 0) {  // 如果步数为正数,则向前旋转

      Serial.print("Forward ");

      Serial.println(steps);

      myStepper.step(steps);  // 旋转指定的步数

    else if (steps < 0) {  // 如果步数为负数,则向后旋转

      Serial.print("Backward ");

      Serial.println(abs(steps));

      myStepper.step(abs(steps));  // 旋转指定的步数

    }

  }

}

在串口监视器中,输入一个正整数,步进电机就会向前旋转指定的步数,输入一个负整数,步进电机就会向后旋转指定的步数。例如,输入 "100",步进电机就会向前旋转 100 步。

需要注意的是,步进电机的步数和转速可以根据实际情况进行调整。

AccelStepper 库是一个用于控制步进电机的库,它支持多种步进电机驱动器的通信协议,并具有加速和减速控制等功能。可以在 Arduino 库管理器中搜索 AccelStepper 并安装它。以下是一个示例代码,演示如何使用 Serial 和 AccelStepper 库来控制步进电机驱动器:

#include <AccelStepper.h>

// 定义步进电机引脚

#define MOTOR_PIN1 8

#define MOTOR_PIN2 9

#define MOTOR_PIN3 10

#define MOTOR_PIN4 11

// 定义步进电机的驱动器类型和引脚连接

AccelStepper stepper(AccelStepper::FULL4WIRE, MOTOR_PIN1, MOTOR_PIN2, MOTOR_PIN3, MOTOR_PIN4);

void setup() {

  Serial.begin(9600);  // 初始化串口

  stepper.setMaxSpeed(2000);  // 设置步进电机最大速度

  stepper.setAcceleration(1000);  // 设置步进电机加速度

}

void loop() {

  if (Serial.available() > 0) {  // 如果有数据可读取

    int steps = Serial.parseInt();  // 读取输入的步数

    if (steps > 0) {  // 如果步数为正数,则向前旋转

      Serial.print("Forward ");

      Serial.println(steps);

      stepper.move(steps);  // 移动指定的步数

    else if (steps < 0) {  // 如果步数为负数,则向后旋转

      Serial.print("Backward ");

      Serial.println(abs(steps));

      stepper.move(abs(steps));  // 移动指定的步数

    }

  }

  stepper.run();  // 持续运行步进电机

}

在串口监视器中,输入一个正整数,步进电机就会向前旋转指定的步数,输入一个负整数,步进电机就会向后旋转指定的步数。例如,输入 "100",步进电机就会向前旋转 100 步。AccelStepper 库还提供了其他一些功能,如设置最大速度、加速度、减速度、设置目标位置等,可以根据实际需求进行调整。请确保已经安装了 AccelStepper 库,并在代码中引入了正确的库头文件。

扩展库

以下是Arduino官方提供的扩展库,可以在 Arduino IDE 的库管理器中搜索并安装它们:

  1. EEPROM - 用于读写EEPROM存储区的库。
  2. Ethernet - 支持以太网通信的库。
  3. Firmata - 基于串口的通讯协议库。
  4. LiquidCrystal - 用于控制液晶显示器的库。
  5. Servo - 用于控制伺服电机的库。
  6. SoftwareSerial - 软件实现的串口库,可以在任意引脚上进行串口通信。
  7. Stepper - 用于控制步进电机的库。
  8. Wire - 支持I2C协议通信的库。
  9. Matrix - 用于控制LED显示阵列的库。
  10. Sprite - 用于控制LED显示阵列中的子块的库。

可以根据实际需求选择安装这些库,并在代码中使用相应的库头文件(#include)来引入所需的功能。注意,引入库会增加程序的体积,如果不需要某个库的功能,可以直接删除对应的#include语句来减小程序的体积。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值