# include "U8g2lib.h"
// 0,96 Zoll SSD1306
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// Bildschirmgröße
int BildschirmBreite = oled.getDisplayWidth();
int BildschirmHoehe = oled.getDisplayHeight();
// Pins für die Ampeln
enum Ampel
{
// Startwert Pin 3
FAHRBAHN_ROT_LINKS = 3,
FAHRBAHN_GELB_LINKS, // 4
FAHRBAHN_GRUEN_LINKS, // 5
FUSSGAENGER_ROT_LINKS, // 6
FUSSGAENGER_GRUEN_LINKS, // 7
FAHRBAHN_ROT_RECHTS, // 8
FAHRBAHN_GELB_RECHTS, // 9
FAHRBAHN_GRUEN_RECHTS, // 10
FUSSGAENGER_ROT_RECHTS, // 11
FUSSGAENGER_GRUEN_RECHTS, // 12
};
int LAUTSPRECHER = 13;
// angezeigte Zahl Fahrbahnampel
int NummerFahrbahnampel = 9;
// angezeigte Zahl Fußgängerampel
int NummerFussgaengerampel = 4;
// Sekunden der Grün-Phase Fahrbahnampel
int SekundenGruenFahrbahn = 6;
int SekundenGruenFussgaenger = 4;
void setup()
{
// pinModes der LEDs
for (int i = FAHRBAHN_ROT_LINKS; i <= FUSSGAENGER_GRUEN_RECHTS; i++)
{
pinMode(i, OUTPUT);
}
// Display starten
oled.begin();
// Kontrast maximal 255
oled.setContrast(200);
// Schriftart setzen
oled.setFont(u8g2_font_logisoso62_tn);
}
void loop()
{
// Fahrbahnampeln rot
// links
digitalWrite(FAHRBAHN_ROT_LINKS, HIGH);
digitalWrite(FAHRBAHN_ROT_RECHTS, HIGH);
digitalWrite(FUSSGAENGER_ROT_LINKS, LOW);
digitalWrite(FUSSGAENGER_ROT_RECHTS, LOW);
digitalWrite(FUSSGAENGER_GRUEN_LINKS, HIGH);
digitalWrite(FUSSGAENGER_GRUEN_RECHTS, HIGH);
oled.firstPage();
do
{
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFussgaengerampel);
}
while (oled.nextPage());
// Grünphase Fußgängerampel
for (int i = 0; i < SekundenGruenFussgaenger; i++)
{
// Variable herunterzählen
NummerFussgaengerampel--;
delay(1000);
oled.firstPage();
do
{
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFussgaengerampel);
}
while (oled.nextPage());
}
// OLED löschen
oled.clearDisplay();
// Fußgängerampeln von grün auf rot geschaltet
digitalWrite(FUSSGAENGER_GRUEN_LINKS, LOW);
digitalWrite(FUSSGAENGER_ROT_LINKS, HIGH);
digitalWrite(FUSSGAENGER_GRUEN_RECHTS, LOW);
digitalWrite(FUSSGAENGER_ROT_RECHTS, HIGH);
tone(LAUTSPRECHER, 1000, 10);
delay(1000);
tone(LAUTSPRECHER, 1000, 10);
// Anzeige der Sekunden Fahrbahnampel
oled.firstPage();
do
{
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFahrbahnampel);
}
while (oled.nextPage());
// Fahrbahnampeln auf rot-gelb und dann auf grün schalten
digitalWrite(FAHRBAHN_GELB_LINKS, HIGH);
digitalWrite(FAHRBAHN_GELB_RECHTS, HIGH);
// Variable herunterzählen
NummerFahrbahnampel--;
delay(1000);
oled.firstPage();
do
{
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFahrbahnampel);
}
while (oled.nextPage());
digitalWrite(FAHRBAHN_ROT_LINKS, LOW);
digitalWrite(FAHRBAHN_GELB_LINKS, LOW);
digitalWrite(FAHRBAHN_GRUEN_LINKS, HIGH);
digitalWrite(FAHRBAHN_ROT_RECHTS, LOW);
digitalWrite(FAHRBAHN_GELB_RECHTS, LOW);
digitalWrite(FAHRBAHN_GRUEN_RECHTS, HIGH);
// Grünphase der Fahrbahnampeln
for (int i = 0; i < SekundenGruenFahrbahn; i++)
{
NummerFahrbahnampel--;
delay(1000);
oled.firstPage();
do
{
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFahrbahnampel);
}
while (oled.nextPage());
}
// Fahrbahnampeln auf gelb schalten
digitalWrite(FAHRBAHN_GRUEN_LINKS, LOW);
digitalWrite(FAHRBAHN_GELB_LINKS, HIGH);
digitalWrite(FAHRBAHN_GRUEN_RECHTS, LOW);
digitalWrite(FAHRBAHN_GELB_RECHTS, HIGH);
delay(1000);
NummerFahrbahnampel--;
oled.firstPage();
do
{
oled.setFontDirection(0);
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFahrbahnampel);
}
while (oled.nextPage());
// Fahrbahnampeln gelb aus
digitalWrite(FAHRBAHN_GELB_LINKS, LOW);
digitalWrite(FAHRBAHN_GELB_RECHTS, LOW);
digitalWrite(FUSSGAENGER_ROT_RECHTS, HIGH);
digitalWrite(FUSSGAENGER_ROT_LINKS, HIGH);
digitalWrite(FAHRBAHN_ROT_RECHTS, HIGH);
digitalWrite(FAHRBAHN_ROT_LINKS, HIGH);
oled.firstPage();
do
{
oled.setFontDirection(0);
oled.setCursor(50, BildschirmHoehe);
oled.print(NummerFahrbahnampel);
}
while (oled.nextPage());
delay(1000);
// Wert für die Anzeige der Sekunden zurücksetzen
NummerFahrbahnampel = 9;
NummerFussgaengerampel = 4;
// OLED löschen
oled.clearDisplay();
}
Letzte Aktualisierung: