// https://wokwi.com/projects/397299219842990081
// PWM 01b: ADW A0 Poti + 10 LEDs + LCD + S0
#include <LiquidCrystal.h>
LiquidCrystal lcd( 12, 13, 15, 16, 17, 18);
// RS, E, DB4, DB5, DB6, DB7
int i; long adw0 = 0, adw_alt = -30 ;
unsigned char pwm, g; // 0..255 1 Byte 8 bits groß
#include "DHT.h"
#define DHTPIN 7
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
void setup() { // initialize serial interface, LCD + ports:
Serial.begin( 9600 ) ;
lcd.begin( 20,4 ) ;
dht.begin();
// everything output, except A0 and 0 + 1
for( i = 2; i <=18 ; i++ ) if( i != 14 ) pinMode(i, OUTPUT);
pinMode( A0, INPUT) ; // A0 = pin 14
}
void loop() { // ADW + ser.interface + LCD-output of Voltage
adw0 = analogRead( A0 ) ; // 0..5 V => 0..1023 10 Bit-ADW
pwm = adw0 / 4 ; // 0..1023 => 0..255
g = (adw0 * 100) / 1024 ;
if( adw0 != adw_alt ) {
Serial.print( "U/mV = " ) ;
Serial.print( adw0 * 5000 / 1023 ) ;
Serial.print( "\t g/% = " ) ;
Serial.println( g ) ;
adw_alt = adw0 ;
}
lcd.setCursor( 0,0 );
lcd.print( "U/mV = " ) ;
lcd.print( adw0 * 5000 / 1023 ) ; // 0..1023 => 0,0 …5,0
lcd.print( " " ) ;
lcd.setCursor( 0, 1 ) ;
lcd.print( "g/% = " ) ;
lcd.print( g ) ; lcd.print( " " ) ;
// delay( 50 ) ; // Unsinn, weil PWM bereits alle Timer nutzt
analogWrite( 9, pwm ) ;
analogWrite( 10, pwm ) ; analogWrite( 11, 255-pwm ) ;
// oder:
// analogWrite( 10, ~pwm ) ; analogWrite( 11, pwm ) ;
// oder:
// analogWrite(10, map(pwm,0,255,255,0) );analogWrite( 11, pwm ) ;
if( adw0 > 511)
{
pwm = map( adw0, 512, 1023, 255,0 ); // gruen
analogWrite( 6, 255-pwm ) ; // rot
analogWrite( 5, pwm ) ; // gruen
analogWrite( 3, 0 ) ; // blau
}
else
{
pwm = map( adw0, 0, 511, 0,255 ); // gruen
analogWrite( 6, 0 ) ; // rot
analogWrite( 5, pwm ) ; // gruen
analogWrite( 3, 255-pwm ) ; // blau
}
float temp = dht.readTemperature();
float humi = dht.readHumidity();
lcd.setCursor( 0,2 );
lcd.print( "Temp: " );
lcd.print( temp,1 ) ;
lcd.write( 223 ); lcd.print( "C " );
// klappte nicht: lcd.setCursor( 0,3 );
// for( byte i = 0; i<19; i++) lcd.write( 170+i) ;
lcd.setCursor( 0,3 );
lcd.print( "RH/% = " );
lcd.print( humi,1 ) ;
lcd.print( " " );
}