Warum leuchtet meine 2. LED nicht

Hallo Leute,

Ich habe soweit meinen Code eigentlich fertig, jetzt wollte ich nur noch um die Temperaturänderung zu visualisieren neben meinem LCD-Display noch LED’s verwenden.
Für eine Temperaturänderung von 1-2°C leuchtet eine rote LED, für mehr als 2°C leuchten zwei rote LEDs.
Für eine Temperaturänderung von -1&-2°C leuchtet eine blaue LED. Nun will ich aber dass auch eine zweite blaue LED leuchtet für Werte die größer als -2°C sind.
Ich habe schon alles ausprobiert und es klappt nicht, die LED funktioniert und ist richtig angeschlossen. Kann sein, dass ich jetzt schon zu lange auf den Code gestarrt habe und es einfach nicht mehr verstehe.

#include<LiquidCrystal.h>
#include<stdio.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int main();
const int KuehlschrankTemp = 29.0;
byte i = 0;
byte n = 0;
void setup() {

  lcd.begin (16, 2);
  lcd.print("Kuehlotemp 4000");
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (A0, INPUT);
  Serial.begin(115200);
  delay(3000);

}
void loop() {
  delay(2000);
  lcd.clear();
  int Tempaenderung;
  struct adr
  {
    long millisekunden;
    int temperatur;
  };
  typedef struct adr Mess;
  Mess  messwerte[12];

  messwerte[i].millisekunden = millis();
  messwerte[i].temperatur = ((((analogRead(A0) / 1024.0) * 5.0) - 0.5) * 100);

  Serial.println(messwerte[i].millisekunden);
  Serial.println(messwerte[i].temperatur);

  if ( i == 11 ) {
    n = 0;
  }
  else {
    n = i + 1;
  }
  Tempaenderung = messwerte[i].temperatur - messwerte[n].temperatur;
  Serial.println(Tempaenderung);
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.print(messwerte[i].temperatur);
  lcd.print("Grad C.");
  if (millis() > 32000 )
  {

    lcd.setCursor(0, 1);
    lcd.print("Diff 2 min:");
    lcd.print( Tempaenderung);

    if (Tempaenderung <= 2 && Tempaenderung > 0)
    {

      digitalWrite(9, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(6, LOW);
    }
    else if (Tempaenderung > 2)
    {
      digitalWrite(9, HIGH);
      digitalWrite(8, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(6, LOW);
    }
    else if (Tempaenderung == 0)
    {
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, LOW);
      digitalWrite(6, LOW);
    }
    else if (Tempaenderung = -1, Tempaenderung = -2)
    {
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(6, LOW);
    }
    else if (Tempaenderung > -2)
    {
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(6, HIGH);
    }
  }
  i = i + 1;

  if (i == 12) {
    i = 0;

  }

}

Um eine aussagekräftige Antwort geben zu können, musste man deine Schaltung kennen.
Falls du die beiden blauen LEDs in Reihe geschaltet haben solltest, das funktioniert auf Grund der Flussspannung blauer LEDs an 5V nicht.

rammdon:
Ich habe schon alles ausprobiert und es klappt nicht, die LED funktioniert und ist richtig angeschlossen. Kann sein, dass ich jetzt schon zu lange auf den Code gestarrt habe und es einfach nicht mehr verstehe.

    else if (Tempaenderung = -1, Tempaenderung = -2)

Vielleicht :wink:

Nachtrag:

else if (Tempaenderung > -2)

macht ebenfalls nicht das was Du willst. -3 ist kleiner als -2.

void setup() {
Serial.begin(115200);
if (-3 > -2){ Serial.println("-3 > -2");}
if (-3 < -2) {Serial.println("-3 < -2");}
}

void loop() {}

Vielleicht

Meine Glaskugel kennt deine geheimen Wünsche:
Ziemlich sicher macht das nicht, was du eigentlich willst.

(setze Tempänderung auf den Wert -2, was einem bool true entspricht, und führe daher das danach folgende else nie aus).

michael_x:
Meine Glaskugel kennt deine geheimen Wünsche:
Ziemlich sicher macht das nicht, was du eigentlich willst.

(setze Tempänderung auf den Wert -2, was einem bool true entspricht, und führe daher das danach folgende else nie aus).

Das wenige was von meinem Hirn inzwischen noch übrig ist, ist nun völlig matsche.
Ich verstehe was du meinst, weiß aber nicht wie ich es ändern muss damit es klappt. Ich habe es jetzt hinbekommen dass eine blaue LED durchgehend leuchtet egal was passiert. :slight_smile:

my_xy_projekt:
Vielleicht :wink:

Nachtrag:

else if (Tempaenderung > -2)

macht ebenfalls nicht das was Du willst. -3 ist kleiner als -2.

void setup() {

Serial.begin(115200);
if (-3 > -2){ Serial.println("-3 > -2");}
if (-3 < -2) {Serial.println("-3 < -2");}
}

void loop() {}

Ich versteh, das Zeichen war falsch und das mit -1 und -2 habe ich geändert in

else if (Tempaenderung >= -2)
    {
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(6, LOW);

Trotzdem weiß ich nicht genau wie ich das ändern kann dass jetzt die 2. LED leuchtet.

rammdon:
Ich versteh, das Zeichen war falsch und das mit -1 und -2 habe ich geändert in

else if (Tempaenderung >= -2)

{
     digitalWrite(9, LOW);
     digitalWrite(8, LOW);
     digitalWrite(7, HIGH);
     digitalWrite(6, LOW);



Trotzdem weiß ich nicht genau wie ich das ändern kann dass jetzt die 2. LED leuchtet.

Ich würd es anders machen, aber weil Du schon so angefangen hast, hier mein Vorschlag, wo Du genau nachverfolgen kannst, wie es geht:

void setup()
  {
  // put your setup code here, to run once:
  Serial.begin(115200);
  for (int i = -4; i < 5; i++)
    {
    Serial.print(i);
    Serial.print(" / ");
    if (i <= 2 && i > 0)
      {
      Serial.println("Ausgabe 1");
      }
    else if (i > 2)
      {
      Serial.println("Ausgabe 2");
      }
    if (i == 0)
      {
      Serial.println("Ausgabe 3");
      }
    if (i < 0 && i >= -2)
      {
      Serial.println("Ausgabe 4");
      }
    else if (i < -2)
      {
      Serial.println("Ausgabe 5");
      }
    }
  }
void loop()
  {
  // put your main code here, to run repeatedly:
  }

Ausgabe auf dem Monitor:

11:53:01.755 -> -4 / Ausgabe 5
11:53:01.755 -> -3 / Ausgabe 5
11:53:01.755 -> -2 / Ausgabe 4
11:53:01.755 -> -1 / Ausgabe 4
11:53:01.755 -> 0 / Ausgabe 3
11:53:01.755 -> 1 / Ausgabe 1
11:53:01.755 -> 2 / Ausgabe 1
11:53:01.755 -> 3 / Ausgabe 2
11:53:01.755 -> 4 / Ausgabe 2

Hi, ja,
erstens , einer der Fehler liegt dort wo my_xy_projekt schon gezeigt hat.
der zweite hier:

else if (Tempaenderung > -2)

bei negativen Werten must Du auch den vergleichs-operator negieren. das heisst: z.B. -3 ist nicht grösser als - 2, sondern kleiner!
Du musst also den vergleich so schreiben:

else if (Tempaenderung < -2)

Aber vorher, ganz wichtig, muss die andere Zeile, auf die Dich my-xy-projekt schon hingewiesen hat, korrekt sein, sonst kann das hier auch nicht funktionieren.

LG Stefan