Kann mir jemand helfen

HALLO KANN MIR JEMAND HELFEN
Vorweg ich mach das seit 3 Tagen erst.
Kann mir jemand sagen wo mein Fehler ist, oder was ich falsch mache.eigentlich geht alles , bis zu dem punkt an em die 2 led angehen sollen bei eine bestimmten temperatur.mfg

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 13
float temp = 0.00;
float hum = 0.00;
DHT_Unified dht(DHTPIN, DHT22);

void setup() {
Serial.begin(9600);
dht.begin();

pinMode(9, OUTPUT); //licht//
pinMode(10, OUTPUT); // licht //
pinMode(11, OUTPUT); // licht //
pinMode(12, OUTPUT); // licht //
pinMode(2, OUTPUT); // led //
pinMode(8, OUTPUT); // led //

digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(2, HIGH);
digitalWrite(8, HIGH);

Serial.println("LED FUNKTIONS TEST");
digitalWrite(2, HIGH);
Serial.println("GRÜN AN");
delay (2000);
digitalWrite(8, HIGH);
Serial.println("ROT AN");
delay (2000);
digitalWrite(2, LOW);
Serial.println("GRÜN AUS");
delay (2000);
digitalWrite(8, LOW);
Serial.println("ROT AUS");

}

void loop() {
sensors_event_t event;
dht.humidity().getEvent(&event); //Luftfeuchte messen und ausgeben
hum = event.relative_humidity;
Serial.print("FEUCHTIKEIT: ");
Serial.print( String(hum));
dht.temperature().getEvent(&event); //Temperatur messen und ausgeben
temp = event.temperature;
Serial.print("\Temperatur: ");
Serial.println( String(temp));
delay(2000); // zwei Sekunden warten, DHT22 Sensor Antwortzeit ist 2 Sek.
String readString;
String Q;
while (Serial.available()) {
delay(1);
if (Serial.available() > 0) {
char c = Serial.read();
if (isControl(c)) {
break;
}
readString += c;
}
Q = readString;
if (Q == "0") {
digitalWrite(9, LOW);
Serial.println("ON COUCH ");
}
if (Q == ",") {
digitalWrite(9, HIGH);
Serial.println("OFF COUCH ");
}
if (Q == "1") {
digitalWrite(10, LOW);
Serial.println("ON HEIZUNG");
}
if (Q == "2") {
digitalWrite(10, HIGH);
Serial.println("Qff HEIZUNG");
}
if (Q == "4") {
digitalWrite(11, LOW);
Serial.println("ON TV");
}
if (Q == "5") {
digitalWrite(11, "HIGH ");
Serial.println("Off TV");
}
if (Q == "7") {
digitalWrite(12, LOW);
Serial.println("ON KLEINE LAMPE VORNE");
}
if (Q == "8") {
digitalWrite(12, HIGH);
Serial.println("off KLEINE LAMPE VORNE");
}
if (Q == "-") {
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
Serial.println("alle aus");
}
if (Q == "+") {
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
Serial.println("alle an");
}

if (temp < 19)

  digitalWrite(2, LOW);

}
if (temp >= 20)
{
digitalWrite(8, LOW);

}
if (temp > 18)
{
digitalWrite(2, LOW);
delay (100);
digitalWrite(8, LOW);
}
delay(200);
}

Erster Fehler: Du hast die Forum-Anleitung nicht gelesen. Dort steht z.B. drin, wie Code präsentiert werden soll, und daß man vor Fragen erst erwähnen soll, was das Programm können soll.

Schreien: VIELLEICHT.

Normale Lautstärke:
Du solltest Variablen für die Ein/Ausgänge verwenden. Eine Zahl sagt wenig was daran angeschlossen ist.
Also statt 2 zB pinLEDrot.
Sprechende Namen helfen den Sketch einfacher zu lesen.

Wie Du mit Strings umgehst finde ich gefährlich.
Wenn Du mehrere Zeichen an den Controller verschickst wird nie ein Vergleich mit einem Zeichen wahr sein.
Mach keine Spaghetticode mit if sondern verwende switch case.

Welchen Arduino hast Du?

if (temp < 19)
  digitalWrite(2, LOW);
}
if (temp >= 20)
{
digitalWrite(8, LOW);
}
if (temp > 18)
{
digitalWrite(2, LOW);
delay (100);
digitalWrite(8, LOW);
} 

Im setup() schaltest Du die 2 Ausgänge auf LOW.
Im oben kopierten Teil des Sketches schaltest Du die Ausgänge wieder auf LOW also aus. Wieso sollten da die LED leuchten?

Außerdem ist
(temp >= 20)
in
(temp > 18) enthalten
und darum hat der erste Vergleich nur eine sehr kurze Anzeige zu folge.

Grüße Uwe

nach dieser Zeile lässt du dir mit

Serial.print("Q=#");
Serial.print(Q);
Serial.println;("#");

auf dem seriellen Monitor ausgeben was in der Variable "Q" drinsteht
höchstwahrscheinlich nicht nur ein Zeichen
vgs

Hallo,

nur umformatiert damit man es besser lesen kann. Und paar kleine Tippfehler korrigiert damit es fehlerfrei kompiliert.

Der Fehler wird wie Uwe schon sagte in den Vergleichen liegen die nicht der Logik entsprechen wie von dir gewollt. Da müßtest du nochmal drüberschauen.

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
const byte DHTPIN = 13;
float temp = 0.00;
float hum = 0.00;
DHT_Unified dht(DHTPIN, DHT22);

void setup()
{
  Serial.begin(9600);
  dht.begin();

  pinMode( 9, OUTPUT); // licht
  pinMode(10, OUTPUT); // licht
  pinMode(11, OUTPUT); // licht
  pinMode(12, OUTPUT); // licht
  pinMode( 2, OUTPUT); // led  
  pinMode( 8, OUTPUT); // led

  digitalWrite( 9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite( 2, HIGH);
  digitalWrite( 8, HIGH);

  Serial.println("LED FUNKTIONS TEST");
  digitalWrite(2, HIGH);
  Serial.println("GRÜN AN");
  delay (2000);
  digitalWrite(8, HIGH);
  Serial.println("ROT AN");
  delay (2000);
  digitalWrite(2, LOW);
  Serial.println("GRÜN AUS");
  delay (2000);
  digitalWrite(8, LOW);
  Serial.println("ROT AUS");
}

void loop()
{
  sensors_event_t event;
  dht.humidity().getEvent(&event); //Luftfeuchte messen und ausgeben
  hum = event.relative_humidity;
  Serial.print("FEUCHTIKEIT: ");
  Serial.print( String(hum));
  dht.temperature().getEvent(&event); //Temperatur messen und ausgeben
  temp = event.temperature;
  Serial.print("Temperatur: ");
  Serial.println( String(temp));
  delay(2000); // zwei Sekunden warten, DHT22 Sensor Antwortzeit ist 2 Sek.
  String readString;
  String Q;
  
  while (Serial.available()) {
    delay(1);
    if (Serial.available() > 0) {
      char c = Serial.read();
      if (isControl(c)) {
        break;
      }
      readString += c;
    }
    
    Q = readString;
    if (Q == "0") { digitalWrite( 9,  LOW); Serial.println("ON COUCH ");              }
    if (Q == ",") { digitalWrite( 9, HIGH); Serial.println("OFF COUCH ");             }
    if (Q == "1") { digitalWrite(10,  LOW); Serial.println("ON HEIZUNG");             }
    if (Q == "2") { digitalWrite(10, HIGH); Serial.println("Qff HEIZUNG");            }
    if (Q == "4") { digitalWrite(11,  LOW); Serial.println("ON TV");                  }
    if (Q == "5") { digitalWrite(11, HIGH); Serial.println("Off TV");                 }
    if (Q == "7") { digitalWrite(12,  LOW); Serial.println("ON KLEINE LAMPE VORNE");  }
    if (Q == "8") { digitalWrite(12, HIGH); Serial.println("off KLEINE LAMPE VORNE"); }
    
    if (Q == "-") {
      digitalWrite(12, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite( 9, HIGH);
      digitalWrite(11, HIGH);
      Serial.println("alle aus");
    }
    
    if (Q == "+") {
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite( 9, LOW);
      digitalWrite(11, LOW);
      Serial.println("alle an");
    }

    if (temp < 19) { digitalWrite(2, LOW); }
  }
  
  if (temp >= 20) { digitalWrite(8, LOW); }
  
  if (temp > 18) {
    digitalWrite(2, LOW);
    delay (100);
    digitalWrite(8, LOW);
  }
  
  delay(200);
}

alles klar vielen dank jezt geht es

Hallo,

als nächsten kleinen Schritt empfehle ich dir die Pin Nummern Orgie zu verlassen. Arbeite mit Konstanten, sprechenden Variablennamen. Diese Namen verwendest du im gesamten Sketch. Beim Sketch lesen ist klar was gemeint ist und eine Änderung muss nur zentral an einer Stelle gemacht werden.

Bsp., denk dir für dich passende Namen aus.

const byte pinLichtCouch {9};
const byte pinLichtHeizung {10};

void setup()
{
  pinMode(pinLichtCouch, OUTPUT); 
  pinMode(pinLichtHeizung, OUTPUT); 
}

Und wenn du tiefer einsteigen möchtest kannste noch den nächsten Schritt gehen und vielleicht ein struct verwenden. Also eigene Struktur erschaffen. Könnte die Handhabung erleichtern. Ob das Sinn macht hängt davon ab ob und wie du den Sketch vielleicht noch erweiterst. Wenn nichts dazu kommt kann auch alles bleiben wie es ist.

struct Lampen
{
  const byte couch {9};
  const byte heizung {10};
};
Lampen licht;

void setup()
{
  pinMode(licht.couch, OUTPUT); 
  pinMode(licht.heizung, OUTPUT); 
}

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.