Leçon 14/31-5 : Exemple 2 de la fonction map() en programmation Arduino
Ce tutoriel montre comment utiliser la fonction map() d'Arduino pour contrôler la luminosité d'une LED à l'aide d'une valeur en pourcentage (0–100 %) au lieu de la plage brute de 0–255 requise par analogWrite(). C'est une technique fondamentale qui simplifie votre code et le rend beaucoup plus intuitif, car vous pouvez penser en termes de pourcentages plutôt qu'en valeurs d'octets arbitraires.
Cette compétence est essentielle pour tout projet où vous devez mettre à l'échelle des lectures de capteurs ou des signaux de contrôle. Par exemple, vous pourriez l'utiliser pour :
- Contrôler la luminosité d'une LED ou la vitesse d'un moteur en fonction de la lecture d'un potentiomètre.
- Convertir la sortie d'un capteur de température (par exemple, 0–1023) en une plage Celsius ou Fahrenheit.
- Mapper l'entrée analogique d'un joystick pour contrôler la position d'un servomoteur.
- Créer une interface utilisateur simple où une valeur en pourcentage est utilisée pour définir le niveau de puissance d'un appareil.
À la fin de cette leçon, vous serez capable d'écrire un code plus propre et plus maintenable, plus facile à lire et à ajuster.
Matériel/Composants
Ce projet utilise un ensemble minimal de composants, ce qui le rend parfait pour les débutants. Vous aurez besoin de :
- Une carte Arduino (par exemple, Uno).
- Une LED.
- Une résistance de 220 ohms.
- Des fils de connexion.
- Une plaque d'essai (facultative mais recommandée).
Guide de câblage
Le câblage de ce projet est très simple, comme démontré dans la vidéo (dans la vidéo à 20:47). La LED est connectée à la broche 3 de l'Arduino via une résistance de limitation de courant de 220 ohms.
Connectez l'anode (patte la plus longue) de la LED à la broche 3 via la résistance. Connectez la cathode (patte la plus courte) de la LED à la broche de masse (GND) de l'Arduino.
Explication du code
Cet exemple se concentre sur une fonction définie par l'utilisateur qui simplifie le contrôle de la luminosité de la LED. Le code est construit autour d'une fonction personnalisée appelée pwmValue(), qui est la clé pour rendre le code intuitif.
Décomposons les parties configurables du code :
int LEDpin = 3; //définit la broche pour la LED
Cette ligne définit la broche Arduino à laquelle la LED est connectée. Vous pouvez changer le nombre 3 pour toute autre broche compatible PWM de votre carte Arduino.
Le cœur du projet est la fonction personnalisée pwmValue(). Cette fonction prend une valeur en pourcentage comme entrée et la convertit en plage 0–255 utilisée par analogWrite(). C'est là que la fonction map() fait sa magie.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Pour utiliser cette fonction, il suffit de l'appeler avec le pourcentage de luminosité souhaité. La fonction renverra la valeur correcte pour analogWrite(). Par exemple, pwmValue(60) renverra 153, ce qui correspond à 60 % de 255. La fonction inclut également une vérification de sécurité pour s'assurer que le pourcentage d'entrée est compris entre 0 et 100, renvoyant 0 s'il est en dehors de cette plage.
Dans la fonction setup(), vous pouvez voir comment cela est utilisé :
int b=5;//60% de luminosité
Serial.println( pwmValue(b) );//imprime-le sur le moniteur série
analogWrite(LEDpin, pwmValue(b));// allume la LED avec 60% de luminosité
Ici, la variable b est définie sur le pourcentage de luminosité souhaité. La fonction pwmValue(b) est ensuite utilisée à la fois pour imprimer la valeur mappée sur le moniteur série et pour définir la luminosité de la LED. Pour changer la luminosité de la LED, il suffit de modifier la valeur de b. La fonction map() gère tous les calculs nécessaires pour vous.
Projet/Démonstration en direct
Dans la vidéo, le présentateur démontre le projet en changeant la valeur de la variable b et en téléversant le code sur l'Arduino. Lorsque b est défini sur 60, le code le mappe à 153 et la LED s'allume à 60 % de luminosité. Changer b à 90 le mappe à 229, rendant la LED nettement plus lumineuse. Le définir à 100 le mappe à 255, ce qui est la luminosité maximale. La démonstration montre clairement comment la fonction map() vous permet de contrôler la LED en utilisant une valeur en pourcentage intuitive, tandis que le moniteur série confirme la valeur exacte de 0–255 envoyée à la broche (dans la vidéo à 21:29).
Projets connexes de cette vidéo
- Leçon 14/31-1 : Arduino Millis (sans délai) et fonctions map | SunFounder Robojax
- Leçon 14/31-2 : Exemple 2 de codage Arduino millis() avec événement
- Leçon 14/31-3 : Exemple 3 de codage Arduino millis() avec bouton poussoir
- Leçon 14/31-4 : Exemple 1 de codage Arduino map()
Chapitres
- [00:00] Introduction aux fonctions Millis et map
- [01:19] Qu'est-ce que Millis et pourquoi l'utiliser
- [05:46] Utilisation de Millis avec un événement pour agir
- [08:35] Exemple 2 de Millis avec un bouton poussoir
- [12:14] Exemple 3 de Millis vérifiant deux pressions de bouton
- [17:20] Introduction à la fonction map()
- [19:47] Exemple de code pour mapper un pourcentage à la luminosité d'une LED
- [20:47] Démonstration en direct de la fonction map()
- [22:41] Création d'une fonction personnalisée pour gérer le mappage
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
Ce dont vous pourriez avoir besoin
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Autre
Ressources et références
-
Externe
Fichiers📁
Manuel de l'Utilisateur
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB