【螢火工場CEM5826-M11測評】OLED顯示雷達數據
本文結合之前關于串口打印雷達監測數據的研究,進一步擴展至 OLED 屏幕顯示。
該項目整體分為兩部分:一、框架顯示;二、數據采集與填充顯示。
為了減小 MCU 負擔,采用 局部刷新 的方案。
1. 顯示框架
所需庫函數 Wire.h
、Adafruit_GFX.h
、Adafruit_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()
{
}
效果
2. 顯示數據
目標:實現雷達監測數據的對應填充顯示,包括速度 v
和信號強度 str
代碼
思路:將之前帖子中實現的串口打印數據與 OLED 顯示框架結合,將 v
和 str
兩數據分別填充至 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 = "";
}
}
}
效果
這里由于字體設置為 2 號,無法滿足 km/h 單位的完整填充,因此被數據覆蓋住一部分,可根據實際需求調整字體大小。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
傳感器
+關注
關注
2551文章
51097瀏覽量
753527 -
單片機
+關注
關注
6037文章
44558瀏覽量
635214 -
OLED
+關注
關注
119文章
6200瀏覽量
224194 -
雷達
+關注
關注
50文章
2936瀏覽量
117528
發布評論請先 登錄
相關推薦
oled是什么顯示屏 OLED與LCD的區別
OLED是什么顯示屏 OLED(Organic Light-Emitting Diode),即有機發光二極管,是一種電流型的有機發光器件。其工作原理是通過載流子的注入和復合而致發光,發光強度與注入
oled顯示屏的優缺點有哪些
OLED(有機發光二極管)顯示屏作為一種先進的顯示技術,近年來在電子產品領域得到了廣泛的應用。其獨特的發光原理和構造使其具有一系列顯著的優點,但同時也存在一些不容忽視的缺點。以下是對OLED
Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
如何為SPI OLED顯示屏添加另一個設備?
SPI 數據接口將圖像傳送到 OLED 顯示屏。使用 UVC 應用說明中的說明操作 UVC 部件。如何為 SPI OLED 顯示屏添加另一
發表于 05-31 06:18
三星顯示和LG顯示加強OLED游戲顯示器布局
三星顯示亦在積極拓展客戶群體,與全球十余家知名顯示器品牌建立合作關系。在三星電子OLED顯示器受到好評之后,三星顯示意識到
探尋未來顯示技術:LCD、LED、OLED誰將引領潮流?
隨著科技的不斷進步,顯示技術也在不斷演進,LCD、LED和OLED顯示技術作為主流,各自展現出獨特的特點和優勢。那么在未來,誰將引領顯示屏的潮流呢?
本文勛瑞光電科技將帶您深入了
成都匯陽投資關于OLED 顯示面板設備國產替代正當時
OLED 憑借性能優勢已成新一代顯示技術主流 OLED 為 自發光顯示技術 ,與非 自發光主流技術 LCD 相 比 ,OLED 具備對比度高
stm32f407vet6驅動0.96寸oled,顯示屏無法顯示怎么解決?
stm32f407vet6驅動0.96寸oled——iic協議代碼無報錯時鐘正確顯示屏無法顯示
發表于 03-14 06:49
什么是oled顯示器 oled屬于液晶屏幕嗎
OLED顯示器(有機發光二級管顯示器)是一種使用有機發光材料作為發光元件的顯示技術。與傳統液晶顯示器(LCD)不同,
評論