wenn wert a 0 oder unter 10 "---" ausgeben

Morgen!

ich möchte bei einem bestimmten Wert anstatt den Wert “—” ausgeben auf einem Display!

krigs nicht hin! bitte um hilfe!

void Ausgabe()
{
  
  int GlowOhm = BUSByte[5];
  float GlowRes = GlowOhm;
  float GlowWert = 0;
  string GlowChar = ("---");
  

  if (GlowOhm >= 0 && GlowOhm <= 56) {
    GlowWert = GlowChar;
  }
  if (GlowOhm >= 57 && GlowOhm <= 69) {
    GlowWert = ((GlowRes - 18, 5) / 100);
  }
  if (GlowOhm >= 70 && GlowOhm <= 79) {
    GlowWert = ((GlowRes - 17) / 100);
  }
  if (GlowOhm >= 80 && GlowOhm <= 91) {
    GlowWert = ((GlowRes - 13) / 100);
  }
  if (GlowOhm >= 92 && GlowOhm <= 99) {
    GlowWert = ((GlowRes - 8) / 100);
  }
  if (GlowOhm >= 100 && GlowOhm <= 103) {
    GlowWert = ((GlowRes - 4) / 100);
  }
  if (GlowOhm >= 104 && GlowOhm <= 111) {
    GlowWert = ((GlowRes + 5) / 100);
  }

  u8x8.setFont(u8x8_font_victoriabold8_r);
  u8x8.setCursor(0, 0);


  u8x8.print("FW   ");
  u8x8.print(GlowWert);
  u8x8.println("Ohm");



}

danke!

Sorry, bin selber absoluter Frischling, aber

  1. muss beim String eine Klammer um das "---" ?
  2. Du übergibst ein String ("---") an eine als float initialisierte Variable (GlowWert)? Was soll GlowWert damit anfangen?

Beste Grüße

Michael

eigentlich wurde eh schon alles gesagt. Dennoch:

  if (GlowOhm >= 0 && GlowOhm <= 56) {
    u8x8.print(GlowChar);
  }
  else 
  {
    u8x8.print(GlowWert);
  }

dankeschoen!

Hi

Deine Überprüfungen haben Lücken!!

Du prüfst x>=0 && <=10
Dann x>=11 && <=20
Was ist mit den Werten zwischen 10 und 11?

Zur Anzeige der — → setze Dir einen Merker/ein Flag, daß der Wert ‘ungültig’ ist.
Bei der eigentlichen Anzeige des Wertes prüfst Du dieses Flag und gibst entweder den Wert, oder den String zum Display.
Nicht vergessen, das Flag vor der ganzen Prüferei wieder zurück zu setzen - sonst bekommst Du nach der ersten Ungültigkeit nur noch — angezeigt, da Niemand das Flag mehr auf Gültig zurück dreht.

MfG

postmaster-ino:
Deine Überprüfungen haben Lücken!!

Du prüfst x>=0 && <=10
Dann x>=11 && <=20
Was ist mit den Werten zwischen 10 und 11?

Versteh ich nicht.
Weder in dem Zitat, noch in den hier vorhandenen Code-Fragmenten sehe ich Lücken.

Übrigens: inzwischen geht auch bei Arduino (avr-gcc) eine range case Konstruktion:

float GlowWert;
switch (GlowOhm) {
case  0 ... 56: GlowWert = -1.0; break; // --> "---"
case 57 ... 69: GlowWert = (GlowOhm - 18.5) / 100; break;
case 70 ... 79: GlowWert = (GlowOhm - 17) / 100.0; break;
case 80 ... 91: GlowWert = (GlowOhm - 13) / 100.0; break;
 // ... usw.
default: GlowWert = -1.0; break; // nie vergessen
}
if (GlowWert < 0)  u8x8.print("---");
else u8x8.print(GlowWert);

Mal abgesehen davon, dass GlowWert merkwürdige Sprünge macht und z.B. für 78 und 84 dasselbe Ergebnis (0.61) liefert.

Hi

Wenn Glowert aber float ist (und nicht int/byte), dann ist zwischen 10 und 11 (oder 56 und 57) 'jede Menge Platz'.
Und Dieser wird NICHT in den Abfragen überprüft.
Hoppala ... sehe gerade, daß Glowert INT ist, und somit keine Nachkommastellen hat - DANN passt die Abfrage, da die einnehmbaren Werte ohne Zwischenlücke abgegrast werden!
(Hatte irgendwie float im Kopf - und Da ist zwischen 56 und 57 'jede Menge Platz')

MfG

PS: Warum INT gewählt wurde (und nicht UINT oder BYTE) lässt sich ja noch klören

Versteh ich nicht.

Lag wohl daran, dass ich float nur in äussersten Notfällen nehme. Und gar nicht auf die Idee kam, dein x könne ein float sein.

Mit float kann man übrigens kein switch case machen, und bei solchen if - Ketten hätte ich Bauchweh.

ich arbeite mit int weil:

hex nach dec per int das einfachste ist und ich in float ausgebe wril da erst die berechnung erfolgt

Gibt es davon auch eine verständliche Fassung?

michael_x:
Versteh ich nicht.
Weder in dem Zitat, noch in den hier vorhandenen Code-Fragmenten sehe ich Lücken.

Übrigens: inzwischen geht auch bei Arduino (avr-gcc) eine range case Konstruktion:

float GlowWert;

switch (GlowOhm) {
case 0 … 56: GlowWert = -1.0; break; // → “—”
case 57 … 69: GlowWert = (GlowOhm - 18.5) / 100; break;
case 70 … 79: GlowWert = (GlowOhm - 17) / 100.0; break;
case 80 … 91: GlowWert = (GlowOhm - 13) / 100.0; break;
// … usw.
default: GlowWert = -1.0; break; // nie vergessen
}
if (GlowWert < 0) u8x8.print("—");
else u8x8.print(GlowWert);




Mal abgesehen davon, dass GlowWert merkwürdige Sprünge macht und z.B. für 78 und 84 dasselbe Ergebnis (0.61) liefert.

nein stimmt nicht! excel sagt was anderes!

Tommy56:
Gibt es davon auch eine verständliche Fassung?

sieht man eigentlich im code…soll nicht patzig klingen aber was ist daran unverständlich?

Ein weil: kann nie im Code ersichtlich sein.
Ich meinte deine etwas merkwürdige Schreibweise der Begründung.

Gruß Tommy