// #1 https://wokwi.com/projects/423067790873291777
// #2 https://wokwi.com/projects/403187130149864449
// #3 https://wokwi.com/projects/424874901145541633
// #4 https://wokwi.com/projects/423078470449220609
// Mix aus #3 (I2C-Erweiterungen) und #4 (Cube):
// https://wokwi.com/projects/425023922333382657
#include <Wire.h>
#include <SSD1306Ascii.h>
#include <SSD1306AsciiWire.h>
#include <DHT20.h> // requires lib
#include <dht.h>
#include <IRremote.h>
DHT20 dht20;
dht dht22;
#define SP Serial.print
void readDht20( float * temp ) ;
#define wokwisimulation 1
#define PIN_RECEIVER 2
IRrecv receiver(PIN_RECEIVER)
SSD1306AsciiWire oled;
#define ssd1306 1
#define seriell 1
#define POTI A6
#define ROT 12
#define GELB 11
#define GRUEN 10
//#define D9
unsigned long ms_alt = 0;
unsigned long ms=0;
bool AmpOn=0;
uint32_t colour;
unsigned long ms2=0;
unsigned long ms_old=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);
// #include <DHT.h> // Einbinden der <DHT_sensor_library> und <DHT> Bibliothek
// DHT dht11(A3, DHT11); // DHT11 wird erstellt
//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() /* setup */
{
receiver.enableIRIn();
pinMode(9, INPUT);
#ifdef wokwisimulation
led_ring.setBrightness( 210 );
#else
led_ring.setBrightness( 42 ); // auf HW-Cube viel zu hell
#endif
for( byte i=10; i<13; i++) pinMode( i, OUTPUT); // LEDs rot-gelb-gruen
Wire.begin();
oled.setFont(System5x7);
oled.begin(&Adafruit128x64, 0x3C);
oled.set2X();
led_ring.begin();
dht20.begin(); // für den DHT20
//dht22.begin();
Serial.begin(9600);
// ab hier nur noch Nonsens: // sorry, SHNE
// ledRing( 7, 8, 9, 10 ); // Regenbogenfarben mit Unsinnsargumenten
//Ampel_Blinken( GELB, 0 ); // blinkt nicht,sondern leuchtet permanent
} // ende setup
void loop()
{
bool taster = digitalRead(9);
Serial.print(taster);
int adw = analogRead(A6);
float t36 = map(adw,20,358,-40,125);
int temp1 = dht20.read();
int temp2 = dht22.read22(A3);
float t20 = dht20.getTemperature();
float f20 = dht20.getHumidity();
float t22 = dht22.temperature;
float f22 = dht22.humidity;
OLED(t36,t22,t20,taster,f20,f22);
ms2 = millis();
if (ms2-ms_old > 180000){
Serial.print("TMP36/°C: ");
Serial.print(t36);
Serial.print("DHT22/°C: ");
Serial.print(t22,2);
Serial.print("TMP20/°C: ");
Serial.println(t20,2);
ms_old=ms2;
}
int mittel = (t36+t20+t22)/3;
ledRing(mittel);
if(mittel<15){
Ampel_Blinken(GRUEN,1000);
}
else if(mittel>30){
Ampel_Blinken(ROT,200);
}
else{
Ampel_Blinken(GELB,700);
}
} // ende loop
void OLED( int tmp36, float temp22, float temp20, bool taster, float f20, float f22)
{
if(taster == 0)
{
oled.setCursor(0,1);
oled.print( "T36: " );
oled.print( tmp36);
oled.write(128);
oled.print("C ");
oled.setCursor(0,3);
oled.print( "D22: " );
oled.print( temp22);
oled.write(128);
oled.print("C ");
oled.setCursor(0,5);
oled.print( "D20: " );
oled.print( temp20);
oled.write(128);
oled.print("C ");
}
if(taster == 1)
{
oled.setCursor(0,1);
oled.print( "F20: " );
oled.print( f20,0 );
oled.print( " % " );
oled.setCursor(0,3);
oled.print( "F22: " );
oled.print( f22,0 );
oled.print( " % " );
oled.setCursor(0,5);
oled.print( " " );
}
}
void ledRing ( unsigned int value)
{
int blue = 0;
int red = 0;
int green = 0;
if (value>=0 & value<256){
green = value;
red = 0;
blue = 255- value;
}
if (value>=256 & value<512){
red = value-255;
green = 255-red;
blue = 0;
}
colour = led_ring.Color(red,green,blue);
for( byte i=0; i<NUMPIXELS; i++)
{
led_ring.setPixelColor(i, colour );
}
led_ring.show(); // Anzeigen der Pixelfarben auf dem WS2812B LED Ring
}
void Ampel_Blinken( byte Ampel_farbe, unsigned int Thalbe ) {
ms=millis();
if((ms-ms_alt>Thalbe)&(AmpOn==false)){
digitalWrite(ROT,LOW);
digitalWrite(GELB,LOW);
digitalWrite(GRUEN,LOW);
digitalWrite(Ampel_farbe,HIGH);
AmpOn=true;
ms_alt=ms;
}
if((ms-ms_alt>Thalbe)&(AmpOn==true)){
digitalWrite(ROT,LOW);
digitalWrite(GELB,LOW);
digitalWrite(GRUEN,LOW);
AmpOn=false;
ms_alt=ms;
}
}
void readDht20( float * temp )
{ delay( 800 ) ;
dht20.read();
*temp = dht20.getTemperature(); // Einlesen der DHT20-Temperatur
}
0
1
2
3
4
5
6