Problème d'échange de valeur par serial

bonjour a tous .
je suis dsl , je me sent un peu bête de demander de l'aide pour pour un problème qui semble si simple.
je cherche a envoyer un tableau de 5 valeur d'une mega a une autre .
l'émetteur a ce code

unsigned long tempo;
int dataOut[5] = {0,10,20,30,40};

void setup() {
  
  tempo = millis();
  
  Serial.begin(57600); 
  Serial2.begin(19200); 
  Serial.flush();
  Serial2.flush();
 
}

void loop() {

 if (millis() - tempo >= 1000) {
  //Serial2.flush();
         for (int i = 0; i<5;i++){
           Serial2.write(dataOut[i]);
         }
      
  tempo = millis();
  affichOUT();
 }

}

void affichOUT(){
  
        Serial.println();
        Serial.println("data out");
        
        
        for (int i = 0; i<5;i++){
          Serial.print(dataOut[i]);
          Serial.print(";");
        }
        
        Serial.println();
}

et coté réception


int dataInAv[5] = {0};

void setup() {
 

  Serial.begin(57600); // Pour afficher sur le moniteur série
  Serial2.begin(19200); // Pour communiquer avec outil AV
 

}


void loop() {
  if (Serial2.available()) {// recepteur => outil
       
        for (int i = 0; i<5;i++){
          dataInAv[i] = Serial2.read();
         
        }
    Serial.println("from serial 2");
    for (int i = 0; i<5;i++){
        Serial.print(dataInAv[i]);
    }
   Serial.println();
   
  } 

}

mais je recois ca

from serial 2
0-1-1-1-1
from serial 2
10-1-1-1-1
from serial 2
20-1-1-1-1
from serial 2
3040-1-1-1
from serial 2
0-1-1-1-1
from serial 2
10-1-1-1-1
from serial 2
20-1-1-1-1
from serial 2
3040-1-1-1

et je n'arrive pas a comprendre pourquoi
merci d'avance a ceux qui pourront m'éclairer .

Bonjour ced8450

Il ne faut pas envoyer ton tableau élément par élément, mais "d'un coup" comme ceci:
Serial2.write((uint8_t*)dataOut, sizeof(dataOut));

et à la réception:
Serial2.readBytes((char*)dataInAv, sizeof(dataInAv));

Cordialement
jpbbricole

merci beaucoup de ta réponse .
qui fonctionne parfaitement .
:slight_smile:

pour info, votre souci était d'une part qu'en utilisant print

vous envoyez la représentation textuelle en base 10 de votre valeur avec des ; en séparateur

Et d'autre part à la lecture

vous testiez si au moins un octet était arrivé puis vous en lisiez 5 sans vous souciez de savoir s'ils étaient là...

L'autre souci dans votre interprétation c'est que read() ne lit qu'un seul octet et que vos int du tableau sont codé sur 2 ou 4 octets...

La solution apportée par @jpbbricole permet d'émettre tous les octets du tableau dataOut et en réception de lire autant d'octets

merci J M L .
comme d'habitude :grin: .
je vais essayer de comprendre a fond ta reponse demain . qui pour le moment est encore un peu obscur .
merci a vous deux , je vais pouvoir m'endormir plus apaisé
:partying_face::+1:

peut-être lire ce "tuto" vous sera utile ➜ Introduction à la mémoire et aux pointeurs sur Arduino et vous pouvezaussi jeter un oeil à mon tuto sur la gestion du port série