#include // Inclut la bibliothèque SoftwareSerial pour la communication série SoftwareSerial PS2(9, 8); // Déclare un port série logiciel avec le module Bluetooth HC-06, [RX | TX côté HC-06] [TX | RX côté HC-06] // Déclarations des broches des moteurs const byte moteurGaucheA = 7; // Broche pour le sens avance du moteur gauche const byte moteurGaucheR = 5; // Broche pour le sens recule du moteur gauche const byte moteurGauchePWM = 6; // Broche PWM pour le contrôle de vitesse du moteur gauche const byte moteurDroiteA = 4; // Broche pour le sens avance du moteur droit const byte moteurDroiteR = 2; // Broche pour le sens recule du moteur droit const byte moteurDroitePWM = 3; // Broche PWM pour le contrôle de vitesse du moteur droit int valPWM = 200; // Valeur de PWM initiale pour contrôler la vitesse des moteurs char valSerie; // Variable pour stocker la valeur lue via le module Bluetooth void setup() { Serial.begin(9600); // Initialisation de la communication série avec le moniteur série PS2.begin(9600); // Initialisation de la communication série avec le module Bluetooth // Configuration des broches des moteurs en tant que sortie pinMode(moteurGaucheA, OUTPUT); pinMode(moteurGaucheR, OUTPUT); pinMode(moteurGauchePWM, OUTPUT); pinMode(moteurDroiteA, OUTPUT); pinMode(moteurDroiteR, OUTPUT); pinMode(moteurDroitePWM, OUTPUT); } //************************************************* // Fonction qui fait avancer la voiture //************************************************* void avance() { Serial.println("Avance"); // Affiche "Avance" sur le moniteur série digitalWrite(moteurGaucheA, HIGH); // Active le sens avance du moteur gauche digitalWrite(moteurDroiteA, HIGH); // Active le sens avance du moteur droit digitalWrite(moteurGaucheR, LOW); // Désactive le sens recule du moteur gauche digitalWrite(moteurDroiteR, LOW); // Désactive le sens recule du moteur droit analogWrite(moteurGauchePWM, valPWM); // Contrôle de la vitesse du moteur gauche avec la valeur PWM analogWrite(moteurDroitePWM, valPWM); // Contrôle de la vitesse du moteur droit avec la valeur PWM } //************************************************* // Fonction qui fait reculer la voiture //************************************************* void recule() { Serial.println("Recule"); // Affiche "Recule" sur le moniteur série digitalWrite(moteurGaucheA, LOW); // Désactive le sens avance du moteur gauche digitalWrite(moteurDroiteA, LOW); // Désactive le sens avance du moteur droit digitalWrite(moteurGaucheR, HIGH); // Active le sens recule du moteur gauche digitalWrite(moteurDroiteR, HIGH); // Active le sens recule du moteur droit analogWrite(moteurGauchePWM, valPWM-50); // Réduit la vitesse du moteur gauche pour reculer analogWrite(moteurDroitePWM, valPWM-50); // Réduit la vitesse du moteur droit pour reculer } //************************************************* // Fonction qui stoppe la voiture //************************************************* void arrete() { Serial.println("Arrêt"); // Affiche "Arrêt" sur le moniteur série // Arrête tous les moteurs digitalWrite(moteurGaucheA, LOW); digitalWrite(moteurGaucheR, LOW); digitalWrite(moteurDroiteA, LOW); digitalWrite(moteurDroiteR, LOW); } /******************************************************/ /* Fonction qui fait tourner la voiture à gauche */ /******************************************************/ void tourneAGauche() { Serial.println("Tourne à gauche"); // Affiche "Tourne à gauche" sur le moniteur série digitalWrite(moteurGaucheA, LOW); // Arrête le moteur gauche avance digitalWrite(moteurDroiteA, HIGH); // Active le moteur droit avance digitalWrite(moteurGaucheR, LOW); // Arrête le moteur gauche recule digitalWrite(moteurDroiteR, LOW); // Arrête le moteur droit recule analogWrite(moteurGauchePWM, valPWM-100); // Réduit la vitesse du moteur gauche pour tourner analogWrite(moteurDroitePWM, valPWM-100); // Réduit la vitesse du moteur droit pour tourner } /******************************************************/ /* Fonction qui fait tourner la voiture à droite */ /******************************************************/ void tourneADroite() { Serial.println("Tourne à droite"); // Affiche "Tourne à droite" sur le moniteur série digitalWrite(moteurGaucheA, HIGH); // Active le moteur gauche avance digitalWrite(moteurDroiteA, LOW); // Arrête le moteur droit avance digitalWrite(moteurGaucheR, LOW); // Arrête le moteur gauche recule digitalWrite(moteurDroiteR, LOW); // Arrête le moteur droit recule analogWrite(moteurGauchePWM, valPWM-100); // Réduit la vitesse du moteur gauche pour tourner analogWrite(moteurDroitePWM, valPWM-100); // Réduit la vitesse du moteur droit pour tourner } void loop() { // Vérifie si des données sont disponibles depuis le module Bluetooth if (PS2.available()) { valSerie = PS2.read(); // Lit la valeur envoyée par Bluetooth Serial.print ("Valeur lue : "); // Affiche la valeur lue sur le moniteur série Serial.println (valSerie); } // Exécute la fonction correspondante en fonction de la valeur lue if (valSerie == 'a') // 'a' pour avancer avance(); else if (valSerie == 'g') // 'g' pour tourner à gauche tourneAGauche(); else if (valSerie == 'r') // 'r' pour reculer recule(); else if (valSerie == 'd') // 'd' pour tourner à droite tourneADroite(); else if (valSerie == 'q') // 'q' pour arrêter arrete(); }