Forum: Mikrocontroller und Digitale Elektronik map funktion ?


von Ray M. (ray_m)


Lesenswert?

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 ???

von Thomas W. (goaty)


Lesenswert?

0 bis 10V sind 45°
10 bis 12V sind 45°

Irgendwie nichtlinear

von Ray M. (ray_m)


Lesenswert?

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 ...

von Rolf M. (rmagnus)


Lesenswert?

Gibt's dazu auch eine Programmiersprache? Und wo kommt diese ominöse 
Funktion "map()" her?

von Theor (Gast)


Lesenswert?

Mal vorausgesetzt, der Zusammenhang stellt sich als linear heraus, würde 
ich den guten alten Dreisatz empfehlen.

Map-Funktion! Ts ts ts. :-)

von Theor (Gast)


Lesenswert?

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. :-)

von Theor (Gast)


Lesenswert?

Meine Bemerkungen halte ich jetzt für überflüssig und vor allem 
unangemessen. Ich bitte um Entschuldigung.

von Marten Morten (Gast)


Lesenswert?

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.

von Christoph M. (mchris)


Lesenswert?

1
long map(long x, long in_min, long in_max, long out_min, long out_max)
2
{
3
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
4
}

https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/WMath.cpp
Zeile 52

von Vincent H. (vinci)


Lesenswert?

Wow. Das is eines der schlimmsten Beispiele für falsche Namensgebung das 
ich je gesehn hab... Die Funktion müsste eigentlich lerp heißen.

von Christoph M. (mchris)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.