我有两台SSD1306(126x64)显示器,它们的表现非常奇怪。
以下是我所做的草图短片 https:/streamable.comdl0p8j 而草图本身是 此处 adafruit SSD1306+GFX)。所有的显示器都在I2C端口0x3c。
左边那个是不同生产商的,工作正常。我搞不清楚是我的设备有缺陷,还是它们需要稍微不同的处理。当显示器被写入时,似乎整个图像都被绘制到顶部的6-8像素区域。
如果有人有这方面的经验,我会非常感激。我也不知道这里是否适合发帖,如果有更合适的SE网站,请告诉我。
为了让I2C设备在同一总线上运行,每个设备都需要有自己的I2C addr,不幸的是SSD1306只有两个I2C地址可以选择,0x3c或0x3d。
如果要让两个以上的SSD1306在同一个I2C上运行,你需要有一个Arduino板子,可以提供多个I2C接口,或者添加一些硬件解决方案,比如说,你可以在一个板子上安装一个I2C接口。I2C多路复用器.
同时,如果你想同时运行两个显示器,你需要修改代码来创建两个不同地址的显示器实例。
将这一行改为
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
改为:
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
把这行:
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
改为
if(!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("display 1 failed"));
for(;;);
}
if(!display2.begin(SSD1306_SWITCHCAPVCC, 0x3D)) {
Serial.println(F("display 2 failed"));
for(;;);
}
对于所有后续的召唤 display
方法,你需要把它改为 display1
并再加一行类似的字 display2
比如说,。
display.display();
需要改成:
dispaly1.display();
display2.display();