Dans la programmation Arduino, les variables permettebt de stocker et manipuler des données. Dans le cadre de la robotique, les variables permettent de gérer les données provenant de capteurs, de contrôler les moteurs, ou encore de suivre l'état du robot. Dans cet article, nous allons explorer les différents types de variables en C pour Arduino, leur déclaration, assignation, et usage, avec des exemples pratiques adaptés à des projets robotiques.
Une variable est une zone de mémoire dans laquelle vous pouvez stocker une valeur qui peut changer au cours de l'exécution de votre programme. Les variables ont trois caractéristiques principales :
vitesseMoteur).Déclarer une variable signifie informer le programme que vous souhaitez réserver de la mémoire pour cette variable, en précisant son type et son nom.
Syntaxe :
type nomVariable;
Attribuer une valeur à une variable se fait grâce à l’opérateur =.
Syntaxe :
nomVariable = valeur;
Vous pouvez aussi combiner la déclaration et l’assignation en une seule étape.
Syntaxe combinée :
type nomVariable = valeur;
Voici les principaux types de variables utilisés dans la programmation Arduino, avec des exemples adaptés à la robotique.
int, unsigned int)Les entiers permettent de stocker des nombres entiers, positifs ou négatifs.
Exemple : Contrôle de la vitesse d'un moteur.
int vitesseMoteur = 100; // Vitesse initiale du moteur
unsigned int distanceObstacle = 50; // Distance mesurée par un capteur en cm
float, double)Les flottants sont utilisés pour stocker des nombres décimaux. Ils sont utiles pour les calculs de précision.
float sur Arduino (pas de différence).Exemple : Calcul de la distance parcourue par un robot.
float distanceParcourue = 12.34; // En mètres
double angleRotation = 45.5; // En degrés
char)Les caractères permettent de stocker une lettre ou un symbole ASCII. Ils sont souvent utilisés pour gérer des messages ou des commandes.
Exemple : Communication avec un robot via Bluetooth.
char commandeRecue = 'A'; // Commande reçue : avancer
char[] ou String)Les chaînes de caractères sont utilisées pour manipuler des mots ou des messages.
Exemple : Affichage d’un message sur un écran LCD.
char messageLCD[] = "Robot prêt"; // Message statique
String messageDynamique = "Vitesse : 100"; // Message variable
bool)Les booléens stockent des valeurs true (vrai) ou false (faux). Ils sont utiles pour gérer des états.
Exemple : Vérification de la détection d’un obstacle.
bool obstacleDetecte = false; // Initialisation
Noms explicites : Donnez des noms significatifs à vos variables pour comprendre leur rôle.
int a;int vitesseMoteur;Initialisation : Assurez-vous que vos variables sont initialisées avant leur utilisation pour éviter des comportements imprévisibles.
Limitation de la portée : Déclarez vos variables au niveau approprié (locale ou globale) pour éviter les conflits et réduire la consommation de mémoire.
Évitez les types coûteux : Préférez des types simples (comme char[]) plutôt que String si la mémoire est limitée.
Déclarées en dehors de toute fonction, les variables globales sont accessibles dans tout le programme.
Exemple : Stocker la vitesse du robot.
int vitesseGlobale = 100; // Accès depuis n’importe quelle fonction
Déclarées à l'intérieur d'une fonction, elles ne sont accessibles que dans cette fonction.
Exemple : Utiliser une variable temporaire pour un calcul.
void avancer() {
int vitesseLocale = 120; // Variable spécifique à cette fonction
analogWrite(3, vitesseLocale);
}
Dans cet exemple, nous utilisons un capteur ultrasonique pour détecter un obstacle et ajuster la vitesse des moteurs.
int trigPin = 9;
int echoPin = 10;
int moteurGauche = 3;
int moteurDroit = 5;
unsigned int distanceObstacle;
int vitesseMoteur = 100;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(moteurGauche, OUTPUT);
pinMode(moteurDroit, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Mesure de la distance
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
distanceObstacle = pulseIn(echoPin, HIGH) / 58; // Conversion en cm
// Ajustement de la vitesse en fonction de la distance
if (distanceObstacle < 10) {
vitesseMoteur = 0; // Stop si trop proche
} else if (distanceObstacle < 30) {
vitesseMoteur = 50; // Ralentit si obstacle à mi-distance
} else {
vitesseMoteur = 100; // Pleine vitesse si pas d'obstacle
}
// Commande des moteurs
analogWrite(moteurGauche, vitesseMoteur);
analogWrite(moteurDroit, vitesseMoteur);
// Affichage des données
Serial.print("Distance: ");
Serial.print(distanceObstacle);
Serial.print(" cm, Vitesse: ");
Serial.println(vitesseMoteur);
delay(100);
}
Dans cet exemple, deux capteurs infrarouges détectent une ligne noire et ajustent les moteurs pour suivre cette ligne.
int capteurGauche = 2;
int capteurDroit = 4;
int moteurGauche = 3;
int moteurDroit = 5;
bool gaucheDetecte;
bool droitDetecte;
void setup() {
pinMode(capteurGauche, INPUT);
pinMode(capteurDroit, INPUT);
pinMode(moteurGauche, OUTPUT);
pinMode(moteurDroit, OUTPUT);
}
void loop() {
gaucheDetecte = digitalRead(capteurGauche);
droitDetecte = digitalRead(capteurDroit);
if (gaucheDetecte && droitDetecte) {
analogWrite(moteurGauche, 100); // Avance droit
analogWrite(moteurDroit, 100);
} else if (gaucheDetecte) {
analogWrite(moteurGauche, 50); // Tourne à gauche
analogWrite(moteurDroit, 100);
} else if (droitDetecte) {
analogWrite(moteurGauche, 100); // Tourne à droite
analogWrite(moteurDroit, 50);
} else {
analogWrite(moteurGauche, 0); // Stop si hors ligne
analogWrite(moteurDroit, 0);
}
delay(100);
}
Les variables sont au cœur de vos projets robotiques avec Arduino. Bien choisir leur type et leur portée, les initialiser correctement, et les utiliser de manière structurée est essentiel pour garantir la fiabilité et la clarté de votre code. Avec ces bases et les exemples fournis, vous êtes prêt à gérer efficacement les données pour construire des robots plus performants et intelligents.
Pour vous exercer, effectuez l'exercice de la boussole en C arduino. pur ce fair, rendez-vous sur www.wokwi.com et sélectionnez un nouveau projet pi pico.