代码之家  ›  专栏  ›  技术社区  ›  Jacob H

Arduino SSD1306显示屏-奇怪的行为

  •  0
  • Jacob H  · 技术社区  · 5 年前

    我有两个SSD1306(126x64)显示器,其运行方式非常奇怪:

    2 failing SSD1306 and 1 working SSD1306

    https://streamable.com/dl0p8j
    here (adafruit SSD1306+GFX)。所有显示器均位于I2C端口0x3c上。

    左边的那个来自不同的制作人,效果很好。我不知道我的设备是否有缺陷,或者它们是否需要稍微不同的处理。当写入显示器时,整个图像似乎被绘制到顶部的6-8像素区域中。

    如果有人有这方面的经验,我将不胜感激。我也不确定这是否是发布此消息的正确位置,所以请告诉我是否有更合适的SE站点。

    0 回复  |  直到 5 年前
        1
  •  0
  •   hcheung    5 年前

    为了使运行在同一总线上的I2C设备工作,每个设备都需要有自己的I2C地址,不幸的是,SSD1306只有两个I2C地址可供选择,0x3c或0x3d。

    对于在同一I2C上运行的两个以上SSD1306,您需要一个Arduino板来提供多个I2C接口,或者添加一些硬件解决方案,如 I2C multiplexer .

    同时,如果要同时运行两个显示,则需要修改代码以创建具有不同地址的两个显示实例。

    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();