用Arduino顯示顏色序列(u8g2,OLED)
提前祝大家新年快樂!
主控:Arduino Mega 2560
硬件:126×64 OLED屏幕
IDE:Arduino官方IDE
u8g2庫是Arduino常用於驅動OLED屏幕的好庫,里面有非常多好用的函數,而且可以匹配不同驅動,不同分辨率的OLED屏幕,網上也有很多人對其進行了詳盡的介紹,我這里就不再贅述,有需要的可以通過傳送門學習一下u8g2庫的函數:傳送門(深入學習Arduino u8g2 OLED庫,一篇就夠)
如果沒有u8g2庫的可以去Github上去下載,地址:(https://github.com/olikraus/u8g2)
或者用藍奏雲(我網上找的,不知道哪個版本):傳送門(藍奏雲)
今天測試的是網上買的一個普通OLED屏幕
顯示顏色序列采用的是類似“123+231”的形式,要將其顯示在屏幕上,且對字高有一定需求
因此我使用了PCtoLCD2002軟件,還是取字模->打印圖的操作
PCtoLCD2002下載地址:傳送門(藍奏雲)
代碼也很簡單,直接放上來
Test_OLED.ino
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
String str = "123+321";
void setup() {
// put your setup code here, to run once:
OLED_Init();
}
void loop() {
// put your main code here, to run repeatedly:
OLED_Display(str);
while (1);
}
OLED.ino
char ScanNum_One[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00,
0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x80, 0x3F,
0x00, 0x80, 0x3F, 0x00, 0xC0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xE0, 0x3F, 0x00, 0xF0, 0x3F, 0x00,
0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0x00, 0xF8, 0x3F, 0x00, 0xF8, 0x3E, 0x00, 0xF8, 0x3E, 0x00, 0x78,
0x3E, 0x00, 0x78, 0x3E, 0x00, 0x38, 0x3E, 0x00, 0x18, 0x3E, 0x00, 0x18, 0x3E, 0x00, 0x08, 0x3E,
0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00,
0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00,
0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E,
0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00,
0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00,
0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
char ScanNum_Two[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xC0, 0x3F, 0x00, 0xE0, 0x7F, 0x00, 0xE0,
0xFF, 0x00, 0xF0, 0xFF, 0x00, 0xF0, 0xFF, 0x00, 0xF8, 0xFF, 0x01, 0xF8, 0xFF, 0x01, 0xF8, 0xFF,
0x01, 0xF8, 0xF9, 0x03, 0xF8, 0xF0, 0x03, 0xFC, 0xF0, 0x03, 0x7C, 0xE0, 0x03, 0x7C, 0xE0, 0x03,
0x7C, 0xE0, 0x03, 0x7C, 0xE0, 0x03, 0x70, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00,
0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF8,
0x01, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00,
0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x80, 0x1F, 0x00, 0x80, 0x1F, 0x00, 0xC0,
0x0F, 0x00, 0xC0, 0x07, 0x00, 0xE0, 0x07, 0x00, 0xE0, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xF0, 0x01,
0x00, 0xF0, 0x01, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0xFC, 0xFF, 0x03,
0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFC, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE,
0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
char ScanNum_Three[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xC0, 0x1F, 0x00, 0xE0, 0x3F, 0x00, 0xE0,
0x7F, 0x00, 0xF0, 0x7F, 0x00, 0xF0, 0x7F, 0x00, 0xF8, 0xFF, 0x00, 0xF8, 0xFF, 0x00, 0xF8, 0xFF,
0x00, 0xF8, 0xF9, 0x01, 0xFC, 0xF8, 0x01, 0xFC, 0xF0, 0x01, 0x7C, 0xF0, 0x01, 0x7C, 0xF0, 0x01,
0x7C, 0xF0, 0x01, 0x60, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00,
0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F,
0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
0x00, 0xF8, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00,
0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xE0, 0x03, 0x30, 0xE0, 0x03, 0x3E, 0xE0,
0x03, 0x3E, 0xE0, 0x03, 0x3E, 0xE0, 0x03, 0x7E, 0xF0, 0x03, 0x7E, 0xF0, 0x03, 0x7C, 0xF0, 0x01,
0xFC, 0xF8, 0x01, 0xFC, 0xFF, 0x01, 0xFC, 0xFF, 0x01, 0xF8, 0xFF, 0x00, 0xF8, 0xFF, 0x00, 0xF0,
0x7F, 0x00, 0xF0, 0x7F, 0x00, 0xE0, 0x3F, 0x00, 0xC0, 0x1F, 0x00, 0x80, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
char ScanNum_jia[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0xFE, 0xFF, 0x03, 0xFE, 0xFF,
0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03,
0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0xFE, 0xFF, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F,
0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
void OLED_Init()
{
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFont(u8g2_font_logisoso58_tn);//不設置也沒事
u8g2.setFontDirection(0);
u8g2.clearBuffer();
}
void OLED_Display(String temp)
{
u8g2.clearBuffer();
for (int i = 0; i < 7; ++i)
{
char str = temp.charAt(i);
switch (str)
{
case '1': u8g2.drawXBM(18 * i, 0, 18, 60, ScanNum_One); break;
case '2': u8g2.drawXBM(18 * i, 0, 18, 60, ScanNum_Two); break;
case '3': u8g2.drawXBM(18 * i, 0, 18, 60, ScanNum_Three); break;
case '+': u8g2.drawXBM(18 * i, 0, 18, 60, ScanNum_jia); break;
default: break;
}
}
u8g2.sendBuffer();
}
手邊沒有Arduino板,演示不了.....有時間我再上傳圖
測試很成功~