
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE);
//============解析函数=================
//分割结果
#define sleng 11 //数组大小 比实际多一个
String split_result[sleng];//手动动态调整数组大小,保证数组可以满足容量
/*字符串分割
输入参数
String zifuchuan, 输入字符串
String fengefu, 分隔符号-可以是多个
String result[] 输出结果
*/
void Split(String zifuchuan,String fengefu,String result[])
{
int weizhi; //找查的位置
String temps;//临时字符串
int i=0;
do
{
weizhi = zifuchuan.indexOf(fengefu);//找到位置
if(weizhi != -1)//如果位置不为空
{
temps=zifuchuan.substring(0,weizhi);//打印取第一个字符
zifuchuan = zifuchuan.substring(weizhi+fengefu.length(), zifuchuan.length());
//分隔后只取后面一段内容 以方便后面找查
}
else
{ //上面实在找不到了就把最后的 一个分割值赋值出来以免遗漏
if(zifuchuan.length() > 0)
temps=zifuchuan;
}
result[i++]=temps;
//Serial.println(result[i-1]);//在这里执行分割出来的字符下面不然又清空了
temps="";
}
while(weizhi >=0);
}
//char send_char[20]="0";
String str_msg1="0";
String str_msg2="0";
String str_msg3="0";
void u8g2_sendStrint(int x,int y,String &msg){
int c_length=msg.length();
if(c_length==0)c_length=20;
char send_char[c_length];
//char send_char[20]="0";
strcpy(send_char, msg.c_str());
u8g2.drawStr(x,y,send_char); // 绘制字符串
}
void setup(void) {
Serial1.begin(9600); //TX=PA9,RX=PA10 32的引脚
u8g2.begin(); //oled初始化
}
void loop(void) {
if (Serial1.available()){
//1 =========从串口获取命令 ;结尾 例子: sensor-on;
String split_input =Serial1.readStringUntil(';');
//Serial1.print("Recive_esp: ");Serial1.println(split_input);
//2 ========解析命令
//2-0解析数据 sensor-on
Split(split_input,"-",split_result);//分割调用
//2-1打印消息 0-sensor 1-on
for(int i=0;i<sleng;i++)
{
if(split_result[i]!="")
{
//Serial.println(String(i)+"-"+split_result[i]);
}
else{
split_result[i]="0";
}
}
str_msg1=split_result[0];//
str_msg2=split_result[1];//
str_msg3=split_result[2];//
}
u8g2.clearBuffer(); // 清除oled缓存
u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体
u8g2.drawStr(0,10,"Result:"); // 绘制字符串
u8g2_sendStrint(0,30,str_msg1);
u8g2.sendBuffer(); // 显示
delay(10); //延时1000 ms
}