Récuper des données en Bluetooth

Bonjour/Bonsoir,
Voilà, j'ai 2 problème qui s'oppose à moi, je dois récupérer des données envoyer par Bluetooth, la récupération dois s'effectuer dès que je reçois un char(2), qui annonce le début de la chaine de données, et doit finir à la réception d'un char(3) qui ,du coup, met fin à la récupération des données. Mon problème est justement de lui dire de récup les données à partir de char(2) jusqu'à char(3), et mon autre problème est de les stocker en sachant qu'il y a plusieurs données entre les 2 (environ 7 à 10), je ne trouve pas comment faire.

Merci d'avance aux âmes charitables qui pourront me débloquer.

La com Bluetooth passe par une liaison série : regarde ce tuto.

Merci pour cette réponse, j'avais déjà lu ce post mais je n'arrive pas à l'appliquer à mon problème, si quelqu'un a une façon de bien m'expliquer comment définir le début, et fin, d'une lecture de trame, je suis preneur.

Tu l'as décrit toi même dans ton premier message :

Brice_B:
la récupération dois s'effectuer dès que je reçois un char(2), qui annonce le début de la chaîne de données, et doit finir à la réception d'un char(3) qui ,du coup, met fin à la récupération des données.

Ta trame arrive avec des délimiteurs char(2) au début et char(3) à la fin. Qu'est ce que c'est pour toi ce char(2) et char(3) ?

Char(2) c'est le début de ma trame, STX (Start of Text) en ASCII, en inversement pour Char(3) (ETX, End of text).

Pour le dire differement, quand je veux faire un, par exemple,

if (debutTrame == char(2))

il ne va pas comprendre, il veut que je le mette comme si c'etait du texte.

Il faut que tu mettes en place un automate (un simple switch/case), avec un état, un buffer, un index (longueur).

#define ST_IDLE             0
#define ST_STX_RECEIVED     1
#define ST_ETX_RECEIVED     2
#define LENGTH              16     // à dimensionner

int state = ST_IDLE;
int length;
char buf[LENGTH];

void setup() {
  // put your setup code here, to run once:

}

int receive(void)
{
  // ta fonction de réception d'un caractère
}

int execute(const char *cmd)
{
  // ta fonction d'exécution de commandes
}

void loop() {
  int c = receive();
  switch (c) {
    case 2:
      length = 0;
      state = ST_STX_RECEIVED;
      break;
    case 3:
      state = ST_ETX_RECEIVED;
      break;
    default:
      if (length < LENGTH) {
        buf[length++] = c;
      }
      break;
  }
  if (state == ST_ETX_RECEIVED) {
    execute(buf);
    state = ST_IDLE;
 }
}

Tu vois ou pas ?

Ah, je n'avais pas penser à ça comme ça !
Merci je vais tester.

C'est comme cela que l'on bâtit un protocole en général.

STX = 2 et ETX = 3 sont de bons choix, c'est standard. C'est un bon départ.

Ensuite si dans les données il y a du binaire, il va falloir penser à DLE (mode transparent).