通常情况下,这种问题是由于I2C地址冲突造成的。我们可以使用不同的地址来解决这个问题。下面是使用Adafruit SSD1306库的示例代码:
#include
#include
#include
#define OLED1_ADDR 0x3C // OLED #1地址
#define OLED2_ADDR 0x3D // OLED #2地址
Adafruit_SSD1306 oled1(128, 32, &Wire, OLED1_ADDR); // 使用OLED #1
Adafruit_SSD1306 oled2(128, 32, &Wire, OLED2_ADDR); // 使用OLED #2
void setup() {
Wire.begin();
oled1.begin(SSD1306_SWITCHCAPVCC, OLED1_ADDR);
oled2.begin(SSD1306_SWITCHCAPVCC, OLED2_ADDR);
// 屏幕清空
oled1.clearDisplay();
oled2.clearDisplay();
// 写入内容
oled1.setTextSize(1);
oled1.setTextColor(WHITE);
oled1.setCursor(0,0);
oled1.print("OLED #1 Working!");
oled2.setTextSize(1);
oled2.setTextColor(WHITE);
oled2.setCursor(0,0);
oled2.print("OLED #2 Working!");
// 显示内容
oled1.display();
oled2.display();
}
void loop() {
// 循环不做任何事情
}
在这个例子中,我们通过在构造函数中传递不同的地址来创建两个OLED对象。然后我们可以使用不同的对象来控制每个OLED的显示。