【Arduino】语言参考功能

server/2025/1/24 15:00:24/

前言

  翻译Arduino 参考处列出的常用函数。文中为了减少篇幅,达到能快速翻到查询的目标,在介绍函数中,对部分内容进行了省略,不会列出函数输入参数类型,以及使用注意事项等等,所以若是首次使用或者是调试时出现问题,建议查看原文。Arduino参考网址下,共介绍了三大块,功能变量结构,下面就只对功能板块进行整理。

功能

用于控制 Arduino 板和执行计算

数字 I/O


digitalRead()

描述:从指定的数字引脚读取值 语法:digitalRead(pin) 返回:HIGHLOW

示例代码:将引脚 13 设置为与引脚 7 相同的值,声明为输入。

int ledPin = 13;  // LED连接到数字pin13
int inPin = 7;    // 按钮连接到数字pin7
int val = 0;      // 变量来存储读取的值void setup() {pinMode(ledPin, OUTPUT);  // 将数字pin13设置为输出pinMode(inPin, INPUT);    // 将数字pin7设置为输入
}void loop() {val = digitalRead(inPin);   // 读取输入引脚digitalWrite(ledPin, val);  // 设置LED为按钮的值
}

digitalWrite()

描述:指定的数字引脚写入HIGHLOW 语法:digitalWrite(pin, value) 返回:无

示例代码:该代码使数字pin为13,并以1秒钟的速度在和之间交替切换高低电平。

void setup() {pinMode(13, OUTPUT);    // 设置数字引脚13作为输出
}void loop() {digitalWrite(13, HIGH); // 设置数字引脚13delay(1000);            // 等待1秒钟digitalWrite(13, LOW);  // 设置数字引脚13关闭delay(1000);            // 等待1秒钟
}

pinMode()

描述:将指定的引脚配置为 input 或 output 语法:pinMode(pin, mode) 返回:无

示例代码:该代码使数字pin为13,并以1秒钟的速度在和之间交替切换高低电平。

void setup() {pinMode(13, OUTPUT);    // 设置数字引脚13作为输出
}void loop() {digitalWrite(13, HIGH); // 设置数字引脚13delay(1000);            // 等待1秒钟digitalWrite(13, LOW);  // 设置数字引脚13关闭delay(1000);            // 等待1秒钟
}

模拟 I/O


analogRead()

描述:从指定的模拟引脚读取值 语法:analogRead(pin) 返回:引脚上的模拟读数。尽管它仅限于模数转换器的分辨率(0-1023 位或 0-4095 位 12),数据类型为int

示例代码:该代码读取模拟引脚上的电压并打印它

int analogPin = A3; // 电位器中间端子连接到模拟引脚3// 外部引出地和+5V
int val = 0;  // 变量来存储读取的值void setup() {Serial.begin(9600);           //  设置波特率
}void loop() {val = analogRead(analogPin);  // 读取输入引脚Serial.println(val);          // 打印出模拟值
}

analogReadResolution()

描述:该函数是部分系列的模拟API扩展,允许设置ADC分辨率 语法:analogReadResolution(bits) 返回:无

示例代码:该代码显示了如何使用不同分辨率的 ADC

void setup() {// 打开串口Serial.begin(9600);
}void loop() {// 以默认分辨率(10位)在A0上读取输入// 然后通过串口发送出去analogReadResolution(10);Serial.print("ADC 10-bit (default) : ");Serial.print(analogRead(A0));// 将分辨率更改为12位并读取A0analogReadResolution(12);Serial.print(", 12-bit : ");Serial.print(analogRead(A0));// 将分辨率更改为16位并读取AOanalogReadResolution(16);Serial.print(", 16-bit : ");Serial.print(analogRead(A0));// 将分辨率更改为8位并读取AOanalogReadResolution(8);Serial.print(", 8-bit : ");Serial.println(analogRead(A0));// 一点延迟,以避免占用串行监视器delay(100);
}

analogReferenc()

描述:配置用于模拟输入的参考电压 语法:analogReference(type) 返回:无


analogWrite()

描述:将模拟值 (PWM波) 写入引脚 语法:analogWrite(pin, value) 返回:无

示例代码:将 LED 的输出设置为与从电位计读取的值成比例。

int ledPin = 9;      // LED连接到数字引脚9
int analogPin = 3;   // 电位器连接到模拟引脚3
int val = 0;         // 变量来存储读值void setup() {pinMode(ledPin, OUTPUT);  // 将引脚设置为输出
}void loop() {val = analogRead(analogPin);  // 读取输入引脚analogWrite(ledPin, val / 4); // 模拟值从0到1023,模拟值从0到255
}

analogWriteResolution()

描述:该函数是ArduinoDue 的 Analog API 的扩展,用于设置函数的分辨率。 语法:analogWriteResolution(bits) 返回:无

示例代码:解释代码

void setup() {// 打开串口Serial.begin(9600);// 使我们的数字引脚输出pinMode(11, OUTPUT);pinMode(12, OUTPUT);pinMode(13, OUTPUT);
}void loop() {// 读取A0上的输入并将其映射到PWM引脚// 带有1个LEDint sensorVal = analogRead(A0);Serial.print("Analog Read) : ");Serial.print(sensorVal);// 默认PWM分辨率analogWriteResolution(8);analogWrite(11, map(sensorVal, 0, 1023, 0, 255));Serial.print(" , 8-bit PWM value : ");Serial.print(map(sensorVal, 0, 1023, 0, 255));// 将PWM分辨率改为12位// 仅支持完整的12位分辨率analogWriteResolution(12);analogWrite(12, map(sensorVal, 0, 1023, 0, 4095));Serial.print(" , 12-bit PWM value : ");Serial.print(map(sensorVal, 0, 1023, 0, 4095));// 将PWM分辨率改为4位analogWriteResolution(4);analogWrite(13, map(sensorVal, 0, 1023, 0, 15));Serial.print(", 4-bit PWM value : ");Serial.println(map(sensorVal, 0, 1023, 0, 15));delay(5);
}

高级 I/O


noTone()

描述:阻止方波生成语法,如果未生成方波,则无效 语法:noTone(pin) 返回:无


pulseIn()

描述:读取引脚上的脉冲,超时未收到完整脉冲,则返回0 语法:pulseIn(pin, value) 或 pulseIn(pin, value, timeout) 返回:脉冲的长度(以微秒为单位)或 0(如果在超时之前没有脉冲启动)。数据类型为unsigned long

示例代码:该示例打印引脚 7 上脉冲的持续时间。

int pin = 7;
unsigned long duration;void setup() {Serial.begin(9600);pinMode(pin, INPUT);
}void loop() {duration = pulseIn(pin, HIGH);Serial.println(duration);
}

pulseInLong()

描述:该函数是pulseIn() 的替代方案,它更擅长处理受长脉冲和中断影响的场景。 语法:pulseInLong(pin, value) 或 pulseInLong(pin, value, timeout) 返回:脉冲的长度(以微秒为单位)或 0(如果在超时之前没有脉冲启动)。数据类型为unsigned long

示例代码:该示例打印引脚 7 上脉冲的持续时间

int pin = 7;
unsigned long duration;void setup() {Serial.begin(9600);pinMode(pin, INPUT);
}void loop() {duration = pulseInLong(pin, HIGH);Serial.println(duration);
}

shiftIn()

描述:1次移入1个字节的数据,高位到低位。从移位寄存器或其他串行设备逐位读取数据(软件SPI流程) 语法:byte incoming = shiftIn(dataPin, clockPin, bitOrder) 返回:读取值,数据类型为byte


shiftOut()

描述:1次移出1个字节的数据,高位到低位。移出到移位寄存器或其他串行设备(软件SPI流程) 语法:shiftOut(dataPin, clockPin, bitOrder, value) 返回:

示例代码:有关随附的电路,请参阅有关控制 74HC595 移位寄存器的教程

//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************// 引脚连接到74HC595的ST_CP
int latchPin = 8;
// 引脚连接到74HC595的SH_CP
int clockPin = 12;
// 引脚连接到74HC595的DS
int dataPin = 11;void setup() {// 将引脚设置为输出,因为它们是在主循环中寻址的pinMode(latchPin, OUTPUT);pinMode(clockPin, OUTPUT);pinMode(dataPin, OUTPUT);
}void loop() {// 计数程序for (int j = 0; j < 256; j++) {// 接地锁脚并保持低位,只要你正在传输digitalWrite(latchPin, LOW);shiftOut(dataPin, clockPin, LSBFIRST, j);// 将锁存引脚拉高,以向芯片发出信号表示它// 不再需要监听信息digitalWrite(latchPin, HIGH);delay(1000);}
}

tone()

描述:在引脚上生成指定频率 (和 50% 占空比) 的方波 语法:tone(pin, frequency)或tone(pin, frequency, duration) 返回:无


时间


delay()

描述:将程序暂停指定为一定的时间量 (以毫秒为单位) 语法:delay(ms) 返回:无


delayMicroseconds()

描述:将程序暂停参数指定的时间量 (以微秒为单位) 语法:delayMicroseconds(us) 返回:无


micros()

描述:返回自 Arduino 板开始运行当前程序以来的微秒数 语法:time = micros() 返回:返回自 Arduino 板开始运行当前程序以来的微秒数。数据类型为unsigned long

示例代码:该代码返回自 Arduino 板开始以来的微秒数。

unsigned long time;void setup() {Serial.begin(9600);
}
void loop() {Serial.print("Time: ");time = micros();Serial.println(time); // 打印程序启动后的时间delay(1000);          // 稍等片刻,以免发送大量数据
}

millis()

描述:返回自 Arduino 板开始运行当前程序以来经过的毫秒数 语法:time = millis() 返回:自程序启动以来经过的毫秒数。数据类型为unsigned long

示例代码:此示例代码在串行端口上打印自 Arduino 板开始运行代码本身以来经过的毫秒数。

unsigned long myTime;void setup() {Serial.begin(9600);
}
void loop() {Serial.print("Time: ");myTime = millis();Serial.println(myTime); // 打印程序启动后的时间delay(1000);            // 稍等片刻,以免发送大量数据
}

数学


abs()

描述:计算数字的绝对值 语法:abs(x) 返回:绝对值

示例代码:将变量的绝对值打印到串行监视器

void setup() {Serial.begin(9600);while (!Serial) {;  // 等待串口连接。只需要本地USB端口}int x = 42;Serial.print("The absolute value of ");Serial.print(x);Serial.print(" is ");Serial.println(abs(x));x = -42;Serial.print("The absolute value of ");Serial.print(x);Serial.print(" is ");Serial.println(abs(x));
}void loop() {
}

constrain()

描述:将数字限制在一个范围内 语法:constrain(x, a, b) 返回:如果 x 介于 a 和 b 之间,返回x。如果x小于a,返回a。如果x大于b,返回b。

示例代码:该代码将传感器值限制为 10 到 150 之间。

sensVal = constrain(sensVal, 10, 150);  // 将传感器值的范围限制在10和150之间

map()

描述:将数字从一个范围重新映射到另一个范围 语法:map(value, fromLow, fromHigh, toLow, toHigh) 返回:映射的值,数据类型为long

示例代码:

/* 将模拟值映射到8位(0到255) */
void setup() {}void loop() {int val = analogRead(0);val = map(val, 0, 1023, 0, 255);analogWrite(9, val);
}

max()

描述:计算最多两个数字 语法:max(x, y) 返回:两个参数值中较大的一个

示例代码:该代码确保 sensVal 至少为 20。

sensVal = max(sensVal, 20); // 将sensVal赋值给sensVal或中较大的值20// (有效地确保它至少20)

min()

描述:计算两个数字的最小值 语法:min(x, y) 返回:两个数字中较小的一个

示例代码:该代码确保它永远不会超过 100

sensVal = min(sensVal, 100);	// 将senval分配给senval或100中较小的值// 确保它不会超过100

pow()

描述:计算提高到幂数的数字的值 语法:pow(base, exponent) 返回:幂的结果,数据类型为double

示例代码:计算 x 的值 y 的幂

z = pow(x, y);

sq()

描述:计算数字的平方,数字乘以自身 语法:sq(x) 返回:数字的平方,数据类型为double


sqrt()

描述:计算数字的平方根 语法:sqrt(x) 返回:数字的平方根,数据类型为double


三角法


cos()

描述:计算角度的余弦值 (以弧度为单位),结果将介于 -1 和 1 之间 语法:cos(rad) 返回:角度的 cos,数据类型为double


sin()

描述:计算角度的正弦值 (以弧度为单位),结果将介于 -1 和 1 之间 语法:sin(rad) 返回:角度的正弦值,数据类型为double


tan()

描述:计算角度的正切值 (以弧度为单位),结果将介于负无穷大和无穷大之间 语法:tan(rad) 返回:角度的正切值,数据类型为double


字符


isAlpha()

描述:分析输入是否为字母,如果输入包含字母,则返回 true 语法:isAlpha(thisChar) 返回:如果thisChar是字母,返回true

示例代码:

if (isAlpha(myChar)) {  // 测试mychar是否是字母Serial.println("The character is a letter");
}
else {Serial.println("The character is not a letter");
}

isAlphaNumeric()

描述:分析输入是否为字母或数字,如果输入包含数字或字母,则返回 true 语法:isAlphaNumeric(thisChar) 返回:如果 thisChar 是字母数字,返回true

示例代码:

if (isAlphaNumeric(myChar)) { // 测试myChar是字母还是数字Serial.println("The character is alphanumeric");
}
else {Serial.println("The character is not alphanumeric");
}

isAscii()`

描述:分析 char 是否为 Ascii。如果 thisChar 包含 Ascii 字符,则返回 true 语法:isAscii(thisChar) 返回:如果 thisChar 是 Ascii,返回true

示例代码:

if (isAscii(myChar)) {  // 测试mychar是否是Ascii字符Serial.println("The character is Ascii");
}
else {Serial.println("The character is not Ascii");
}

isControl()

描述:分析 char 是否为控制字符。如果 thisChar 是控制字符,则返回 true 语法:isControl(thisChar) 返回:如果 thisChar 是控制字符,返回true

示例代码:

if (isControl(myChar)) {  // 测试mychar是否是控制字符Serial.println("The character is a control character");
}
else {Serial.println("The character is not a control character");
}

isDigit()

描述:分析 char 是否为数字 。如果 thisChar 是一个数字,则返回 true 语法:isDigit(thisChar) 返回:如果 thisChar 是一个数字,返回true

示例代码:

if (isDigit(myChar)) {  // 测试mychar是否是数字Serial.println("The character is a number");
}
else {Serial.println("The character is not a number");
}

isGraph()

描述:分析字符是否可打印某些内容(空间可打印,但没有内容)。如果 thisChar 是可打印的,则返回 true 语法:isGraph(thisChar) 返回:如果 thisChar 是可打印的,返回true

示例代码:

if (isGraph(myChar)) {  // 测试myChar是否是可打印字符,但不是空格Serial.println("The character is printable");
}
else {Serial.println("The character is not printable");
}

isHexadecimalDigit()

描述:分析 char 是否为十六进制数字 (A-F, 0-9)。如果 thisChar 包含十六进制数字,则返回 true 语法:isHexadecimalDigit(thisChar) 返回:如果 thisChar 是十六进制数字,返回true

示例代码:

if (isHexadecimalDigit(myChar)) { // 测试myChar是否为十六进制数字Serial.println("The character is an hexadecimal digit");
}
else {Serial.println("The character is not an hexadecimal digit");
}

isLowerCase()

描述:分析 char 是否为小写 (即小写字母) 。如果 thisChar 包含小写字母,则返回 true 语法:isLowerCase(thisChar) 返回:如果 thisChar 为小写,返回true

示例代码:

if (isLowerCase(myChar)) {  // 测试myChar是否是小写字母Serial.println("The character is lower case");
}
else {Serial.println("The character is not lower case");
}

isPrintable()

描述:分析字符是否可打印(即生成输出的任何字符,甚至是空格)。如果 thisChar 是可打印的,则返回 true 语法:isPrintable(thisChar) 返回:如果 thisChar 是可打印的,返回true

示例代码:

if (isPrintable(myChar)) {  // 测试mychar是否是可打印的charSerial.println("The character is printable");
}
else {Serial.println("The character is not printable");
}

isPunct()

描述:分析 char 是否为标点符号(即逗号、分号、感叹号等)。如果 thisChar 是标点符号,则返回 true 语法:isPunct(thisChar) 返回:如果 thisChar 是标点符号,返回true

示例代码:

if (isPunct(myChar)) {  // 测试mychar是否是标点符号Serial.println("The character is a punctuation");
}
else {Serial.println("The character is not a punctuation");
}

isSpace()

描述:分析 char 是否为空白字符。如果参数是空格、换页符 (\f)、换行符 (\n)、回车符 (\r)、水平制表符 (\t)或垂直制表符(\v),则返回 true 语法:isSpace(thisChar) 返回:如果 thisChar 是空白字符,返回true

示例代码:

if (isSpace(myChar)) {  // 测试mychar是否是空白字符Serial.println("The character is white-space");
}
else {Serial.println("The character is not white-space");
}

isUpperCase()

描述:分析 char 是否为大写 (即大写字母) 。如果 thisChar 为大写,则返回 true 语法:isUpperCase(thisChar) 返回:如果 thisChar 是大写的,返回true

示例代码:

if (isUpperCase(myChar)) {  // 测试mychar是否是大写字母Serial.println("The character is upper case");
}
else {Serial.println("The character is not upper case");
}

isWhitespace()

描述:分析 char 是否为空格字符。如果参数是空格或水平制表符 (\t),则返回 true 语法:isWhitespace(thisChar) 返回:如果 thisChar 是空格字符,返回true

if (isWhitespace(myChar)) { // 测试mychar是否是一个空格字符Serial.println("The character is a space or tab");
}
else {Serial.println("The character is not a space or tab");
}

随机数


random()

描述:该函数生成伪随机数 语法:random(max) 或者random(min, max) 返回:介于 min 和 max-1 之间的随机数,数据类型为long

示例代码:该代码生成随机数并显示它们

long randNumber;void setup() {Serial.begin(9600);// 如果模拟输入引脚0未连接,则随机模拟// 噪声将导致对randomSeed()的调用生成// 每次草图运行时,不同的种子数量// randomSeed()然后对随机函数进行洗牌randomSeed(analogRead(0));
}void loop() {// 打印一个从0到299的随机数randNumber = random(300);Serial.println(randNumber);// 打印一个从10到19的随机数randNumber = random(10, 20);Serial.println(randNumber);delay(50);
}

randomSeed()

描述:randomSeed()初始化伪随机数生成器,使其从其随机序列中的任意点开始 语法:randomSeed(seed) 返回:无

示例代码:该代码生成一个伪随机数,并将生成的数字发送到串行端口

long randNumber;void setup() {Serial.begin(9600);randomSeed(analogRead(0));
}void loop() {randNumber = random(300);Serial.println(randNumber);delay(50);
}

位和字节


bit()

描述:计算指定位的值(位 0 为 1,位 1 为 2,位 2 为 4,依此类推) 语法:bit(n) 返回:位的值


bitClear()

描述:清除 (写入 0) 数值变量的位 语法:bitClear(x, n) 返回:清除位置位后的数值变量值

示例代码:打印两个给定整数的输出。6 的二进制表示形式为 0110,因此当 时,从右侧开始的第二位设置为 0。在此之后,我们只剩下二进制的 0100,因此返回 4

void setup() {Serial.begin(9600);while (!Serial) {; // 等待串口连接。只需要本机USB端口}int x = 6;int n = 1;Serial.print(bitClear(x, n)); // 输出bitclear(x,n)的输出
}void loop() {
}

bitRead()

描述:读取变量中的某一位 语法:bitRead(x, n) 返回:位的值 (0 或 1)

示例代码:此示例代码演示了如何读取两个变量,一个递增计数器,一个递减计数器,并打印出变量的二进制值和十进制值。readBit()函数遍历变量的每个位(从最右边的位开始),并将其打印出来

long negative_var = -0;  //
unsigned long long positive_var = 0;// 在遍历位时预定义的大小
// 例如,long_size是32位(0-31)。因此,我们减去“1”。
const int bool_size = (1 - 1);
const int int_size = (8 - 1);
const int long_size = (32 - 1);void setup() {Serial.begin(9600);
}void loop() {// 运行readBit函数,传递pos、neg变量readBit("Positive ", positive_var);readBit("Negative ", negative_var);Serial.println();// 增加和减少变量值negative_var--;positive_var++;delay(1000);
}/* 这个函数接受一个变量,逐位打印出来(从右开始),然后打印小数以供比较。 */
void readBit(String direction, long counter) {Serial.print(direction + "Binary Number: ");// 遍历每个位for (int b = long_size; b >= 0; b--) {byte bit = bitRead(counter, b);Serial.print(bit);}Serial.print(" Decimal Number: ");Serial.println(counter);
}

bitSet()

描述:设置(写入 1)一个数字变量的位 语法:bitSet(x, n) 返回:设置位置后的数值变量的值

示例代码:打印两个给定整数的输出。4 的二进制表示形式是 0100,因此当 时,从右数第二位设置为 1。在此之后,我们只剩下二进制的 0110,因此返回 6

void setup() {Serial.begin(9600);while (!Serial) {; // 等待串口连接。只需要本机USB端口}int x = 4;int n = 1;Serial.print(bitSet(x, n)); // 输出bitset(x,n)的输出
}void loop() {
}

bitWrite()

描述:写入变量的位 语法:bitWrite(x, n, b) 返回:无

示例代码:通过在使用 之前和之后将变量的值打印到串行监视器来演示 bitWrite 的使用

void setup() {Serial.begin(9600);while (!Serial) {}  // 等待串口连接。只需要本地USB端口byte x = 0b10000000;  // 0b 前缀表示二进制常数Serial.println(x, BIN); // 10000000bitWrite(x, 0, 1);  // 把1写到x的最低有效位Serial.println(x, BIN); // 10000001
}void loop() {}

highByte()

描述:提取变量的高字节(最左侧) 语法:highByte(x) 返回:数据类型为byte


lowByte()

描述:提取变量的低字节(最右侧) 语法:lowByte(x) 返回:数据类型为byte


外部中断


attachInterrupt()

描述:带中断的数字引脚, 语法:attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) 返回:无

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;void setup() {pinMode(ledPin, OUTPUT);pinMode(interruptPin, INPUT_PULLUP);attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}void loop() {digitalWrite(ledPin, state);
}void blink() {state = !state;
}

detachInterrupt()

描述:关闭给定的中断 语法:detachInterrupt(digitalPinToInterrupt(pin)) 返回:无


digitalPinToInterrupt()

描述:该函数将 pin 作为参数,如果可以用作中断,则返回相同的 pin 语法:digitalPinToInterrupt(pin) 返回:要中断的引脚(例如2),如果 pin 不可用于中断,则返回 -1

示例代码:此示例检查引脚是否可以用作中断

int pin = 2;void setup() {Serial.begin(9600);int checkPin = digitalPinToInterrupt(pin);if (checkPin == -1) {Serial.println("Not a valid interrupt pin!");} else {Serial.println("Valid interrupt pin.");}
}void loop() {
}

中断


interrupts()

描述:重新启用中断(在它们被noInterrupts() 禁用之后)。中断允许某些重要任务在后台进行,并且默认情况下处于启用状态。禁用中断时,某些功能将不起作用,并且传入的通信可能会被忽略。但是,中断可能会略微中断代码的计时,并且可能会对代码的特别关键部分禁用 语法:interrupts() 返回:无

示例代码:该代码启用 interrupts

void setup() {}void loop() {noInterrupts();// 这里是关键的、时间敏感的代码interrupts();// 这里的其他代码
}

noInterrupts()

描述:禁用中断(你可以使用 interrupts()) 重新启用它们)。中断允许某些重要任务在后台进行,并且默认情况下处于启用状态。禁用中断时,某些功能将不起作用,并且传入的通信可能会被忽略。但是,中断可能会略微中断代码的计时,并且可能会对代码的特别关键部分禁用 语法:noInterrupts() 返回:无

示例代码:该代码演示如何启用中断

void setup() {}void loop() {noInterrupts();// 这里是关键的、时间敏感的代码interrupts();// 这里的其他代码
}

通信


Print

描述:Print 类是一个抽象基类,它提供了一个用于将数据打印到不同输出设备的通用接口。它定义了几种允许以不同格式打印数据的方法。Print 类与 Arduino 中的多个库相关,这些库使用打印功能与串行监视器、LCD 屏幕、打印机等设备进行交互。

功能:write()print()println()

write()

此函数响应来自控制器设备的请求从外围设备写入数据,或将字节排队以从控制器传输到外围设备

// 常用语法
Wire.write(value)
Wire.write(string)
Wire.write(data, length)// 示例程序
#include <Wire.h>
byte val = 0;
void setup() { Wire.begin(); /* 加入I2C总线 */ }
void loop() { Wire.beginTransmission(44); // 发送到设备号 44 (0x2C)Wire.write(val);             // 发送值字节Wire.endTransmission();      // 停止传输val++;                       // 自增// 如果达到第64位(最大值)if(val == 64) {val = 0;	// 从最小值开始}delay(500);
}

print()

将数据作为人类可读的 ASCII 文本打印到串行端口。此命令可以采用多种形式。

// 常用语法
Serial.print(val)
Serial.print(val, format)
// 示例程序
/* 使用for循环以各种格式打印数字 */
void setup() {Serial.begin(9600); // 以9600bps的速度打开串口
}void loop() {// 打印Serial.print("NO FORMAT");  // 打印标签Serial.print("\t");         // 打印制表符Serial.print("DEC");Serial.print("\t");Serial.print("HEX");Serial.print("\t");Serial.print("OCT");Serial.print("\t");Serial.print("BIN");Serial.println();        // 最后一个标签后回车for (int x = 0; x < 64; x++) { // 只有部分ASCII图表,更改以适应// 以多种格式列印:Serial.print(x);       // 打印为ASCII编码的十进制-与“DEC”相同Serial.print("\t\t");  // 打印两个标签以适应标签长度Serial.print(x, DEC);  // 打印为ASCII编码的十进制Serial.print("\t");    // 打印制表符Serial.print(x, HEX);  // 打印为ASCII编码的十六进制Serial.print("\t");    // 打印制表符Serial.print(x, OCT);  // 打印为ASCII编码的八进制Serial.print("\t");    // 打印制表符Serial.println(x, BIN);  // 打印为ASCII编码的二进制文件// 然后用“println”加上回车符delay(200);            // 延迟200毫秒}Serial.println();        // 输出另一个回车
}

println()

将数据作为人类可读的 ASCII 文本打印到串行端口,后跟回车符(ASCII 13 或“\r”)和换行符(ASCII 10 或“\n”)。此命令采用与 Serial.print()相同的形式。


Serial

用于 Arduino 板与计算机或其他设备之间的通信

// 基于Serial对象下,提供下述功能函数
if(Serial)
available()
availableForWrite()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println()
read()
readBytes()
readBytesUntil()
readString()
readStringUntil()
setTimeout()
write()
serialEvent()

SPI

此库允许您与 SPI 设备通信,并将 Arduino 作为控制器设备。此库与每个 Arduino 平台捆绑在一起,因此您无需单独安装该库

// 基于SPI对象下,提供下述功能函数
SPISettings
begin()
beginTransaction()
endTransaction()
end()
setBitOrder()
setClockDivider()
setDataMode()
transfer()
usingInterrupt()

Stream

Stream 是基于字符和二进制文件的流的基类。它不是直接调用的,而是在您使用依赖于它的函数时调用。Stream 定义了 Arduino 中的读取函数。当使用任何使用 或类似方法的核心功能时,您可以放心地假设它调用 Stream 类。对于像这样的函数,Stream 继承自 Print 类

// 基于Stream对象下,提供下述功能函数
available()
read()
flush()
find()
findUntil()
peek()
readBytes()
readBytesUntil()
readString()
readStringUntil()
parseInt()
parseFloat()
setTimeout()

Wire

此库允许您与 I2C 设备通信,这是所有 Arduino 板上都有的功能。I2C 是一种非常常见的协议,主要用于向外部 I2C 组件读取/发送数据

// 基于Wire对象下,提供下述功能函数
begin()
end()
requestFrom()
beginTransmission()
endTransmission()
write()
available()
read()
setClock()
onReceive()
onRequest()
setWireTimeout()
clearWireTimeoutFlag()
getWireTimeoutFlag()

USB接口


Keyboard

键盘功能使基于部分的Arduino板能够通过其 micro 的本机 USB 端口将击键发送到连接的计算机

Keyboard.begin()
Keyboard.end()
Keyboard.press()
Keyboard.print()
Keyboard.println()
Keyboard.release()
Keyboard.releaseAll()
Keyboard.write()

Mouse

鼠标功能使基 micro 部分的Arduino板能够通过其 micro 的本机 USB 端口控制所连接计算机上的光标移动。更新光标位置时,它始终相对于光标的先前位置。

Mouse.begin()
Mouse.click()
Mouse.end()
Mouse.move()
Mouse.press()
Mouse.release()
Mouse.isPressed()

http://www.ppmy.cn/server/161047.html

相关文章

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…

算力需求大爆发,谁是“大推手”?

大约5亿年前&#xff0c;地球迎来了物种的突然大爆发&#xff0c;标志着生物进化除了缓慢渐变&#xff0c;还可能以跳跃的方式进行。 同样&#xff0c;人工智能在经历70余年曲折发展之后&#xff0c;也处于一个极为关键的时刻&#xff0c;在模型、数据、算力等各项基础技术多年…

Jmeter 动态参数压力测试时间段预定接口

&#x1f3af; 本文档详细介绍了如何使用Apache JMeter进行压力测试&#xff0c;以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求&#xff0c;利用CSV文件动态配置时间段ID和用户token&#xff0c;确保了测试数据的真实性和有效性。文档中还…

es的date类型字段按照原生格式进行分组聚合

PUT student2 { "mappings": {"properties": {"name": {"type": "text","analyzer": "standard" // 使用标准分析器&#xff0c;适合姓名字段},"birthday": {"type": "date&…

日常梳理-网络架构

1.F5Nginx F5 Nginx 架构是一种常见的高性能、高可用的网络架构设计&#xff0c;广泛应用于企业级和互联网场景中。 高可用性与负载均衡 F5 是一种高性能的硬件负载均衡器&#xff0c;通常用于四层负载均衡&#xff08;基于 IP 和端口&#xff09;&#xff0c;能够快速分发流…

Flink中的时间和窗口

在批处理统计中&#xff0c;我们可以等待一批数据都到齐后&#xff0c;统一处理。但是在实时处理统计中&#xff0c;我们是来一条就得处理一条&#xff0c;那么我们怎么统计最近一段时间内的数据呢&#xff1f;引入“窗口”。 所谓的“窗口”&#xff0c;一般就是划定的一段时…

jenkins平台使用Login Theme、Customizable Header插件定制修改登陆页图片文字及首页标题

文章目录 前言一、需求二、Login Theme插件1.插件信息2.登陆框上增加文字3.登录页图片的修改 二、Customizable Header插件1.插件信息2.首页标题 总结 前言 使用Login Theme、Customizable Header插件定制修改登陆页logo及首页标题 一、需求 我的使用需求比较简单&#xff0c…

JDK长期支持版本(LTS)

https://blogs.oracle.com/java/post/the-arrival-of-java-23 jdk长期支持版本&#xff08;LTS&#xff09;&#xff1a;JDK 8、11、17、21&#xff1a;