Adafruit_SSD1306使用自定义i2c引脚

初学arduino时需要驱动0.96的oled屏幕,U8g2库虽然很全,但是sendBuffer时耗时较久,影响loop内的代码
遂准备使用Adafruit_SSD1306试一试,但是网上的关于四脚i2c接口oled屏幕的教程都是千篇一律从官方示例拿来的代码,只有使用硬件i2c引脚的示例,查询源码后发现使用任意gpio引脚驱动的方法,记录如下:

对象创建和官方一样

#include 
#include 
#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函数中

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
  }
}

关键是增加了Wire.begin(SDA,SCL)这一句来使用软件i2c引脚
display.begin中
第一个参数不知道什么意思,但不影响使用
第二个参数表示i2c地址,看很多地方都写0x3c也就这么写了,具体为啥我也不懂
第三个参数表示是否reset
第四个参数periphBegin比较关键,要为false,否则函数内部将再次调用Wire.begin();

if (periphBegin)
      wire->begin();

但是为true也可以显示,不过为了保险起见,还是写false

你可能感兴趣的:(Adafruit_SSD1306使用自定义i2c引脚)