map()

Description

Ré-étalonne un nombre d'une fourchette de valeur vers une autre fourchette. Ainsi, une valeur basse source sera étalonnée en une valeur basse de destination, une valeur haute source sera étalonnée en une valeur haute de destination, une valeur entre les deux valeurs source sera étalonnée en une valeur entre les deux valeurs destinations, en respectant la proportionnalité. Cette fonction est très utile pour effectuer des changements d'échelle automatiques.

Cette fonction ne contraint pas les valeurs à rester dans les limites indiquées, car les valeurs en dehors de la fourchette sont parfois attendues et utiles. L'instruction constrain() doit être utilisée également avant ou après cette fonction, si les limites de la fourchette utilisée doivent être respectées.

Noter que la limite basse de chaque fourchette peut être supérieure ou inférieure à la limite haute, dès lors l'instruction map() peut être utilisée pour inverser l'ordre des valeurs, par exemple :

y = map(x, 1, 50, 50, 1); // y évolue en sens inverse de x (càd si x = 1, y=50 et inversement)

Cette instruction supporte également des valeurs négatives, tel que dans cet exemple :

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

Cette utilisation est aussi valide et fonctionne normalement.

L'instruction map() utilise des valeurs entières qui ne peuvent fournir les décimales, alors que les calculs le devraient. La partie décimale est tronquée, et les valeurs ne sont pas arrondies ou moyennées.

Syntaxe

map (valeur, limite_basse_source, limite_haute_source, limite_basse_destination, limite_haute_destination)

Paramètres

  • valeur: le nombre à ré-étalonner
  • limite_basse_source: la valeur de la limite inférieure de la fourchette de départ
  • limite_haute_source: la valeur de la limite supérieure de la fourchette de départ
  • limite_basse_destination: la valeur de la limite inférieure de la fourchette de destination
  • limite_haute_destination: la valeur de la limite supérieure de la fourchette de destination

Valeurs Renvoyées

  • La valeur ré-étalonnée

Exemple

/* Etalonne une valeur analogique 10 bits (0-1023) sur 8 bits (0-255) */ void setup() { pinMode(9, OUTPUT); // sets the pin as output } void loop() { int val = analogRead(0); val = map(val, 0, 1023, 0, 255); // Ré-étalonne la valeur entre 0 et 1023 sur une fourchette entre 0 et 255 analogWrite(9, val); }

※ Remarque:

  • Pour les férus de mathématiques, voici la fonction entière et le calcul réalisé par l'instruction map() :
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; }
  • The map() function returns an integer number. If you want to get the float number, you need to put the below custom function in your sketch and use it:
float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
  • Or
double doubleMap(double x, double in_min, double in_max, double out_min, double out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

ARDUINO BUY RECOMMENDATION

Arduino UNO R3
Arduino Starter Kit
Please note: These are Amazon affiliate links. If you buy the components through these links, We will get a commission at no extra cost to you. We appreciate it.

※ OUR MESSAGES