PrécédentInstallation de l'application6 / 16SuivantIntroduction
7. Des projets embarqués

Traitement des données

Traitement des données

Branchements

Comme dit au chapitre appairage, il faut relier le « +5V » du module au 5 Volts de la carte Arduino et la masse du module à celle de la carte.
Ensuite, nous allons relier la broche TX du module à la broche 12 de la carte et la broche RX à la broche 10.
Voilà, le branchement est terminé.

Code Arduino

💡

Afin de lire les données du module, nous allons "émuler" une voie série, en l’occurrence les broches 10 et 12.
C'est-à-dire que nous allons déclarer que ces broches recevront et enverront des données.

Pour cela, il faut utiliser la bibliothèque SoftwareSerial. Dans le logiciel Arduino, allez dans croquis puis inclure une bibliothèque et sélectionnez SotfwareSerial.

Inclusion de la bibliothèque SoftwareSerial
Inclusion de la bibliothèque SoftwareSerial

Maintenant, nous allons définir les broches du module (toujours avant le « void setup ») :

C++

Définitions des broches RX et TX

const int RX = 10;
const int TX = 12

Après ceci, il faut déclarer un objet SoftwareSerial  qui prendra en argument respectivement les broches TX et Rx, un peu comme lors de la déclaration d'un écran LCD (« LiquidCrystal lcd (RS,E,D4,D5,D6,D7); »).

On obtient donc :

C++

Définition de l'objet SoftwareSerial

#include 

const int RX = 10; const int TX = 12;

SoftwareSerial crius(RX,TX);

Bien entendu, "crius" peut être remplacé par ce que vous voulez.
Ensuite, on déclare que la communication carte-module peut débuter  avec "crius.begin(115200) ;" Où 115200 correspond à la vitesse de transmission en bauds (comme "Serial.begin(115200);") ;

C++

Vitesse de communication

SoftwareSerial crius(RX,TX);
void setup() 
    crius.begin(115200);
⚠️

Par la suite, en cas d'erreurs de transmission Bluetooth (pas de données...), il conviendra de vérifier le branchement des broches RX et TX (essayer de les intervertir) et d'éventuellement changer la vitesse de communication car certains modules communiquent à 9600 bauds !

Pour lire les données du module, ce sont presque les mêmes fonctions que pour le port série :
En effet :

Pour le port série :

Pour le module Bluetooth :

Tant que des données (caractères) sont disponibles, nous allons les assembler en une chaîne de caractère (concaténation).
Ensuite, avec un if, nous allons voir si cette chaîne en question correspond par exemple à "a".
Si c'est la cas, nous allons appeler la fonction robot.enAvant(100);

Il faut donc définir un caractère x et une chaîne de caractère. Donc dans le programme Arduino, avant la fonction setup, on rajoute :

C++

Définition des structures du message

#include 

const int RX = 10; const int TX = 12;

char c; String message;

La boucle while va permettre de lire les données : Dans la boucle loop : on écrit :

C++

Boucle de lecture partielle

void loop() {
 
    while() 
    
    //Fin while

}//Fin void loop

Maintenant que la boucle va attendre des données, il suffit de les lire et de les transformer en chaîne de caractère.
Pour cela :

On obtient :
C++

Boucle de lecture complète

void loop() {
 
    while(crius.available()>0) 
    
        c = crius.read();
        message = message + c;
    //Fin while

}//Fin void loop

La structure conditionnelle est très simple :
Après la boucle « while », mettez :

C++

Structure conditionnelle

void loop() {
 
    while(crius.available()>0) 
    
        c = crius.read();
        message = message + c;
    //Fin while
    
    if(message=="c") 
    
        message="";
        Melodie(1);
    //Fin if message=="c"

}//Fin void loop

« c » correspond au message envoyé par l'application lors de l'appui du bouton connexion.

Attention !!! il est important de vider la chaîne de caractère avec "message= '' '' ;", sinon, lorsque le module recevra un autre message (par exemple "s"), la chaîne sera égale à "cs"

Après avoir fait ceci pour les boutons connexion, avancer, droite, gauche, stop, batterie et reculer, voici le résultat :

C++

Code des if

void loop() {
 
    while(crius.available()>0) 
    
        c = crius.read();
        message = message + c;
    //Fin while
    
    if(message=="c") 
    
        message="";
        Melodie(1);
    //Fin if message=="c"

if(message=="c") message=""; Melodie(1); else if(message=="a")message=""; robot.enAvant(100); etatMoteurs=true; else if(message=="r") message=""; robot.enArriere(100); etatMoteurs=false; else if(message=="d") message=""; robot.tourneDroite(100); etatMoteurs=true; else if(message=="g") message=""; robot.tourneGauche(100); else if(message=="s") message=""; robot.arret(); else if(message=="b") message=""; TestBatterie(); else if(message=="A") gestion_mouvement(); }//Fin void loop

Pour finir, nous allons nous occuper de la partie automatique, qui s'activera avec l'appui sur le bouton auto.
Le début est le même, avec le if, en revanche, cette fois-ci, nous ne viderons pas la chaîne de caractère.

C++

Code gestion\_mouvement()

void gestion_mouvement() {

while(message=="A") {

robot.enAvant(100); distance = moyenneMesure(30, A2); fin_automatique(); if(distance>500) {

robot.tourneGauche(100); delay(1500); distance = moyenneMesure(30, A2); fin_automatique(); if(distance>500) {

robot.tourneDroite(100); delay(3000);

distance = moyenneMesure(30, A2); fin_automatique(); if(distance>500)

robot.tourneGauche(100); delay(1500); elserobot.enAvant(100);

} else robot.enAvant(100);

} else robot.enAvant(100);

}//fin while }//fin gestion mouvement

On remarque que dans cette fonction, il y a une boucle "while". La boucle "while(message== "A") "  s’exécutera tant que l'on n’appuiera pas sur un autre bouton ;
En effet, si j'appuie sur le bouton stop, la chaîne message ne sera plus égale à "A", la boucle "while" ne sera plus respectée et le robot s’arrêtera.

Afin de sortir de la boucle "while", il faut intercaler dans l'algorithme plusieurs fois une fonction fin\_automatique » qui comprend :

C++

Code fin\_automatique()

void fin_automatique() {

if(bluetooth.available()>0) robot.arret(); message=""; etatMoteurs=false;

//fin if

}//fin fin_automatique

Dès qu'une donnée est présente, cela arrête le robot, vide la chaîne de caractère. Le programme revient donc à la boucle "while" de départ, au tout début du void loop.

Si vous voulez ajouter un bouton sur l'application, vous savez le faire. Pour ajouter ce bouton dans le code Arduino, il suffit de rajouter une ligne :

C++

Code d'ajout de touche

if(message=="valeur envoyée depuis l'application")   message="";             
                           action();

Conclusion

Le programme complet du cocci-bot, l'application (que vous pourrez modifier) ainsi que les branchements se situent en annexe du dossier
PrécédentInstallation de l'application6 / 16SuivantIntroduction