一. platformIO如何引入类库
以驱动超声波测距器件 HC-SR04为例:
先进入类库界面,搜索相应的关键字
搜索完成选取自己需要的结果, 点击进去, 查看并安装
根据安装说明, 在platformio.ini里写好
然后可以在用的地方引入头文件了
然后根据示例用法应用:
我用的这个库,示例还写错了, 这时候可以打开头文件看一下:
同时,也能在.pio中找到示例
修改后就可以了
- #include <Arduino.h>
- #include "Ultrasonic.h"
-
- double voltage = 0;
- Ultrasonic ultrasonic1(4, 18);
-
- void setup()
- {
- Serial.begin(115200);
- }
-
- void loop()
- {
- Serial.print("当前距离是: ");
- Serial.print(ultrasonic1.distanceRead()); // Prints the distance on the default unit (centimeters)
- Serial.println("cm");
- delay(1000);
- }
二. 如何自己开发库
首先建立.cpp和.h文件 这点很像C
然后.h中使用面向对象的思维编写类, 这点很像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文件,实现功能
- #include "sr04.h"
-
- SR04::SR04(int TP, int EP)
- {
- pinMode(TP, OUTPUT);
- pinMode(EP, OUTPUT);
- trig_Pin = TP;
- echo_Pin = EP;
- }
-
- float SR04::getdistance()
- {
- //在这里按照时序方法操作引脚获取并换算成距离返回
- Serial.println("haha");
- return 0.0;
- }
关键字高亮
为了方便a'r'duinoIDE用户使用, 建立一个keyword.txt文件, 将自己库的关键字高亮起来
- SR04 KEYWORD1
- getdistance KEYWORD2
我们看到, 往官方库仓里发自己的库还需要满足 示例\ 整数\ 配置 \README 等要求 这些等需要时再研究吧
三. 串口接收字符串
- #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中, 此函数可以用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对象
都很常规:
测试程序:
- #include <Arduino.h>
- String str = "";
-
- void setup()
- {
- str = "11滚滚长江东逝水,浪花淘尽英雄,是非成败转头空,青山依旧在,几度夕阳红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);
- }
测试结果: