Envoyer des commandes depuis le port serie

Bonjour a tous,

Je cherche a envoyer des commandes depuis le port serie Arduino vers un port NewSoftSerial, mais apparement rien ne se passe....

Voici le code que j'essaie :

#include <NewSoftSerial.h>
//On cree un port serie nss
NewSoftSerial nss(11, 12);

//Pour le Buffer des trames recues
char inbyte = 0;                 // Received byte
char buf[260];                   // Incoming data buffer
int buflen = 0;                  // Length of buffered ata
//Pour le Buffer des trames recues nss
char inbytenss = 0;                 // Received byte
char bufnss[260];                   // Incoming data buffer
int buflennss = 0;                  // Length of buffered ata
void setup()
{
  Serial.begin(9600);
  nss.begin(9600);
}

void loop()
{
  //Trame recu sur le port serie
 while (Serial.available() > 0)
  {
    inbyte = Serial.read();      // Get the byte
    if (inbyte == '\n')          // On attend le caractere de fin de trame
    {
      
      //Affichage de la trame tel que recu
      nss.println(buf);
  
    //Remise a 0 du buffer
      buflen = 0;
    }
    else if (inbyte > 31 && buflen < 260)  
    // On enregistre chaque caractere de la trame dans un buffer tant que le caractere \n de fin de trame n'a pas apparu
    {
      buf[buflen++] = inbyte;
      buf[buflen] = 0;
    }
  } 
  //trame recu sur le port nss
 while (nss.available() > 0)
  {
    inbytenss = nss.read();      // Get the byte
    if (inbytenss == '\n')          // On attend le caractere de fin de trame
    {
      
      //Affichage de la trame tel que recu
      Serial.println(bufnss);
  
    //Remise a 0 du buffer
      buflennss = 0;
    }
    else if (inbytenss > 31 && buflennss < 260)  
    // On enregistre chaque caractere de la trame dans un buffer tant que le caractere \n de fin de trame n'a pas apparu
    {
      bufnss[buflennss++] = inbyte;
      bufnss[buflennss] = 0;
    }
  }                            
}

Je m'en remet donc a vous si vous connaissez une solution afin de faire communiquer ces 2 ports.

En fait newsoftserial te fournit un port série un peu "boiteux". En effet tu n'as pas dans ce cas de buffer mémoire, donc si tu n'es pas parfaitement "à l'écoute" du port lors de la réception, les données sont perdues. C'est une librairie très pratique pour envoyer des données, pour la réception elle est assez contraignante ...

Ok ca je comprends bien, par contre, les trames que je recois du port de nss, elles sont correctement transmise vers mon port serie (USB) de l'arduino.
C'est donc dans l'autre sens, USB->arduino->nss que ca me pose un probleme.
Je pensais que ca pouvais etre le caractere de fin qui me pose probleme mais je ne trouve pas d'explication

Remplace tes While par des if, ce devrait mieux fonctionner...

Ca me rappel quelque chose qui m'était arrivé.

Vaut mieux boucler entre 2 if(Serial.available()) que de boucler sur while(Serial.available()) selon mes souvenirs...

Ensuite dans le corps :

buf[buflen++] = inbyte;
buf[buflen] = 0;

Tu n'es pas obligé de mettre le 0 à chaque lecture de caractère. Tu perds du temps cpu pour rien.

Tu peux le mettre juste avant d'afficher ta string dans le corps if (....='\n')

de plus il manque une remise à zero de buflen.

donc je ferai plutôt :

if (inbyte>31)
{
buf[buflen++] = inbyte;

if (buflen>258) buflen=0; // le dernier indice de buf[260] est 259 !
}