Arduino SSD1306显示器 - 奇怪的行为。

问题描述 投票:0回答:1

我有两台SSD1306(126x64)显示器,它们的表现非常奇怪。

2 failing SSD1306 and 1 working SSD1306

以下是我所做的草图短片 https:/streamable.comdl0p8j 而草图本身是 此处 adafruit SSD1306+GFX)。所有的显示器都在I2C端口0x3c。

左边那个是不同生产商的,工作正常。我搞不清楚是我的设备有缺陷,还是它们需要稍微不同的处理。当显示器被写入时,似乎整个图像都被绘制到顶部的6-8像素区域。

如果有人有这方面的经验,我会非常感激。我也不知道这里是否适合发帖,如果有更合适的SE网站,请告诉我。

arduino hardware atmega
1个回答
0
投票

为了让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();
© www.soinside.com 2019 - 2024. All rights reserved.