一. platformIO如何引入類庫
以驅(qū)動(dòng)超聲波測(cè)距器件 HC-SR04為例:
先進(jìn)入類庫界面,搜索相應(yīng)的關(guān)鍵字

搜索完成選取自己需要的結(jié)果, 點(diǎn)擊進(jìn)去, 查看并安裝


根據(jù)安裝說明, 在platformio.ini里寫好

然后可以在用的地方引入頭文件了

然后根據(jù)示例用法應(yīng)用:

我用的這個(gè)庫,示例還寫錯(cuò)了, 這時(shí)候可以打開頭文件看一下:

同時(shí),也能在.pio中找到示例

修改后就可以了
#include <Arduino.h>
#include "Ultrasonic.h"
double voltage = 0;
Ultrasonic ultrasonic1(4, 18);
void setup()
{
Serial.begin(115200);
}
void loop()
{
Serial.print("當(dāng)前距離是: ");
Serial.print(ultrasonic1.distanceRead()); // Prints the distance on the default unit (centimeters)
Serial.println("cm");
delay(1000);
}
二. 如何自己開發(fā)庫
首先建立.cpp和.h文件 這點(diǎn)很像C
然后.h中使用面向?qū)ο蟮乃季S編寫類, 這點(diǎn)很像C++
/*
* SR04.h
* 這里寫說明和版本信息
*/
#ifndef SR04_H
#define SR04_H
#include <Arduino.h>
class SR04
{
public:
SR04(int trigPin, int echoPin);
int getdistance();
private:
int trig_Pin;
int echo_Pin;
};
#endif
然后寫 .cpp文件,實(shí)現(xiàn)功能
#include "sr04.h"
SR04::SR04(int TP, int EP)
{
pinMode(TP, OUTPUT);
pinMode(EP, OUTPUT);
trig_Pin = TP;
echo_Pin = EP;
}
float SR04::getdistance()
{
//在這里按照時(shí)序方法操作引腳獲取并換算成距離返回
Serial.println("haha");
return 0.0;
}
關(guān)鍵字高亮
為了方便a'r'duinoIDE用戶使用, 建立一個(gè)keyword.txt文件, 將自己庫的關(guān)鍵字高亮起來
SR04 KEYWORD1
getdistance KEYWORD2
我們看到, 往官方庫倉(cāng)里發(fā)自己的庫還需要滿足 示例\ 整數(shù)\ 配置 \README 等要求 這些等需要時(shí)再研究吧

三. 串口接收字符串
#include <Arduino.h>
void setup()
{
Serial.begin(115200);
}
void loop()
{
String str = "";
while (Serial.available())
{
char tmp = Serial.read();
str += tmp;
delay(10);
}
if (str != "")
{
Serial.println("recive: ");
Serial.println(str);
}
}
例: 串口通過字符串控制LED
輸入字符串red 控制紅燈亮滅 ...
#include <Arduino.h>
#define LED_R 27
#define LED_G 33
#define LED_B 32
String revstr = "";
const String red = "red";
const String green = "green";
const String blue = "blue";
String getStr() //ESP32中, 此函數(shù)可以用Serial.readString()代替
{
String str = "";
while (Serial.available())
{
char tmp = Serial.read();
str += tmp;
delay(10);
}
if (str != "")
{
return str;
}
return "";
}
void strToRGB(String revstr)
{
if (revstr == red)
{
digitalWrite(LED_R, !digitalRead(LED_R));
}
else if (revstr == green)
{
digitalWrite(LED_G, !digitalRead(LED_G));
}
else if (revstr == blue)
{
digitalWrite(LED_B, !digitalRead(LED_B));
}
}
void setup()
{
Serial.begin(115200);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop()
{
revstr = getStr();
if (revstr != "")
{
strToRGB(revstr);
}
}
四. 字符串解析 String對(duì)象
都很常規(guī):



測(cè)試程序:
#include <Arduino.h>
String str = "";
void setup()
{
str = "11滾滾長(zhǎng)江東逝水,浪花淘盡英雄,是非成敗轉(zhuǎn)頭空,青山依舊在,幾度夕陽紅123!";
Serial.begin(115200);
}
void loop()
{
Serial.println(str.length());
Serial.println(str.indexOf("水"));
Serial.println(str.lastIndexOf("山"));
Serial.println(str.indexOf("山",20));
Serial.println(str.substring(21));
Serial.println(str.substring(21,60));
Serial.println(str.toInt());
Serial.println(str.endsWith("!"));
Serial.println(str.endsWith("宏"));
delay(5000);
}
測(cè)試結(jié)果: