Druckanzeige Dezimal

Hi Leute,

ich bastel gerade an einer Druckanzeige. Aktuell ohne Map Sensor, sondern mit einem Poti. Nur habe ich folgendes Problem. Ich habe die map Funktion folgendermaßen gestaltet:

map(0.0, 1023.0, -0.8, 1.5)

Mit der Float Funktion bekomme ich es hin, dass mir die Werte mit 2 Dezimalziffern ausgegeben werden. Ich weis auch, dass 2 Dezimalziffern hinter dem Komma als Standard im Arduino eingestellt sind. Ich denke hier müsste ich dann eine folgendermaßen machen

lcdprint(Druck, 1)

So wie ich es verstanden habe, wird damit dann nur 1 Ziffer hinter dem Komma angezeigt.

Folgendes Problem habe ich jedoch:

Bei mir werden im LCD nur 3 Werte ausgegeben:

-1
0
1

Ich gehe davon aus, dass Arduino den Wert -0,8 auf -1 rundet und 1,5 auf 1 abrundet. Wie kann ich es schreiben, dass hier Werte in Dezimalschritten angezeigt werden können? z.B. so:

Ladedruck: -0,8
Ladedruck: -0,7
Ladedruck: -0,6
...
...
Ladedruck: 0,6
Ladedruck: 0,9
Ladedruck: 1,5

Könntet ihr mir bitte einen Gefallen tun? Falls ihr eine Idee bzw. eine Lösung habt, bitte ausführlich kommentieren. Ich programmiere erst seit kurzem, bin aber dem Fieber verfallen :slight_smile:

Herzlichen Dank

Irfan

Schaut man sich die Funktionssignatur von map() an....

long map(long x, long in_min, long in_max, long out_min, long out_max)

Dann kommt man fix darauf, dass map nur lange Integer Zahlen verwursten kann.

Deine Werte im map mal 100 nehmen also -80,150.
In Display angabe dan mit ganzen Werten den Wert geteilt durch 100.
Hinter dem Komma den Rest angeben mit modulo.
Pseudocode

"Wertvorkomma"="gemapptenWert"/100;   // alles Byte oder Int da ganzzahlen
"Wertnachkomma="gemapptenWert"%100; // Speichert die Reste die nicht in 100 passen

lcd.print.(wertvorkomma);
lcd.print(",");  
if (Wertnachkomma<10){  // Falls der Wert kleiner 10 ist also einstellig dann ne null schreiben da es 
  lcd.print("0");               // sonst zu formatierungsprobleme gibt
  lcd.print(Wertnachkomma);
}
else
lcd.print(wertnachkomma);

Noch nen Tip: Versuche wenn es nur irgend geht float zu vermeiden. Da manche funktionen mit Float nicht klar kommen.

Gruß
DerDani

combie:
Schaut man sich die Funktionssignatur von map() an....Dann kommt man fix darauf, dass map nur lange Integer Zahlen verwursten kann.

Hallo combie,

ja das mag sein. Ich lerne die Programmiersprache aber erst neu und habe sonst beruflich nichts mit dem Thema am Hut. Teilweise ist das so, dass ich mir Videos über Youtube und Tutorials anschaue (auch in englischer Sprache), um nachzuvollziehen was die ganzen Programmiercodes bedeuten. Daher bitte ich um Nachsicht. Oben hatte ich ja auch erwähnt, dass ich dafür dankbar wäre, wenn man bei Antworten mir etwas umfänglicher erklärt ...wieso und weshalb Dinge so funktionieren. Danke schon mal für deine Aussage zur map Funktion.

volvodani:
Deine Werte im map mal 100 nehmen also -80,150.
In Display angabe dan mit ganzen Werten den Wert geteilt durch 100.
Hinter dem Komma den Rest angeben mit modulo.
Pseudocode

"Wertvorkomma"="gemapptenWert"/100;   // alles Byte oder Int da ganzzahlen

"Wertnachkomma="gemapptenWert"%100; // Speichert die Reste die nicht in 100 passen

lcd.print.(wertvorkomma);
lcd.print(","); 
if (Wertnachkomma<10){  // Falls der Wert kleiner 10 ist also einstellig dann ne null schreiben da es
  lcd.print("0");              // sonst zu formatierungsprobleme gibt
  lcd.print(Wertnachkomma);
}
else
lcd.print(wertnachkomma);





Noch nen Tip: Versuche wenn es nur irgend geht float zu vermeiden. Da manche funktionen mit Float nicht klar kommen.

Gruß
DerDani

Hey Dani,

herzlichen Dank. Ich werde mal versuchen deinen Hinweis in meinen Sketch einzubetten.

Viele Grüße

Irfan

Hey Dani,

ich habe den Wert lediglich mit 100 multipliziert und bei lcd.print(Analogwert/100) hat schon gereicht, dass mir das Arduino nun meinen Wert richtig ausgibt.

Herzlichen Dank nochmal.

Gruß

Irfan