记Adafruit_SSD1306使用自定义i2c引脚

记Adafruit_SSD1306使用自定义i2c引脚


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

对象创建和官方一样

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

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值