初學(xué)arduino時(shí)需要驅(qū)動(dòng)0.96的oled屏幕裳涛,U8g2庫(kù)雖然很全,但是sendBuffer時(shí)耗時(shí)較久赖舟,影響loop內(nèi)的代碼
遂準(zhǔn)備使用Adafruit_SSD1306試一試,但是網(wǎng)上的關(guān)于四腳i2c接口oled屏幕的教程都是千篇一律從官方示例拿來的代碼,只有使用硬件i2c引腳的示例淆院,查詢?cè)创a后發(fā)現(xiàn)使用任意gpio引腳驅(qū)動(dòng)的方法,記錄如下:
對(duì)象創(chuàng)建和官方一樣
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(/*SCREEN_WIDTH*/128, /*SCREEN_HEIGHT*/64, &Wire, OLED_RESET);
setup函數(shù)中
void setup() {
Wire.begin(/*SDA*/12,/*SCL*/14);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c,false,false)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
}
關(guān)鍵是增加了Wire.begin(SDA,SCL)這一句來使用軟件i2c引腳
display.begin中
第一個(gè)參數(shù)不知道什么意思句惯,但不影響使用
第二個(gè)參數(shù)表示i2c地址土辩,看很多地方都寫0x3c也就這么寫了,具體為啥我也不懂
第三個(gè)參數(shù)表示是否reset
第四個(gè)參數(shù)periphBegin比較關(guān)鍵抢野,要為false拷淘,否則函數(shù)內(nèi)部將再次調(diào)用Wire.begin();
if (periphBegin)
wire->begin();
但是為true也可以顯示,不過為了保險(xiǎn)起見指孤,還是寫false