Communication Arduino Raspberry

dadycoke:
j'ai lu le tuto il est très intérressent cependant il traite que du coté arduino. Moi je reçois bien sur l'arduino, c'est la réponse de l'arduino que je ne parviens pas a lire convenablement sur la raspberry ( soit je recois la réponse en entier soit je ne lis que la moitié ... et des fois je ne lis rien du tout :astonished: )

Mon problème se situe au niveau de la reception je crois ( en C pr l' uart ):

int rx_length = read (fd, (void*)rx_buffer, 255).

Quand j'ouvre le port /dev/ttyACM0 sans le mode O_NDELAY=> le programme reste la à attendre des donnée et n'en sort pas.
Quand j'ouvre le port en mode O_NDELAY il sort immédiatemment et rx_lenght < 0

voici le code pr plus de précision

int fd = -1;
fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY);

if (fd != -1){
// Read up to 255 characters from the port if they are there
      unsigned char rx_buffer[256];
      int rx_length = read(fd, (void*)rx_buffer, 255);

if (rx_length < 0){
              //An error occured
              printf("UART RX error\n");
      }
      else if (rx_length == 0){
              //No data waiting
      }
      else
      {
             //Bytes received
             rx_buffer[rx_length] = '\0';
            printf("%i bytes read : %s\n", rx_length, rx_buffer);
       }
}

Le morceau de code sortie de son contexte ne permet pas de juger s'il fonctionne ou non. Ce qu'il faut bien voir c'est que les caractères que tu envoies par l'arduino arrivent relativement lentement par rapport à la vitesse ou ton code est exécuté. Donc si tu attends 3 caractères par exemples il faudrait faire une boucle d'attente non bloquante. Tu boucles sur le read jusqu'à avoir 3 caractères dans le buffer ou si un hors temps s'est écoulé.