Arduino Forum

International => Deutsch => Topic started by: ht81 on Jun 14, 2012, 10:30 pm

Title: Wie auf Minus Werte reagieren?
Post by: ht81 on Jun 14, 2012, 10:30 pm
Hallo zusammen, ich habe mal wieder eine Frage. Ich möchte meine Tempearturwerte (von hinten gesehen) immer an der selben stelle haben. Beispiel: LCD (16,2)

0   1   2   3   4   5   6   7   8   9   10   11    etc....

                       -   1   0   .    1    °    C                lcd.setCursor(5,1)
                            -   1   .    1    °    C                lcd.setCursor(6,1)
                                1   .    1    °    C                lcd.setCursor(7,1)
                            1  0   .    1    °    C                lcd.setCursor(6,1)


habe versucht es mit einer "if Abfrage" zu bewerkstelligen was auch zum Teil klappt. Leider scheint es der "if Abfrage" egal zu sein ob es 9,9 oder -9,9 ist. Hier mal ein Code Auszug:

Code: [Select]
void ShowMin() { // Minimale Temp. / Luftfeuchte auf LCD darstellen
 tempupdate = 1; // Tempupdate auf 1 setzten um nach Anzeige ein Update des Screens zu erzeugen
 lcd.setCursor(0,1); // Cursorbeginn auf Zeichen 0, Zeile 2
 lcd.print("           "); // Trick um einen Teil des Display zu löschen ;)
 lcd.setCursor(0,1); // Cursorbeginn auf Zeichen 0, Zeile 2
 lcd.print("Min:"); // Text "Min:"
 if (temp_ti_min < -9.9){ // Wenn Temp. < -9.9°C
 lcd.setCursor(5,1); // Cursorbeginn auf Zeichen 5, Zeile 2
 }
 if (temp_ti_min < 0.0){ // Wenn Temp. < -0.0°C
 lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 5, Zeile 2
 }
 //if (temp_ti_min < 9.9){ // Wenn Temp. < 9.9°C
 //lcd.setCursor(7,1); // Cursorbeginn auf Zeichen 5, Zeile 2
 //}
 else { // Sonst normale Ausgabe
 lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
 }


Hoffe es ist versändlich. Werde noch zum Hirsch.... :(
Title: Re: Wie auf Minus Werte reagieren?
Post by: uwefed on Jun 14, 2012, 10:56 pm
Welchen Variabeltyp hat temp_ti_min ?

Du mußt mit Bereichen kontrollieren:

kleiner <-9,9                        // 3 Zeichen vor Komma
zwischen >=-9,9 und <0,0    // 2 Zeichen vor Komma
zwischen >=0,0  und <9,9    // 1 Zeichen vor Komma
größer >9,9                         // 2 Zeichen vor Komma

Grüße Uwe
Title: Re: Wie auf Minus Werte reagieren?
Post by: ht81 on Jun 15, 2012, 07:26 am
Hallo Uwe,

danke für deine Antwort. Die Temperaturwerte werden in einer "float" Variable gespeichert.
Ich werde es heute Abend gleich probieren und dann wieder berichten.  :)
Title: Re: Wie auf Minus Werte reagieren?
Post by: MaFu on Jun 15, 2012, 08:36 am
Das Problem bei dieser Abfrage
Code: [Select]
  if (temp_ti_min < -9.9){ // Wenn Temp. < -9.9°C
  lcd.setCursor(5,1); // Cursorbeginn auf Zeichen 5, Zeile 2
  }
  if (temp_ti_min < 0.0){ // Wenn Temp. < -0.0°C
  lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
  }
  if (temp_ti_min < 9.9){ // Wenn Temp. < 9.9°C
  lcd.setCursor(7,1); // Cursorbeginn auf Zeichen 7, Zeile 2
  }
  else { // Sonst normale Ausgabe
  lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
  }

ist, dass ja die nachfolgenden if auch immer zutreffen. Entscheidend für die Cursorposition ist somit immer die letzte if/else Kombination, die ersten zwei if sind nutzlos.

Mach vor if Nummer zwei und drei noch ein else, dann sollte es passen.
Zudem ist die Abfrage im letzten if auch noch falsch ( < 9.9, müßte <= 9.9 lauten). Ich würde auch die Abfragewerte anders setzen um Rundungsfehler zu umgehen (kann ja intern auch 9.900001 sein).
Wenn Du dann die Abfragen noch verschachtelst reduzierst du den "worst case" von drei auf zwei if Abfragen in Folge.
Dann noch den Schleifeninhalt einrücken erhöht ungemein die Lesbarkeit.
Code: [Select]
  if (temp_ti_min < 0.0){ // Wenn Temp. < 0.0°C
    if (temp_ti_min <= -10.0){ // Wenn Temp. <= -10.0°C
      lcd.setCursor(5,1); // Cursorbeginn auf Zeichen 5, Zeile 2
    }
    else{
      lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
    }
  }
  else if (temp_ti_min < 10.0){ // Wenn Temp. < 10.0°C
    lcd.setCursor(7,1); // Cursorbeginn auf Zeichen 7, Zeile 2
  }
  else { // Sonst normale Ausgabe
    lcd.setCursor(6,1); // Cursorbeginn auf Zeichen 6, Zeile 2
  }
Title: Re: Wie auf Minus Werte reagieren?
Post by: ht81 on Jun 15, 2012, 10:11 pm
Hallo ihr beiden,

hat einwandfrei geklappt. Habe jetzt alle meine Stellen im Code angepasst und siehe da, es scheint zu funktionieren. Danke euch beiden für die Tipps.   :)