首页 > 其他分享 >stm32例子 串口接受oled屏幕不卡显示

stm32例子 串口接受oled屏幕不卡显示

时间:2024-04-18 22:47:47浏览次数:30  
标签:char 不卡 String void zifuchuan stm32 length result 串口

 

 

#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

相关文章

  • stm32f103使用RT-Thread组件fal读写内部flash
    本次使用RT-Threadstudio编写,使用为5.02完整版,目的是将内部flash进行分区,可以直接在内部flash存储数据。一、功能配置首先是打开设置里的FAL组件,因为我这里不需要外部内存,SFUD驱动就没打开:然后是配置两个参数,一个在board.h里,定义BSP_USING_ON_CHIP_FLASH,一个是在stm32xxxx_hal_......
  • STM32 - W25Q16移植fatfs文件系统
    1.Windows上的文件系统​ 文件系统,就是对数据进行管理的方式。使用文件系统可有效地管理存储介质。​ 使用文件系统时,它为了存储和管理数据,在存储介质建立了一些组织结构,这些结构包括操作系统引导区、目录和文件。常见的windows下的文件系统格式包括FAT32、NTFS、exFAT。......
  • 全志平台增加adb和串口登录的账号密码验证
    直接引用全志论坛的一篇文章,很完整了,当前验证R16平台可行。 链接【https://bbs.aw-ol.com/topic/598/faq-%E5%85%A8%E5%BF%97r329-tina%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8adb-%E4%B8%B2%E5%8F%A3%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95?_=1713338833551&lang=zh-CN......
  • STM32:HAL多通道ADC数据采集
    1、配置ADC,设置5个通道采集2、使能DMA设置为循环模式 生成工程后编写函数1、校准ADC,开启DMA接收,在main函数初始化部分调用#defineADC_MAX_NUM5#defineBTN_BUFF_LEN100staticuint16_tdma_adc_data[BTN_BUFF_LEN*ADC_MAX_NUM];1/**2*@brief校准adc,开......
  • 03_QT上位机开发之串口助手
    QT上位机开发之串口助手一.qt的三驾马车​ 1.qt下的串口编程​ 2.qt下的网络编程​ 3.qt下操作GPIO二.仿写串口助手MySerial.pro#-------------------------------------------------##ProjectcreatedbyQtCreator2024-04-12T18:07:26##--------------------------......
  • 4-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK-设备作为TCP客户端,实现上位机
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节设备作为TCP客户端,连接上位......
  • 3-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK--设备作为TCP服务器,实现上位
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节设备作为TCP服务器,上位机T......
  • STM32F10系列开发板的GPIO介绍
    1.GPIO介绍GPIO是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组16个IO口,组数视芯片而定。STM32F103ZET6芯片是144脚的芯片,具有GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG七组GPIO口,共有112个IO口可供我们编程使用2.GPIO八种功能模......
  • stm32采集烟雾和温湿度+ESP8266转发解析+python构造http
      https://www.cnblogs.com/gooutlook/p/16061136.html  http://192.168.1.103/Control_SensorPin?sensor=sensor_all&action=GetDatapython#-*-coding:utf-8-*-importrequestsimporturllib.parse#pipinstallrequestsdefSendHttp():#ht......
  • PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式
    我要成为嵌入式高手之4月8日51单片机第三天!!————————————————————————————PWM        脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应......