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.