Accueil > Dev > ESC & HC-05 nouveau code

ESC & HC-05 nouveau code

mercredi 16 mars 2022, par Rémi

/* ------------------------------------------------------------------------
 / 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);
}