map()
Description :
Description
Remappe un nombre d’une plage à une autre. Autrement dit, une valeur de fromLow est mappée vers toLow , une valeur de fromHigh vers toHigh , les valeurs intermédiaires vers les valeurs intermédiaires, etc.
Ne limite pas les valeurs à la plage, car les valeurs hors plage sont parfois intentionnelles et utiles.
La fonction constrain() peut être utilisée avant ou après cette fonction, si des limites aux plages sont souhaitées.
Notez que les « limites inférieures » de chaque plage peuvent être plus grandes ou plus petites que les « limites supérieures », de sorte que la fonction map() peut être utilisée pour inverser une plage de nombres, par exemple
y = map(x, 1, 50, 50, 1);
La fonction gère également bien les nombres négatifs, de sorte que l’exemple suivant est également valide et fonctionne bien.
y = map(x, 1, 50, 50, -100);
La fonction map() utilise des nombres entiers et ne génère donc pas de fractions, même si les calculs l’exigent. Les restes fractionnaires sont tronqués et ne sont ni arrondis ni moyennés.
Syntaxe :
Utilisez la fonction suivante pour remapper une plage de variables vers une autre :
map(value, fromLow, fromHigh, toLow, toHigh)
Paramètres :
La fonction admet les paramètres suivants :
- value : la variable d’entrée avec le numéro à mapper.
- fromLow : la limite inférieure de la plage actuelle de la valeur .
- fromHigh : la limite supérieure de la plage actuelle de la valeur .
- toLow : la limite inférieure de la plage cible de la valeur .
- toHigh : la limite supérieure de la plage cible de la valeur .
Retours :
Valeur mappée. Type de données : long
Exemple de code :
Map une valeur d’entrée analogique 10 bits (0-1023) sur une valeur 8 bits (0-255) et contrôle la sortie PWM de la broche 9. Les valeurs d’entrée et de sortie sont imprimées dans le moniteur série.
/* Map an analog value to 8 bits (0 to 255) */ void setup() { Serial.begin(9600); } void loop() { int val = analogRead(0); Serial.print("Input value: "); Serial.print(val); val = map(val, 0, 1023, 0, 255); // mapping function Serial.print(", Output value: "); Serial.println(val); analogWrite(9, val); // PWM output delay(200); }
Si vous connectez un potentiomètre à la broche analogique (A0) et une LED à la broche 9, vous pouvez contrôler sa luminosité en tournant le potentiomètre.
Pour les mathématiciens, voici la fonction complète.
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; }
Remarques et avertissements :
Comme mentionné précédemment, la fonction map() utilise des nombres entiers. Les fractions peuvent donc être supprimées. Par exemple, des fractions comme 3/2, 4/3 et 5/4 seront toutes renvoyées comme 1 par la fonction map(), malgré leurs valeurs réelles différentes. Si votre projet nécessite des calculs précis (par exemple, une tension précise à trois décimales près), évitez map() et implémentez les calculs manuellement dans votre code.
Source : https://docs.arduino.cc/language-reference/en/functions/math/map/