#include "Wire.h"
#include "Adafruit_SSD1306.h"
#include "Fonts/FreeSans12pt7b.h"
// I2C OLED 1
#define SDA_1 21
#define SCL_1 22
// I2C OLED 2
#define SDA_2 17
#define SCL_2 18
// Maße des Bildschirms
#define BildschirmBreite 128
#define BildschirmHoehe 64
#define OLED_RESET 4
// Adresse: 0x3C oder 0x3D
#define Adresse 0x3c
// OLEDs (oled1/oled2) mit Startparametern
Adafruit_SSD1306 oled1(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);
Adafruit_SSD1306 oled2(BildschirmBreite, BildschirmHoehe, &Wire1, OLED_RESET);
void setup()
{
Serial.begin(9600);
while (!Serial);
Wire.begin(SDA_1, SCL_1);
Wire1.begin(SDA_2, SCL_2);
oled1.begin(SSD1306_SWITCHCAPVCC, Adresse);
oled2.begin(SSD1306_SWITCHCAPVCC, Adresse);
oled1.setFont(&FreeSans12pt7b);
oled2.setFont(&FreeSans12pt7b);
oled1.clearDisplay();
oled2.clearDisplay();
oled1.setTextColor(WHITE);
oled2.setTextColor(WHITE);
}
void loop()
{
oled1.clearDisplay();
oled2.clearDisplay();
delay(3000);
// ausgefüllte Kreise von links nach rechts
int Radius = 3;
// Start am linken Rand
int StartX = Radius;
int StartY = 5;
while (StartX < oled1.width() - Radius)
{
for (int i = StartY; i < BildschirmHoehe- Radius; i += 10) {
oled1.fillCircle(StartX, i, Radius, WHITE);
oled2.fillCircle(StartX, i, Radius, WHITE);
oled1.display();
oled2.display();
delay(1);
}
StartX += 10;
}
delay(1000);
oled1.clearDisplay();
oled2.clearDisplay();
delay(1000);
// horizontale Linien mit drawFastHLine
for (int i = 0; i < BildschirmHoehe - 1; i += 4)
{
oled1.drawFastHLine(0, i, BildschirmBreite, WHITE);
oled2.drawFastHLine(0, i, BildschirmBreite, WHITE);
oled1.display();
oled2.display();
delay(1);
}
oled1.clearDisplay();
oled2.clearDisplay();
delay(1000);
// vertikale Linie mit drawLine
for (int i = 0; i < BildschirmBreite - 1; i += 4)
{
oled1.drawLine(i, 0, i, BildschirmHoehe - 1, WHITE);
oled2.drawLine(i, 0, i, BildschirmHoehe - 1, WHITE);
oled1.display();
oled2.display();
delay(1);
}
oled1.clearDisplay();
oled2.clearDisplay();
delay(1000);
// Rechtecke
for (int i = 0; i < BildschirmHoehe / 2; i += 4)
{
oled1.drawRect(i, i, BildschirmBreite - 2 * i, BildschirmHoehe - 2 * i, WHITE);
oled1.display();
oled2.drawRect(i, i, BildschirmBreite - 2 * i, BildschirmHoehe - 2 * i, WHITE);
oled2.display();
delay(10);
}
delay(1000);
oled1.clearDisplay();
oled2.clearDisplay();
// abgerundete Rechtecke
for (int i = 0; i < BildschirmHoehe / 2; i += 4)
{
oled1.drawRoundRect(i, i, BildschirmBreite - 2 * i, BildschirmHoehe - 2 * i, 5, WHITE);
oled1.display();
oled2.drawRoundRect(i, i, BildschirmBreite - 2 * i, BildschirmHoehe - 2 * i, 5, WHITE);
oled2.display();
delay(10);
}
delay(1000);
oled1.clearDisplay();
oled2.clearDisplay();
// einzelne Pixel zufällig anordnen
for (int i = 0; i < 500; i++)
{
int x = random(1, BildschirmBreite);
int y = random(1, BildschirmHoehe);
oled1.drawPixel(x, y, WHITE);
oled2.drawPixel(x, y, WHITE);
delay(2);
}
oled1.display();
oled2.display();
delay(1000);
oled1.clearDisplay();
oled2.clearDisplay();
oled1.setCursor(5, 20);
oled1.print("Text");
oled1.setCursor(5, 50);
oled1.print("Text");
oled1.display();
oled2.setCursor(5, 20);
oled2.print("Text");
oled2.setCursor(5, 50);
oled2.print("Text");
oled2.display();
delay(1000);
oled1.clearDisplay();
oled2.clearDisplay();
}