1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
// gestion bluetooth avec balises et acquittement (envoyé mais non géré car il doit être codé aussi
// du coté de l'application qui envoie les données)
// format de la chaine à envoyer
// J'ai pris le format d'une app android Bluetooth electronics
// en choisissant un pad et en définissant un caractère de début et de fin, cela donne:
// < sera le caractère de début de la chaine et > sera le caractère de fin de la chaine
// <X111,Y222> 13 caractères mais 15 permis soit 4 chiffres possibles par variable
// mais attention le signe moins '-' est autorisé et dans ce cas, cela donne:
// 9999 à -999 sont donc les valeurs max possibles pour les variables sans dépasser la longueur de la chaine autorisé
// vous pouvez modifier la variable maxCaracteres pour augmenter ou diminuer la longueur de la chaine
// en prenant les valeurs max que vous souhaitez sans omettre le signe '-' le cas échéant.
// la virgule sépare les données
int x = 0, y = 0; // variables pour le traitement de la chaine avec les valeurs par défaut
int compteur;
byte start = 0;
char valeur = ' ';
const int maxCaracteres = 15;
char receptionBluetooth[maxCaracteres + 1]; // +1 pour le caractère de fin de chaine
unsigned long myTime = 0;
void setup() {
Serial1.begin(9600); // port de com avec le module bluetooth
// à modifier selon votre carte arduino
Serial.begin(9600); // port USB relier au PC (c'est celui par défaut)
// vous n'aurez normalement pas à le modifier
while (!Serial) {
// wait
}
Serial.println("Prêt à recevoir");
}
void loop() {
char * recherche;
if (Serial1.available()) {
valeur = Serial1.read();
//Serial.println(valeur);
if (valeur == '<') {
compteur = 0;
start = 1;
memset(&receptionBluetooth, 0, maxCaracteres + 1);
receptionBluetooth[compteur] = valeur;
}
if (start) {
compteur++;
if (compteur <= maxCaracteres) {
receptionBluetooth[compteur] = valeur;
} else {
start = 0;
valeur = ' ';
Serial.println("Echec, Prêt à recevoir de nouveau");
}
}
if (valeur == '>') {
start = 0;
valeur = ' ';
recherche = strchr(&receptionBluetooth[0], 'x');
if (recherche != NULL) {
x = atoi(recherche + 1); //<X111,Y222>
// recherche pointe sur x
// on ajoute + 1 pour qu'il pointe sur la premier chiffre
// soit le 1 ici dans cet exemple
// la fonction atoi va convertir tous les caractères correspondant à des chiffre en une valeur numérique
// il s'arrêtera au premier caractère ne correspondant pas à un chiffre
}
recherche = strchr(&receptionBluetooth[0], 'y');
if (recherche != NULL) {
y = atoi(recherche + 1); //<X111,Y-222>
// recherche pointe sur y
// on ajoute + 1 pour qu'il pointe sur la premier chiffre
// soit le 1 ici dans cet exemple
// la fonction atoi va convertir tous les caractères correspondant à des chiffre en une valeur numérique
// il s'arrêtera au premier caractère ne correspondant pas à un chiffre
}
Serial.println("-------------");
//Serial.print(recherche);
//Serial.println(*recherche);
Serial.print("x:");
Serial.println(x);
Serial.print("y:");
Serial.println(y);
Serial.println("-------------");
x = 0; y = 0; // les variables sont remis à leurs valeurs par défaut
Serial.println("Prêt à recevoir");
}
}
} |