Diese Seite ist auch in 2 anderen Sprachen verfügbar.

map()

[Math]

Beschreibung

Bildet eine Zahl von einem Bereich in einen anderen ab. Das heißt, ein Wert von fromLow würde auf toLow, einen Wert von fromHigh bis toHigh, Werte zwischen dazwischen auf Werte dazwischen usw. zugeordnet.

Beschränkt die Werte nicht innerhalb des Bereichs, da Werte außerhalb des Bereichs manchmal beabsichtigt und nützlich sind. Die constrain()-Funktion kann entweder vor oder nach dieser Funktion verwendet werden, wenn eine Begrenzung der Bereiche gewünscht werden.

Beachte, dass die "unteren Grenzen" eines Bereichs größer oder kleiner als die "oberen Grenzen" sein können, sodass die Funktion map() beispielsweise zum Umkehren eines Arrays verwendet werden kann.

y = map(x, 1, 50, 50, 1);

Die Funktion kann auch mit negativen Zahlen gut umgehen, so dass dieses Beispiel:

y = map(x, 1, 50, 50, -100);

auch valide ist und funktioniert.

Die map() - Funktion verwendet Ganzzahl-Mathematik, so dass keine Brüche generiert werden, wenn die Mathematik möglicherweise darauf hinweist, dass dies der Fall ist. Bruchreste werden abgeschnitten und nicht gerundet oder gemittelt.

Syntax

map(value, fromLow, fromHigh, toLow, toHigh)

Parameter

value: Die Nummer, die zugeordnet werden soll.
fromLow: Die untere Grenze des aktuellen Wertebereichs.
fromHigh: Die obere Grenze des aktuellen Wertebereichs.
toLow: Die untere Grenze des Zielbereichs des Werts.
toHigh: Die obere Grenze des Zielbereichs des Werts.

Rückgabewert

Den zugeordneten Wert.

Beispielcode

/* Zuordnen eines analogen Werts auf 8 Bits (0 bis 255). */
void setup() {}

void loop() {
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

Anhang

Für mathematisch Interessierte ist hier die ganze Funktion

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

Anmerkungen und Warnungen

Wie bereits erwähnt, verwendet die map()-Funktion Ganzzahl-Mathematik. Dadurch können Brüche unterdrückt werden. Zum Beispiel werden Brüche wie 3/2, 4/3, 5/4 trotz ihrer unterschiedlichen tatsächlichen Werte von der Funktion map() als 1 zurückgegeben. Wenn also für das Projekt genaue Berechnungen erforderlich sind (z. B. eine auf 3 Dezimalstellen genaue Spannung), sollte man map() vermeiden und die Berechnungen manuell im Code implementieren.

Siehe auch