#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1, 1000000);
typedef struct renderable {
bool active;
void* handler;
} renderable_t;
uint count;
renderable_t* scene;
void testHandler0(Adafruit_SSD1306 screen) {
screen.setCursor(0, 0);
screen.println("Handler 0");
}
void testHandler1(Adafruit_SSD1306 screen) {
screen.setCursor(0, 32);
screen.println("Handler 1");
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Begin Communication With Display
display.clearDisplay(); // Clear Display Buffer
display.setTextSize(1); // Text size should be 1px
display.setTextColor(SSD1306_INVERSE); // Toggle pixels
display.setCursor(0, 0); // Reset Cursor
display.print("Booting...");
display.display(); // Display On Screen
count = 2;
scene = (renderable_t*)malloc(sizeof(renderable_t) * count);
scene[0].active = true;
scene[0].handler = &testHandler0;
scene[1].active = true;
scene[1].handler = &testHandler1;
}
void loop() {
display.clearDisplay();
for (uint i = 0; i < count; i++) {
if (scene[i].active) scene[i].handler(display);
}
display.display();
delay(10); // this speeds up the simulation
}