#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 }
标签:char,不卡,String,void,zifuchuan,stm32,length,result,串口 From: https://www.cnblogs.com/gooutlook/p/18144681