ESC & HC-05 nouveau code
publication pour démonstration uniquement, sans article.
/* ------------------------------------------------------------------------
/ Communication radio (Bluetooth) entre le smartphone et un aéroglisseur
/ via un Arduino nano. Descriptif: https://www.suinot.org
/
/ Auteur: R. Suinot <remi --at-- suinot.org>
/ Première version: 14 janvier 2022
/ Rev: 15 mars 2022
/ Rev: 16 mars 2022 => on analyse seulement 1 caractère (obligation sur le tel de faire '1 caractère ' et 'envoi';
/ Rev: 17 mars 2022 => amélioration boucle d'analyse: possible d'écrire '++++' avant 'envoi' sur le tel;
/ Rev: 18 mars 2022 => corrections bugs mineurs, amélioration de code
/ Paramètres à envoyer en Bluetooth (peut être fait en console pour test)
/ + : augmente la vitesse du moteur ( dans le code, par pas de 10)
/ - : diminue la vitesse du moteur (dans le code, par pas de 10)
/ d : dérive vers la droite
/ g : dérive vers la gauche
/ s : Arrêt moteur
/ m : retour de la dérive au point milieu
/--------------------------------------------------------------------------*/
#include <Servo.h> // bibliothèque de gestion des servocommandes
#include <SoftwareSerial.h>
#define rxPin 10 // module hc-05
#define txPin 11 // module hc-05
#define baudrate 115200
#define pwm_derive 4 // servomoteur
#define pwm_esc 3 // ESC brushless
int Moteur;
Servo ESC; // Création de l'objet permettant le contrôle de l'ESC
int Derive;
Servo DERIVE; // Création de l'objet permettant le contrôle de la dérive
SoftwareSerial HC05(rxPin , txPin);
void setup() {
initialisation(); // Partie initialisation de l'ESC
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
HC05.begin(baudrate);
}
void loop() {
char message;
// Boucle de lecture sur le hc-05
while (HC05.available()) {
message = HC05.read();
// Lecture du message et interprétation
if (message == 43 ) {
// '+' moteur plus vite
if ( Moteur < 180 ) {
Moteur += 10;
moteur(message);
}
} else if (message == 45 ) {
// '-' moteur moins vite
if ( Moteur > 0 ) {
Moteur -= 10;
moteur(message);
}
} else if (message == 100 ) {
// 'd' dérive vers la droite
if ( Derive < 180 ) {
Derive += 10;
derive(message);
}
} else if (message == 103 ) {
// 'g' dérive vers la gauche
if ( Derive > 0 ) {
Derive -= 10;
derive(message);
}
} else if (message == 109 ) {
// 'm' dérive revient au point milieu
Derive = 90;
derive(message);
} else if (message == 115 ) {
// 's' moteur stop
Moteur = 0;
moteur(message);
} else if ( message != "" && message != 10 && message != 13 ) {
HC05.print ("Erreur de message: ");
HC05.print (message, DEC);
}
delay(20);
}
}
void initialisation() {
delay(500);
DERIVE.attach(pwm_derive); // On attache l'ESC au port numérique 4 (port PWM obligatoire)
ESC.attach(pwm_esc, 1000, 2000); // On attache l'ESC au port numérique 3 (port PWM obligatoire)
delay(1000);
ESC.write(180);
delay(1000);
ESC.write(0);
delay(1000);
// Fin d'initialisation
Moteur = 0; // moteur à l’arrêt
Derive = 90; // dérive à mis parcourt
}
void retour_de_message(char msg) {
if ( msg != 13 && msg != 10 ) {
HC05.print( " - " );
HC05.print( msg, DEC );
HC05.print( " - moteur: " );
HC05.print( Moteur, DEC );
HC05.print( " - derive: " );
HC05.print( Derive, DEC );
HC05.print( "\n" );
}
}
void moteur (char msg) {
ESC.write(Moteur);
retour_de_message(msg);
}
void derive (char msg) {
DERIVE.write(Derive);
retour_de_message(msg);
}