• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
stm32例子 串口接受oled屏幕不卡显示
 

 

#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
 
     
  
 
}

  

 

posted on 2024-04-18 22:32  MKT-porter  阅读(89)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3