Florian-Binder

Aufgabe 2.4

Nov 10th, 2021 (edited)
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "DHT.h"
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. #define DHTPIN  11                      
  5. #define DHTTYPE DHT22
  6. #define potentiometer A0
  7. #define ledr 2
  8. #define ledg 3
  9. #define ledb 4
  10.  
  11. int led[] = {ledr, ledg, ledb};
  12. int maxwertanpassung = 0;
  13. float temperatur = 0.0;
  14. float feuchtigkeit = 0.0;
  15. float maxwert = 24.0;
  16. float minwert = 20.0;  
  17.  
  18. DHT dht(DHTPIN, DHTTYPE);
  19. LiquidCrystal_I2C lcd(0x27,16,2);
  20.  
  21. void Displayausgabe (String, String);
  22. void ledeinstellen (float, float);
  23. float potentiometer_auslesen ();
  24.  
  25. void setup() {
  26.   dht.begin();  //Sensor übertragung beginnen
  27.   lcd.init(); // LCD initialisieren
  28.   lcd.backlight(); //Hintergrund beleuchtung einschalten
  29.  
  30.   for (int i = 0; i <= 2; i++){
  31.     pinMode(led[i], OUTPUT);
  32.   }
  33. }
  34.  
  35. void loop() {
  36.   DHT22lesen(); //Funktion zum auslesen des Sensors aufrufen
  37.   Displayausgabe ("Celsius:  " + String(temperatur) + "C", "Humidity: " + String (feuchtigkeit) + "%"); //Der Funktion zum anzeigen von Text auf dem LCD Bildschirm, Parameter übergeben
  38.   ledeinstellen (minwert, (maxwert + potentiometer_auslesen ())); //Der Funktion Parameter übergeben um die LEDs einzustellen.
  39.   delay (2000); //Zwei Sekunden verzögerung
  40. }
  41.  
  42. void DHT22lesen  () {
  43.   temperatur = dht.readTemperature(); //Temperaturwert in Variable schrieben
  44.   feuchtigkeit = dht.readHumidity();  //feuchtigkeitswert in Variable schreiben
  45. }
  46.  
  47. void Displayausgabe (String z1, String z2){
  48.   lcd.setCursor(0,0); //Couser auf Position 0 in Line 0 setzten
  49.   lcd.print(z1);  // Anzeigetext für die erste Zeile festlegen
  50.   lcd.setCursor(0,1); //Couser auf Position 0 in Line 0 setzten
  51.   lcd.print(z2);  // Anzeigetext für die erste Zeile festlegen
  52. }
  53.  
  54. void resetled () {
  55.   // Arry durchgehen und alle LEDs auschalten
  56.   for (int i = 0; i <=2 ; i++){
  57.     digitalWrite(led[i], LOW);
  58.   }
  59. }
  60.  
  61. void ledeinstellen(float minw, float maxw) {
  62.   if (temperatur < minw){ //mindestwert: blaue LED
  63.     resetled();
  64.     digitalWrite(led[2], HIGH);
  65.   }
  66.   else if (temperatur > maxw){ //maxwert: rote LED
  67.     resetled();
  68.     digitalWrite(led[0], HIGH);
  69.   }
  70.   else {  //normalwert: grüne LED
  71.     resetled();
  72.     digitalWrite(led[1], HIGH);
  73.   }
  74.  
  75. }
  76.  
  77. float potentiometer_auslesen (){ //Potentiometer auslesen
  78.   int tmp = 0;
  79.   int ausgabe = 0;
  80.  
  81.   if (analogRead(potentiometer) >= 512){
  82.     tmp = map((analogRead(potentiometer)),512,1023,0,10);  //Werte von 512 bis 1023 in sektionen von 0 bis 10 einteilen und "umrechnen"
  83.    
  84.   }
  85.   else {
  86.     tmp = map((analogRead(potentiometer)),0,511,-10,0);  //Werte von 0 bis 511 in sektionen von -10 bis 0 einteilen und "umrechnen"
  87.   }
  88.  
  89.    if (tmp != maxwertanpassung){ //Überprüfung ob der Wert verändert wurde
  90.      maxwertanpassung = tmp; //Überschreiben der Prüfvariable
  91.       if ((maxwert + tmp) < minwert) { //Überprüfung ob der neue Maxwert unter dem Minwert ist
  92.        ausgabe = (minwert - maxwert); //Wert darf den Minwert nicht unterschreiten. Somit wird maxwert auf minwert gebracht
  93.       }
  94.       else {ausgabe = tmp;} //Wert anpassung
  95.       Displayausgabe ("Maxwert:  " + String(maxwert + ausgabe) + "C", "Minwert:  " + String (minwert) + "C"); //Anzeige auf dem LCD Display des neuen Max und Min wertes
  96.       delay(5000); //Delay damit man die Werte auf dem Display sieht
  97.       return ausgabe; //Rückgabe des Faktors um den der Maxwert angepasst werden muss
  98.    }
  99. }
Add Comment
Please, Sign In to add comment