hi @all, ich stelle mich gerade etwas an ich lese spannungen 0-16V ein die will ich auf einem display als gauge anzeigen, gauge geht von 0-180° also hab ich mal folgendes gemacht int v = int(adc_in*10); int g = map(v, 0, 160, 0, 180); da kommt bei 12V was v=120 entspricht aber g=135 raus, g sollte aber 90 sein 0V = 0° 10V = 45° 12V = 90° 14V = 135° 16V = 180° ich stehe gerade irgendwie aif dem schlauch, wo ist hier mein denkfehler ???
0 bis 10V sind 45° 10 bis 12V sind 45° Irgendwie nichtlinear
Thomas W. schrieb: > 0 bis 10V sind 45° > 10 bis 12V sind 45° > > Irgendwie nichtlinear ohh mann, ich bin ein depp ... danke für den hammerschlag ...
Gibt's dazu auch eine Programmiersprache? Und wo kommt diese ominöse Funktion "map()" her?
Gast
#6003410
Mal vorausgesetzt, der Zusammenhang stellt sich als linear heraus, würde ich den guten alten Dreisatz empfehlen. Map-Funktion! Ts ts ts. :-)
Gast
#6003413
Rolf M. schrieb: > Gibt's dazu auch eine Programmiersprache? Und wo kommt diese ominöse > Funktion "map()" her? Gehilfe für Marathonläufer. Frequenzzähler für Leute mit absolutem Gehör. Glatzenpolitur für Haarmodells. Irgend sowas. :-)
Gast
#6003817
Meine Bemerkungen halte ich jetzt für überflüssig und vor allem unangemessen. Ich bitte um Entschuldigung.
Gast
#6003971
Wenn es Integer sein sollen: g = (v * 45) / 4; Wenn man die vorherige Multiplikation mit 10 noch einarbeitet: g = (v10 * 225) / 2; Warum da überhaupt auf die Idee mit einer map()-Funktion kommt verstehe ich nicht.
1 | |
2 | |
3 | |
4 | |
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/WMath.cpp Zeile 52
Wow. Das is eines der schlimmsten Beispiele für falsche Namensgebung das ich je gesehn hab... Die Funktion müsste eigentlich lerp heißen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.