Référence du Langage Arduino : Mini | Standard | Etendue | Librairies | Comparaison
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.
map (valeur, limite_basse_source, limite_haute_source, limite_basse_destination, limite_haute_destination)
La valeur ré-étalonnée
/* Etalonne une valeur analogique 10 bits (0-1023) sur 8 bits (0-255) */
void setup() {}
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);
}
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;
}
Une fonction très puissante et très utile en pratique qui permet de réaliser une adaptation d'échelle de valeur (entre la valeur d'une conversion analogique numérique brute et la valeur réelle de la tension par exemple) en une seule ligne, là où plusieurs lignes de calcul seraient normalement nécessaires.
Page d'accueil de la référence Arduino en français
Corrections, suggestions et nouvelle documentation peuvent être postées sur le Forum Arduino.
Le texte original de la référence Arduino est sous licence Creative Commons Attribution-ShareAlike 3.0 . Les exemples de code dans la référence sont dans le domaine public.
La présente traduction française commentée a été réalisée par Xavier HINAULT (2010) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.