[Résolu]enregistrement liaison série

Bonjour ,
Je voudrais afficher ma liaison série quand celle ci communique pour à la fin du projet mettre sur une carte SD .
Je commence par l'affichage sur le moniteur mais c'est un echec

voila le programme :

#include <SD.h>
#include <SoftwareSerial.h>
#include <SPI.h>

SoftwareSerial mySerial(8, 7);  
SoftwareSerial BTSerial(2, 3); // RX | TX
// RX arduino <--- TX cible
// TX arduino ---> RX cible
byte rec[100]={0};
int i =0;
int y=0;
int z=0;
File logfile;

void setup()

{
  SD.begin(10);
 // Serial.begin(38400); // vitesse serial monitor
   
    char filename[15];
      strcpy(filename, "GPSLOG.TXT");
     
      logfile = SD.open(filename, FILE_WRITE);

 BTSerial.begin(9600);  // vitesse software serial

}

void loop()
{


  if(BTSerial.available()>0)
   {
    for (int q=0;q<200;q++)
      {
        rec[q] = BTSerial.read();
       int i=2;
    
       
       
        
      }
    }
    if(!BTSerial.available())
   {
      if (i ==2)
        {
          while(rec[z] != '\0')
          {
          if (rec[y] < 16) Serial.print("0");
        Serial.print(rec[y], HEX);
           y++;
           z++;
          }
        }
     }
    
}

Bonjour
Tu déclares 2 sotfwareserial et n'en utilise qu"un.
A vérifier mais il me semble qu'il faut dire au softwareserial d’écouter son port de réception avec BTSerial.listen() ou un truc du genre.

Tu initialise ta SD mais tu ne l'utilise pas. Pour le teste, enlève tout ce qui est inutile. Ca cache les erreurs.

Dans ton loop()
tu fais un test pour savoir si tu as reçu au moins un octet depuis le BTSerial et ensuite tu lis 200 octets sans vérifier qu'il y en a d'autre de reçu. En plus, tu déclare ton tableau a 100 valeurs.

dans ton 2eme if , tu teste si i=2 hors i vaudra toujours 0 car dans ton 1er if, tu déclare une nouvelle instance local de i. faut enlever le "int" dans le 1er if

je n'ai pas plus approfondi que ça. Corrige déjà ceci, on verra ensuite s'il te reste des problèmes.

A+

Normalement c'est le dernier en begin() qui écoute, donc la ça devrait pas poser de problème. Des fois que, vaut mieux quand même virer l'autre qui sert à rien.

Sinon c'est surtout un beau bordel ce programme ... Déjà pas de delay() après if(BTSerial.available()) => la communication en est même pas au 10ème que le if(!BTSerial.available()) aura démarré. Ensuite z et y ne sont jamais remis à zéro. Enfin qu'elle utilité de z et y si z = y ?