Map-Funktion wie im Arduino-C++

Ich bräuchte mal bitte einen Denkanstoß … irgenwie ist es wohl zu warm :slight_smile:

Im Arduino-Framework gibt es eine Funktion “map”, die dazu dient, einen Wertebereich auf einen anderen Wertebereich abzubilden. Die Nutzung sieht so aus:

y = map(x, from_low, from_high, to_low, to_high)

y = Ergebnis
x = aktueller Wert
from_low = untere Grenze Eingangswert
from_high = obere Grenze Eingangswert
to_low = untere Grenze Ausgangswert
to_high = obere Grenze Ausgangswert

Beispiel:

y = map(x,50,1023,0,255)

Das heisst, dass x-Werte im Bereich von 50 bis 1023 proportional auf den Bereich 0 bis 255 abgebildet werden. x=50 führt zu y=0, x=1023 führt zu y=255. X-Werte unter 50 ergeben ebenfalls 0, X-Werte über 1023 ergeben 255 …

Das findet z.B. Anwendung bei der Anzeige von Sensorwerten (50…1023), die zu einer Anzeige oder PWM-Ausgabe im Bereich von 0…255 führt.

Das geht doch sicher in Xojo als Einzeiler oder zumindest “sehr klein”, oder? Danke für Tips.

Ich denke man muss die eine “Spannweite” durch die andere teilen und dann mit dem Eingangswert multiplizieren … oder so, das Ergebnis um den unteren Grenzwert anheben und am oberen begrenzen … im Moment kommt bei mir aber nur Unsinn dabei heraus …

Der map() function hab ich. Das kanst ich posten wan ich bei mir pc bin.

Suchen si diese:
https://tracker.xojo.com/xojoinc/xojo/-/issues/51249

Function Map(Value As Integer, InputMin As Integer, InputMax As integer, OutputMin As Integer, OutputMax As Integer) as Integer
  'Maps a value to a specific range
  Return (Value - InputMin) * (OutputMax - OutputMin) / (InputMax - InputMin) + OutputMin
  End Function

Danke!

1 Like