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