// ///v0
// #include <Wire.h>
// #include <Adafruit_GFX.h>
// #include <Adafruit_SSD1306.h>
// #define DEFAULT_OLED_ADDR 0x3C
// #define DISPLAY1_ENABLE 2
// #define DISPLAY2_ENABLE 3
// #define DISPLAY3_ENABLE 4
// #define SCREEN_WIDTH 128 // OLED display width, in pixels
// #define SCREEN_HEIGHT 64 // OLED display height, in pixels
// #define OLED_RESET -1
// // Create display objects
// Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// void setup() {
// Serial.begin(9600);
// pinMode(DISPLAY1_ENABLE, OUTPUT);
// pinMode(DISPLAY2_ENABLE, OUTPUT);
// pinMode(DISPLAY3_ENABLE, OUTPUT);
// digitalWrite(DISPLAY1_ENABLE, HIGH);
// digitalWrite(DISPLAY2_ENABLE, HIGH);
// digitalWrite(DISPLAY3_ENABLE, HIGH);
// initDisplay(display1, DISPLAY1_ENABLE);
// initDisplay(display2, DISPLAY2_ENABLE);
// initDisplay(display3, DISPLAY3_ENABLE);
// showMessage(display1, DISPLAY1_ENABLE, "Display 1!");
// showMessage(display2, DISPLAY2_ENABLE, "Display 2!");
// showMessage(display3, DISPLAY3_ENABLE, "Display 3!");
// }
// void loop() {
// }
// void initDisplay(Adafruit_SSD1306 &display, int powerPin) {
// digitalWrite(powerPin, LOW);
// delay(2000);
// if(!display.begin(SSD1306_SWITCHCAPVCC, DEFAULT_OLED_ADDR)) {
// Serial.println(F("SSD1306 allocation failed"));
// for(;;);
// }
// display.clearDisplay();
// display.display();
// digitalWrite(powerPin, HIGH); //should be done in a loop afterwards to refresh images?
// }
// void showMessage(Adafruit_SSD1306 &display, int powerPin, const char *message) {
// digitalWrite(powerPin, LOW);
// delay(2000);
// display.clearDisplay();
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// display.setCursor(0, 0);
// display.print(message);
// display.display();
// digitalWrite(powerPin, HIGH);
// }
///v1
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DEFAULT_OLED_ADDR 0x3C
//associate a GPIO pin with the power line of each display to be able to selectively perform operations on the screens
#define DISPLAY1_ENABLE 2
#define DISPLAY2_ENABLE 3
#define DISPLAY3_ENABLE 4
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1
// Create display objects / not sure if having 3 or just 1 makes any difference
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//initialize the displays and set all the selector pins to LOW
void setup() {
Serial.begin(9600);
pinMode(DISPLAY1_ENABLE, OUTPUT);
pinMode(DISPLAY2_ENABLE, OUTPUT);
pinMode(DISPLAY3_ENABLE, OUTPUT);
digitalWrite(DISPLAY1_ENABLE, LOW);
digitalWrite(DISPLAY2_ENABLE, LOW);
digitalWrite(DISPLAY3_ENABLE, LOW);
initDisplay(display1, DISPLAY1_ENABLE);
initDisplay(display2, DISPLAY2_ENABLE);
initDisplay(display3, DISPLAY3_ENABLE);
}
void loop() {
// Update each screen sequentially
updateScreen(display1, DISPLAY1_ENABLE, "Display 1!");
delay(1000);
updateScreen(display2, DISPLAY2_ENABLE, "Display 2!");
delay(1000);
updateScreen(display3, DISPLAY3_ENABLE, "Display 3!");
delay(1000);
}
void initDisplay(Adafruit_SSD1306 &display, int powerPin) {
// Initialize the display
if(!display.begin(SSD1306_SWITCHCAPVCC, DEFAULT_OLED_ADDR)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(2000); // Pause for 2 seconds
}
void updateScreen(Adafruit_SSD1306 &display, int powerPin, const char *message) {
//turn off all screens
digitalWrite(DISPLAY1_ENABLE, LOW);
digitalWrite(DISPLAY2_ENABLE, LOW);
digitalWrite(DISPLAY3_ENABLE, LOW);
//turn on the selected screen
switch(powerPin) {
case 1:
digitalWrite(DISPLAY1_ENABLE, HIGH);
break;
case 2:
digitalWrite(DISPLAY2_ENABLE, HIGH);
break;
case 3:
digitalWrite(DISPLAY3_ENABLE, HIGH);
break;
}
// Clear the display buffer
display.clearDisplay();
// Set text size and color
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Set cursor position
display.setCursor(0, 0);
// Print the message
display.println(message);
// Display the message
display.display();
// turn off the selected screen
switch(powerPin) {
case 1:
digitalWrite(DISPLAY1_ENABLE, LOW);
break;
case 2:
digitalWrite(DISPLAY2_ENABLE, LOW);
break;
case 3:
digitalWrite(DISPLAY3_ENABLE, LOW);
break;
}
}
///v2
// #include <Wire.h>
// #include <Adafruit_GFX.h>
// #include <Adafruit_SSD1306.h>
// #define SCREEN_WIDTH 128
// #define SCREEN_HEIGHT 64
// #define OLED_RESET -1
// Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// // Define GPIO pins for controlling the screens
// const int screen1ControlPin = 2;
// const int screen2ControlPin = 3;
// const int screen3ControlPin = 4;
// void setup() {
// // Initialize serial communication
// Serial.begin(9600);
// // Initialize control pins
// pinMode(screen1ControlPin, OUTPUT);
// pinMode(screen2ControlPin, OUTPUT);
// pinMode(screen3ControlPin, OUTPUT);
// // Turn off all screens initially
// digitalWrite(screen1ControlPin, LOW);
// digitalWrite(screen2ControlPin, LOW);
// digitalWrite(screen3ControlPin, LOW);
// // Initialize the display
// if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
// Serial.println(F("SSD1306 allocation failed"));
// for(;;);
// }
// display.display();
// delay(2000); // Pause for 2 seconds
// }
// void loop() {
// // Update each screen sequentially
// updateScreen(1, "Display 1");
// delay(1000);
// updateScreen(2, "Display 2");
// delay(1000);
// updateScreen(3, "Display 3");
// delay(1000);
// }
// void updateScreen(int screenNumber, const char* message) {
// // Turn off all screens
// digitalWrite(screen1ControlPin, LOW);
// digitalWrite(screen2ControlPin, LOW);
// digitalWrite(screen3ControlPin, LOW);
// // Turn on the selected screen
// switch(screenNumber) {
// case 1:
// digitalWrite(screen1ControlPin, HIGH);
// break;
// case 2:
// digitalWrite(screen2ControlPin, HIGH);
// break;
// case 3:
// digitalWrite(screen3ControlPin, HIGH);
// break;
// }
// // Clear the display buffer
// display.clearDisplay();
// // Set text size and color
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// // Set cursor position
// display.setCursor(0, 0);
// // Print the message
// display.println(message);
// // Display the message
// display.display();
// // Turn off the selected screen
// switch(screenNumber) {
// case 1:
// digitalWrite(screen1ControlPin, LOW);
// break;
// case 2:
// digitalWrite(screen2ControlPin, LOW);
// break;
// case 3:
// digitalWrite(screen3ControlPin, LOW);
// break;
// }
// }