#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED 寬度像素
#define SCREEN_HEIGHT 64 // OLED 高度像素
// 設定OLED
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//自訂圖形,從Image2LCD轉過來的,尺寸是128x48,少掉的16個像素是上方黃色區塊(假設是用藍黃雙色的OLED)
//本範例為了在上方區塊顯示文字,所以圖形就沒有涵蓋整個高度
static const unsigned char PROGMEM logo_bmp[] =
{
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X8F,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFE,0X3F,0XFF,0XBF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC0,0X00,0X3F,0XFF,0XC0,0X60,0X43,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC0,0X00,0XFF,0XFF,0XE0,0X40,0X43,0XFF,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC7,0XFD,0X3C,0XFF,0XFC,0X04,0X43,0XFF,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X00,0X60,0X60,0XE0,0X04,0X43,0XE1,0XC0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X00,0X80,0XC0,0X40,0X18,0X47,0XC0,0X80,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X44,0X20,0X44,0X40,0X30,0X47,0XC6,0X08,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X44,0X60,0X44,0X40,0X60,0X47,0XC7,0X88,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X44,0X40,0X44,0X46,0X40,0X47,0XC7,0X88,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC4,0X44,0X44,0X44,0X44,0X46,0X47,0XC4,0X88,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XC0,0X04,0X60,0X60,0X60,0X00,0X00,0X60,0X40,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X04,0X70,0X70,0X70,0X00,0X00,0X30,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X0C,0XFF,0XCC,0X10,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X0C,0X00,0X80,0X1A,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE0,0X00,0X58,0X60,0X9E,0X00,0X0F,0X80,0X5F,0X91,0X70,0X00,0X4B,0XFF,0X00,0XFF,
0XE0,0X04,0X02,0X7F,0XDE,0X00,0X0F,0X80,0X3F,0X80,0X38,0X00,0X03,0XF0,0X00,0X3F,
0XF0,0X04,0X1F,0X7F,0XFE,0X00,0X0F,0XC0,0X3F,0X81,0XF8,0X00,0X03,0XC0,0X00,0X3F,
0XF0,0X00,0X7E,0X7F,0XFE,0X00,0X1F,0XC0,0X7F,0X03,0XF8,0X0B,0X67,0X00,0XFE,0X7F,
0XF0,0X00,0X1C,0X7C,0XFC,0X00,0X1F,0XC0,0X7C,0X0F,0XF8,0X0F,0XFE,0X03,0XFF,0X7F,
0XF0,0X00,0X3C,0X3A,0X78,0X00,0X1F,0X80,0X78,0X1F,0XF8,0X1F,0XFC,0X0F,0XFF,0XFF,
0XF0,0X00,0X10,0X0F,0X38,0X00,0X1F,0X80,0XE0,0X7F,0XF0,0X1F,0XF8,0X0F,0XFF,0XFF,
0XF0,0X00,0X00,0XFF,0XB8,0X00,0X1F,0X80,0X80,0XFF,0XF0,0X00,0X30,0X1F,0XFF,0XFF,
0XF0,0X00,0X01,0X80,0X38,0X00,0X1F,0X80,0X00,0XFF,0XF0,0X00,0X30,0X1F,0XFF,0XFF,
0XF8,0X00,0X18,0X38,0X38,0X00,0X3F,0X80,0X00,0XFF,0XF0,0X00,0X30,0X1F,0XFF,0XFF,
0XF8,0X00,0X18,0X1F,0XB8,0X00,0X3F,0X81,0X80,0X7F,0XE0,0X3F,0XF0,0X1F,0XFF,0XFF,
0XF8,0X00,0X0C,0X1F,0XF0,0X00,0X3F,0X01,0XC0,0X3F,0XE0,0X3F,0XF0,0X0F,0XFF,0XFF,
0XF8,0X00,0X07,0X3F,0XF4,0X00,0X3F,0X01,0XC0,0X1F,0XE0,0X3F,0XF8,0X07,0XFF,0XFF,
0XF8,0X00,0X03,0X3F,0XE4,0X00,0X3F,0X01,0XE0,0X1F,0XE0,0X3F,0XF8,0X03,0XFF,0XFF,
0XF8,0X00,0X00,0X3F,0XCE,0X80,0X3E,0X01,0XF0,0X0F,0XE0,0X3F,0XFC,0X00,0X00,0XFF,
0XFC,0X00,0X00,0X3E,0X1E,0X87,0XFE,0X01,0XF8,0X03,0XC0,0X3F,0XFE,0X00,0X01,0XFF,
0XFC,0X00,0X08,0X3E,0X3F,0X87,0XF8,0X01,0XFE,0X01,0XC0,0X1F,0XFF,0XC0,0X01,0XFF,
0XFC,0X00,0X1E,0X1E,0X5D,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X0F,0X04,0X1D,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X2E,0X00,0X1D,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFC,0X00,0X66,0X00,0X1F,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFE,0X20,0X76,0X11,0XBF,0XC0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFE,0XF0,0X7B,0XF0,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF0,0X3D,0XF0,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XF0,0X3F,0XE4,0XE8,0X18,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X3F,0XC0,0X0C,0XD8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X30,0X00,0X0C,0XD9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X0C,0XCD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XE0,0X00,0X00,0X0E,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XC0,0X00,0X00,0X06,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};
void setup() {
Serial.begin(9600);
// 偵測是否安裝好OLED了
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 一般1306 OLED的位址都是0x3C
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// 顯示Adafruit的LOGO,算是開機畫面
display.display();
delay(1000); // 停1秒
// 清除畫面
display.clearDisplay();
testdrawstyles(); // 測試文字
testdrawbitmap(); // 顯示圖形
}
void loop() {
}
void testdrawstyles(void) {
display.clearDisplay();
display.setTextSize(2); // 設定文字大小
display.setTextColor(1); // 1:OLED預設的顏色(這個會依該OLED的顏色來決定)
display.setCursor(0,0); // 設定起始座標
display.print("Hello OLED"); // 要顯示的字串
display.display(); // 要有這行才會把文字顯示出來
delay(1000);
}
void testdrawbitmap(void) {
//display.clearDisplay();
//顯示圖形,x,y,圖形文字,寬,高,1:OLED預設的顏色(這個會依該OLED的顏色來決定)
display.drawBitmap(0,16,logo_bmp, 128, 48, 1);
display.display(); // 要有這行才會把文字顯示出來
delay(1000);
}