Lecture de caractère dans une intervalle

Bonjour,

Je travail sur un projet dans lequel je reçoit cycliquement des caractères sur le pin 8 de mon arduino Mega 2560, j'aimerais simplement isoler une partie de ces caractère qui m’intéresse, je donne un exemple :

Les caractères suivant arrivent sur le pin 8 :

LJMKHDQOAFLQJBXCLQDPJQPKLUBZJFKJABF

Ce que je voudrais faire c'est stocker dans une variable String ou un tableau de char l'ensemble des caractères compris entre '*' c'est à dire seulement : OAFLQJBXCLQDPJQP

Je sais que ça peut paraître un peu évident pour certain mais je trouve pas d’algorithme me permettant de filtrer cette chaine de caractère.

Si vous avez des idées je suis preneur.

elkilleros:
je trouve pas d’algorithme

Et comment tu ferais "à la main" ? Sans ordi ?

Tu lis le 1er caractère, si ce n'est pas '*' tu passes au suivant sans stocker.
Quand tu rencontres , tu mets un drapeau (un booleen) indiquant que tu enregistres les caractères.
TU continues en enregistrant ...
jusqu'à rencontrer la deuxième '
' et là c'est fini.

Bien sûr il faut aussi traiter les cas où le message ne contient pas exactement 2 '*', suite à une erreur de l'émetteur ou de transmission, si cela peut arriver.

@biggil Déjà merci pour ta réponse, seulement, ce que je ne comprends pas c'est que j'ai essayé plusieurs méthodes mais aucune d'elles ne fonctionnent. Mais plutôt que de prendre un exemple bidon je vais expliquer avec ce que j'ai réellement, donc voici la trame que je reçoit cycliquement sur le moniteur série :

ADCO 011367000001 *
OPTARIF BASE 0
ISOUSC 01 7
BASE 000000000 K
PTEC TH.. $
IINST 001 X
IMAX 090 H
PAPP 02000 #
HHPHC A ,
MOTDETAT 000000 B

Comme tu peux le voir pour la première ligne dans le groupe "ADCO 011367000001 *"
il y a un caractère " " (espace) entre l'étiquette "ADCO" et la fin de la donnée "011367000001"
Ce que je cherche à faire concrètement c'est de stocker la donnée (située entre " ") dans une variable ou un tableau.

Jusqu'à présent je pense avoir trouvé un algorithme qui fonctionne et stocke dans un tableau toutes les données mais lorsque je veux afficher ces donnée à l'aide d'une boucle for, rien n’apparaît sur le moniteur série. Voici mon code :

#include <SoftwareSerial.h>
#define startFrame 0x02
#define endFrame 0x03
#define lineFeed 0x0A
#define horizontalTab 0x09
#define carriageReturn 0x0D

int flag = 0;

char trameTIC[50] = {};


SoftwareSerial* cptSerial;




void setup() {

  Serial.begin(115200);
  cptSerial = new SoftwareSerial(8, 9);
  cptSerial->begin(1200);


}

void lectureTIC()
{
  uint8_t i = 0;
  char charIn = 0;
  while(charIn != startFrame)
  {
    charIn = cptSerial->read()& 0x7F;
  }
  while(charIn != endFrame)
  {
    if(cptSerial->available())
    {
      charIn = cptSerial->read()& 0x7F;
      Serial.print(charIn);
      if((charIn == ' '))
      {
        flag++;
      }
      if((flag == 1) && (charIn != ' '))
      {
        trameTIC[i] == (char)charIn;
        i++;
      }
      if((charIn == ' ') && (flag > 1))
      {
        flag = 0;
      }

    }
  }
  Serial.print("\n\n ");
  for(int i =0; i<50; i++)
  {
    Serial.print((char)trameTIC[i]);
  }
}

void loop() {
  lectureTIC();
}

Savez vous si c'est moi qui m'y prends mal, ou une autre erreur de programmation ?

Merci d'avance.

Vous pouvez jeter un oeil à mon petit tuto sur le sujet . Y'a même du code :slight_smile: