【Arduino】语言参考功能

前言

  翻译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.mzph.cn/news/893530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT结合Excel辅助学术数据分析详细步骤分享!

目录 一.Excel在学术论文中的作用✔ 二.Excel的提示词✔ 三. 编写 Excel 命令 四. 编写宏 五. 执行复杂的任务 六. 将 ChatGPT 变成有用的 Excel 助手 一.Excel在学术论文中的作用✔ Excel作为一种广泛使用的电子表格软件&#xff0c;在学术论文中可以发挥多种重要作用&a…

国内有哪些著名的CRM系统提供商?

嘿&#xff0c;你有没有想过&#xff0c;在这个信息爆炸的时代里&#xff0c;企业怎么才能更好地管理客户关系呢&#xff1f;答案就是使用高效的CRM系统。今天我就来给大家聊聊那些在国际上非常有名的CRM系统提供商吧。 悟空CRM 首先不得不提的就是悟空CRM了&#xff01;这可…

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…

mock可视化生成前端代码

介绍&#xff1a;mock是我们前后端分离的必要一环、ts、axios编写起来也很麻烦。我们就可以使用以下插件&#xff0c;来解决我们的问题。目前支持vite和webpack。&#xff08;配置超级简单&#xff01;&#xff09; 欢迎小伙伴们提issues、我们共建。提升我们的开发体验。 vi…

9. 神经网络(一.神经元模型)

首先&#xff0c;先看一个简化的生物神经元结构&#xff1a; 生物神经元有多种类型&#xff0c;内部也有复杂的结构&#xff0c;但是可以把单个神经元简化为3部分组成&#xff1a; 树突&#xff1a;一个神经元往往有多个树突&#xff0c;用于接收传入的信息。轴突&#xff1a;…

Web 音视频(二)在浏览器中解析视频

前言 浏览器中已经能直接播放视频&#xff0c;为什么还需要手动写代码解析&#xff1f; 因为&#xff0c;某些场景需要对视频进行更细致的处理&#xff0c;比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之&#xff0c;除了最单纯的视频播放外&…

ETLCloud在iPaas中的是关键角色?

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…

以太网实战AD采集上传上位机——FPGA学习笔记27

一、设计目标 使用FPGA实现AD模块驱动采集模拟电压&#xff0c;通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块&#xff08;ad_10bit_to_16bit&#xff09;&#xff1a;为了方便数据传输&#xff0c;数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…

YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora

1.学习哔哩哔哩《YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战》 炮哥带你学视频链接 第5章 YOLOv3实战 5.1 YOLOv3实战先导 5.2 pycharm与anaconda的安装 之前已经安装过了&#xff0c;见Pytorch框架与经典卷积神经网络与实战第一天|安装PyCharm&Anaconda&#xff0…

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有&#xff1a;SQLite studio 和 SCADA DIAView。详细的可成内容大概如下&#xff1a; 1、SQLite 可视化管理工具SQLite Studio &#xff1a;打开数据库和查询数据&#xff1b;查看视频 2、创建6个变量&#x…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?

目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…

深度学习|表示学习|卷积神经网络|由参数共享引出的特征图|08

如是我闻&#xff1a; Feature Map&#xff08;特征图&#xff09;的概念与 Parameter Sharing&#xff08;参数共享&#xff09;密切相关。换句话说&#xff0c;参数共享是生成 Feature Map 的基础。Feature Map 是卷积操作的核心产物&#xff0c;而卷积操作的高效性正是由参数…

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…

ARP 表、MAC 表、路由表、跨网段 ARP

文章目录 一、ARP 表1、PC2、路由器 - AR22203、交换机 - S57004、什么样的设备会有 ARP 表&#xff1f; 二、MAC 表什么样的设备会有 MAC 表&#xff1f; 三、路由表什么样的设备会有路由表&#xff1f; 四、抓取跨网段 ARP 包 所谓 “透明” 就是指不用做任何配置 一、ARP 表…

算法10(力扣20)-有效的括号

1、问题 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类…

每日一题——二叉树的前序遍历和中序遍历和后序遍历

文章目录 二叉树的前序、中序与后序遍历题目描述数据范围&#xff1a;示例&#xff1a;示例 1&#xff1a; 解题思路1. 递归法2. 迭代法 代码实现&#xff08;递归法&#xff09;代码解析示例输出复杂度分析 中序遍历后序遍历 二叉树的前序、中序与后序遍历 题目描述 给定一棵…

【优选算法】8----四数之和

有看过我上篇算法博客并且去做过的铁子们&#xff0c;对这道题的话应该就不会那么陌生了&#xff0c;因为这两道题 的解题思路有着异曲同工之妙~ -----------------------------------------begin------------------------------------- 题目解析&#xff1a; 跟三数之和就多了…