0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OLED 显示雷达数据

单片机/嵌入式开发 来源:单片机/嵌入式开发 作者:单片机/嵌入式开发 2024-12-10 13:38 次阅读

【萤火工场CEM5826-M11测评】OLED显示雷达数据

本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。

该项目整体分为两部分:一、框架显示;二、数据采集与填充显示。

为了减小 MCU 负担,采用 局部刷新 的方案。

1. 显示框架

target_frame.jpg

所需库函数 Wire.hAdafruit_GFX.hAdafruit_SSD1306.h .

代码

#include < Wire.h >
#include < Adafruit_GFX.h >
#include < Adafruit_SSD1306.h >
#include "logo_128x64.h"
#include "logo_95x32.h"
​
#define OLED_RESET 4
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
​
void setup()
{
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
  display.clearDisplay(); // 清屏
  display.drawBitmap(0, 0, logo, 128, 64, 1); //画出字符对应点阵数据
  display.display();
  delay(1000);
  display.clearDisplay();
  /*-------------------- Display picture and text ---------------------------*/
  display.drawBitmap(16, 0, logo_small, 95, 32, 1);
  display.setTextColor(WHITE);  //设置字体颜色
  display.setTextSize(2);  //设置字体大小 1 is default 6x8, 2 is 12x16, 3 is 18x24
  display.setCursor(0,33); //设置起始光标
  display.print("v=");
  display.setCursor(72,33); //设置起始光标
  display.print("km/h");
  display.setCursor(0,49); //设置起始光标
  display.print("str=");
  display.display();
}
​
void loop()
{
}

效果

IMG_20241210_114559.jpg

2. 显示数据

目标:实现雷达监测数据的对应填充显示,包括速度 v信号强度 str

IMG_20241210_125011.jpg

代码

思路:将之前帖子中实现的串口打印数据与 OLED 显示框架结合,将 vstr 两数据分别填充至 OLED 屏预留位置处即可。

#include < Wire.h >
#include < Adafruit_GFX.h >
#include < Adafruit_SSD1306.h >
#include "logo_128x64.h"
#include "logo_95x32.h"
​
#define OLED_RESET 4
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
​
String comdata = "";
​
void setup()
{
  Serial.begin(115200);
  while (Serial.read() >= 0){}//clear serialbuffer
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
  display.clearDisplay(); // 清屏
  display.drawBitmap(0, 0, logo, 128, 64, 1); //画出字符对应点阵数据
  display.display();
  delay(1000);
  display.clearDisplay();
  /*-------------------- Display picture and text ---------------------------*/
  display.drawBitmap(16, 0, logo_small, 95, 32, 1);
  display.setTextColor(WHITE);  //设置字体颜色
  display.setTextSize(2);  //设置字体大小 1 is default 6x8, 2 is 12x16, 3 is 18x24
  display.setCursor(0,33); //设置起始光标
  display.print("v=");
  display.setCursor(80,33); //设置起始光标
  display.print("km/h");
  display.setCursor(0,49); //设置起始光标
  display.print("str=");
  display.display();
}
​
void loop()
{
  if (Serial.available() > 0) 
  {
    char data = Serial.read();
    comdata += data;
    if (data == 'n')
    {// type of comdata: v=1.0 km/h, str=10151
      int separatorIndex = comdata.indexOf(','); // 假设分隔符为逗号
      if (separatorIndex != -1)
      {
        String part1 = comdata.substring(0, separatorIndex); // 第一个部分
        String part2 = comdata.substring(separatorIndex + 1); // 第二个部分
        // 打印分割后的数据
        //Serial.println(part1); // type of part1: v=1.0 km/h
        //Serial.println(part2); // type of part2:  str=10151
        /*------------ part1 : v=1.0 km/h ----------*/
        int part1separatorIndex = part1.indexOf('='); //index of '='
        if (part1separatorIndex != -1)
        {
          String vlc = part1.substring(part1separatorIndex + 1); // index of velocity, type of vlc is 1.0 km/h
          // vlc: 1.0 km/h
          int VLCseparatorIndex = vlc.indexOf(' '); // index of ' '
          String v = vlc.substring(0, VLCseparatorIndex);// v only include number
          float Vn = v.toFloat();
          Serial.print(Vn); // print velocity number
          Serial.print(',');
          //display.setCursor(25,33); //设置起始光标
          display.fillRect(25, 33, 60, 16, BLACK);
          display.display();
          display.setCursor(25,33); //设置起始光标
          display.print(Vn);
          display.display();
        }
        /*------------- part2 :  str=10151 ------------------*/
        int part2separatorIndex = part2.indexOf('='); //index of '='
        if (part2separatorIndex != -1)
        {
          String strng = part2.substring(part2separatorIndex + 1); // strng only include number
          int Sn = strng.toInt();
          Serial.print(Sn); // print strength number
          Serial.println();
          //display.setCursor(49,49); //设置起始光标
          display.fillRect(49, 49, 79, 16, BLACK);
          //display.setPixelColor();
          display.display();
          display.setCursor(49,49); //设置起始光标
          display.print(Sn);
          display.display();
        }
      }
      comdata = "";
    }
  }
}

效果

IMG_20241210_125011.jpg

这里由于字体设置为 2 号,无法满足 km/h 单位的完整填充,因此被数据覆盖住一部分,可根据实际需求调整字体大小。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    50937

    浏览量

    752747
  • 单片机
    +关注

    关注

    6034

    文章

    44541

    浏览量

    634074
  • OLED
    +关注

    关注

    119

    文章

    6187

    浏览量

    223998
  • 雷达
    +关注

    关注

    50

    文章

    2923

    浏览量

    117436
收藏 人收藏

    评论

    相关推荐

    oled是什么显示OLED与LCD的区别

    OLED是什么显示OLED(Organic Light-Emitting Diode),即有机发光二极管,是一种电流型的有机发光器件。其工作原理是通过载流子的注入和复合而致发光,发光强度与注入
    的头像 发表于 10-21 16:40 1174次阅读

    oled显示屏的优缺点有哪些

    OLED(有机发光二极管)显示屏作为一种先进的显示技术,近年来在电子产品领域得到了广泛的应用。其独特的发光原理和构造使其具有一系列显著的优点,但同时也存在一些不容忽视的缺点。以下是对OLED
    的头像 发表于 10-21 16:37 1089次阅读

    ESP8266 太空人动画的 OLED 显示

    ESP8266 太空人动画的 OLED 显示
    的头像 发表于 10-08 15:06 238次阅读
    ESP8266 太空人动画的 <b class='flag-5'>OLED</b> <b class='flag-5'>显示</b>

    NodeMCU ESP8266 读取 DHT11 环境温湿度数据OLED显示

    OLED显示
    jf_07365693
    发布于 :2024年08月14日 16:43:37

    Arduino Nano 读取 DHT11 环境温湿度数据OLED显示

    OLED显示
    jf_07365693
    发布于 :2024年08月14日 16:43:01

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据OLED显示

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据OLED显示
    的头像 发表于 08-13 18:04 1067次阅读
    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度<b class='flag-5'>数据</b>及 <b class='flag-5'>OLED</b><b class='flag-5'>显示</b>

    ESP8266网络天气时钟OLED显示

    基于ESP8266实现网络获取天气和时钟并OLED显示
    的头像 发表于 06-28 04:46 1057次阅读
    ESP8266网络天气时钟<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>

    ESP8266网络天气时钟OLED显示

    OLED显示
    jf_07365693
    发布于 :2024年06月28日 04:36:26

    如何为SPI OLED显示屏添加另一个设备?

    SPI 数据接口将图像传送到 OLED 显示屏。使用 UVC 应用说明中的说明操作 UVC 部件。如何为 SPI OLED 显示屏添加另一
    发表于 05-31 06:18

    雷达液位计无显示是什么故障

    雷达液位计无显示是一种常见的故障现象,可能由多种原因引起。
    的头像 发表于 05-14 17:42 1472次阅读

    三星显示和LG显示加强OLED游戏显示器布局

     三星显示亦在积极拓展客户群体,与全球十余家知名显示器品牌建立合作关系。在三星电子OLED显示器受到好评之后,三星显示意识到
    的头像 发表于 05-13 11:42 597次阅读

    探寻未来显示技术:LCD、LED、OLED谁将引领潮流?

    随着科技的不断进步,显示技术也在不断演进,LCD、LED和OLED显示技术作为主流,各自展现出独特的特点和优势。那么在未来,谁将引领显示屏的潮流呢? 本文勋瑞光电科技将带您深入了
    的头像 发表于 03-18 09:44 1061次阅读
    探寻未来<b class='flag-5'>显示</b>技术:LCD、LED、<b class='flag-5'>OLED</b>谁将引领潮流?

    成都汇阳投资关于OLED 显示面板设备国产替代正当时

    OLED 凭借性能优势已成新一代显示技术主流 OLED 为 自发光显示技术 ,与非 自发光主流技术 LCD 相 比 ,OLED 具备对比度高
    的头像 发表于 03-14 11:36 567次阅读

    什么是oled显示oled属于液晶屏幕吗

    OLED显示器(有机发光二级管显示器)是一种使用有机发光材料作为发光元件的显示技术。与传统液晶显示器(LCD)不同,
    的头像 发表于 01-23 15:49 2487次阅读

    全志H3实现OLED显示

    ) 完成上述两个外设的初始化,下面声明一个8*128大小的list变量,*附件:MKP_OLED.7z来充当显存,并通过SPI发送数据的方式刷新显示,以达到OLED
    发表于 12-15 13:48