Buongiorno
Scusate se vi chiedo un aiuto su un argomento che avate già discusso:
( Doppio Oled.
Per realizzare un banco di controllo motore ho bisogno di gestire 2 schermi Oled SSD1306 indipendentemente.
Non posso utilizzare lo sketch compreso nel topic Doppio Oled in quanto se dichiaro lo schema come indicato
Adafruit_SSD1306 display1(-1);
con Adafruit SSD1306 v2.5.9 non ho la corretta dimensione del video.
Quindi ho dichiarato i displeys con il comando
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Tuttavia con il codice che ho scritto va sempre e solo un solo schermo.
Dal punto di vista hardware non ci sono problemi: 2 schermi distinti con indirizzi I2C 0x3C e 0x3D (in uno schemo ho modificato la posizione del jumper).
Se modifico il codice per fare andare solo il display 1 il programma gira correttamente (0x3D).
Se modifico il codice per fare andare solo il display 2 il programma gira correttamente (0x3C).
Se li attivo contemporaneamente va sempre e solo quello dichiarato per primo indirizzo 0x3D.
Qualcuno potrebbe analizzare il codice e farmi sapere cosa sto (sicuramente) sbagliando?
Grazie 1000 per l'aiuto.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
// Adafruit_SSD1306 display1(-1);
// Adafruit_SSD1306 display2(-1);
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display1.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display2.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display1.display();
display2.display();
delay(2000);
}
void loop() {
// Nota: nei tests con un singolo schermo devo disattivare le linee dell'altro schermo
// Scrivo "World" al centro dello schermo SSD1306 display 2 0x3D
display1.clearDisplay();
display1.setTextSize(2);
display1.setTextColor(WHITE);
display1.setCursor(30,30);
display1.println("World");
display1.display();
delay(2000);
display1.clearDisplay();
display1.setTextSize(2);
display1.setTextColor(WHITE);
display1.setCursor(30,30);
display1.println("2World2");
display1.display();
delay(5000);
// Scrivo "World" al centro dello schermo SSD1306 display 1 0x3C
display2.clearDisplay();
display2.setTextSize(2);
display2.setTextColor(BLACK, WHITE);
display2.setCursor(30,30);
display2.println("Hello");
display2.display();
delay(2000);
display2.clearDisplay();
display2.setTextSize(2);
display2.setTextColor(BLACK, WHITE);
display2.setCursor(30,30);
display2.println("2HELLO2");
display2.display();
delay(5000);
}