玩轉(zhuǎn) ESP32 + Arduino (五) platformIO引入類庫 自開發(fā)庫 串口打印字符串

一. 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é)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容