#include <Wire.h> // Bibliothek
#include <SSD1306Ascii.h> // Bibliothek
#include <SSD1306AsciiWire.h> // Bibliothek
#define wokwisimulation 1 //
SSD1306AsciiWire oled; //
#define ssd1306 1
#define seriell 1
#define POTI A6 // PIN des Poti defenieren
#define ROT 12
#define GELB 11
#define GRUEN 10
unsigned long ms_alt = 0;
bool m_toggle = 0;
int P_alt = 0;
bool ring_toggle = 0;
#include <Adafruit_NeoPixel.h> // Einbindung der Adafruit_Neopixel.h Bibliothek
#define PIN 4 // An welchem digitalen Pin ist der WS2812B Ring mit dem Mikrocontroller verbunden
#define NUMPIXELS 12 // Über wie viele Pixel verfügt der WS2812B Ring?
Adafruit_NeoPixel led_ring = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void OLED_Poti( int ad );
void ledRing ( unsigned int value, uint8_t r, uint8_t g, uint8_t b );
void Ampel_Blinken( byte Ampel_farbe, unsigned int Thalbe );
void setup() // Teilaufgabe 1 , übernommen aus der Vorgabe
{
#ifdef wokwisimulation
led_ring.setBrightness(210);
#else
led_ring.setBrightness(42);
#endif
for( byte i=10; i<13; i++)
{
pinMode( i, OUTPUT); // LEDs rot-gelb-gruen
}
Wire.begin(); // I2C - BUS aktivieren
oled.setFont(System5x7); // OLED-Display Schrifftart
oled.begin(&Adafruit128x64, 0x3C); // OLED-Display aktivieren
oled.set2X(); // OLED-Display Schriftgröße
led_ring.begin(); // LED-Ring aktivieren
}
void loop() // Teilaufgabe 5
{
int P = analogRead(A6);
if(P > (P_alt+7) or P < (P_alt-7))
{
OLED_Poti(P);
P_alt = P;
}
if(P < 350)
{
ledRing(4,0,255,0); // Ring unten in grün
Ampel_Blinken(10,200); // grüne LED blinkt
}
if(P >= 350 and P < 700)
{
ledRing(8,255,255,0); // Ring links in gelb
Ampel_Blinken(11,500); // gelbe LED blinkt
}
if(P > 700)
{
ledRing(0,255,0,0); // Ring oben rechts in rot
Ampel_Blinken(12,800); // rote LED blinkt
}
}
void ledRing ( unsigned int value, uint8_t r, uint8_t g, uint8_t b ) // Teilaufgabe 2
{
for(int = i; i < 12; i++)
{
led_ring.setPixelColor(bitRead(value,i));
}
/*
for(int i = 0; i < 12; i++)
{
if(i < value or i > (value + 3))
{
led_ring.setPixelColor(i,0,0,0);
}
else
{
led_ring.setPixelColor(i,r,g,b);
}
}*/
led_ring.show();
}
void OLED_Poti( int ad ) // Teilaufgabe 3
{
oled.setCursor(0,0);
oled.print("ADW: 0x");
oled.print(ad,HEX);
oled.print(" ");
oled.setCursor(0,2);
oled.print("U = ");
oled.print((map(ad,0,1024,0,5000))/1000.0,3);
oled.print("V ");
oled.setCursor(0,4);
oled.print(" = ");
oled.print(map(ad,0,1024,0,5000));
oled.print("mV ");
oled.setCursor(0,6);
oled.print("P = ");
oled.print(ad);
oled.print(" ");
}
void Ampel_Blinken( byte Ampel_farbe, unsigned int Thalbe ) // Teilaufgabe 4
{
if(millis() > (ms_alt + Thalbe) and m_toggle == 0)
{
digitalWrite(Ampel_farbe, HIGH);
m_toggle = 1;
ms_alt = millis();
}
if(millis() > (ms_alt + Thalbe) and m_toggle == 1)
{
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
m_toggle = 0;
ms_alt = millis();
}
}
0
1
2
3
4
5
6