comunicazione seriale tra due arduino

Buongiorno a tutti è da un po che mi scervello su un piccolo problema di codice e volevo chiedere aiuto per capire dove fose il problema.....

master:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int x[6];
int a=0;
void setup()  
{pinMode(13, OUTPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
  Serial.begin(9600);
   while (!Serial) {
    ;
  } 
  mySerial.begin(9600);
}

void loop() 
{
 if(digitalRead(8)==HIGH)//invia il dato in seriale
{ 
   for(a=0;a<6;a++){
      mySerial.write(a); 
    ;}}

 if(mySerial.available()>=6){ //leggo sempre la seriale
  for(a=0;a<6;a++){
   x[a]=mySerial.read();}}
   
if(digitalRead(9)==HIGH){//
    delay(200);
    
      for(a=0;a<6;a++){
      mySerial.write(x[a]);
      Serial.println(x[a]);
      }
   
}
}

slave:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()  
{ 
  pinMode(13, OUTPUT);
  pinMode(9, INPUT);
  Serial.begin(9600);
  while (!Serial) {
    ; 
  }
  mySerial.begin(9600);

}
int x[6];
int a=0;
void loop()
{
  if(digitalRead(9)==HIGH){
    delay(200);
      for(a=0;a<6;a++){
      mySerial.write(x[a]);
      Serial.println(x[a]);
    }
  }
  if(mySerial.available()>=6){ 
    for(a=0;a<6;a++){
      x[a]=mySerial.read();
    }
  }
  //}



  }

il problema è che lo slave riceve il dato in modo corretto invece quando lo slave risponde con il codice ricevuto sul master l'ordine di arrivo e memorizzazione sulla variabile non è nell'ordine correto ricevo
master invia 012345
slave riceve 012345
slave riinvia 012345
master riceve 450123

cosa puo essere come errore??? grazie

ma i pin 8 e 9 a cosa sono collegati??

sono collegati a dei microswitch che premo io

prova a mettere un piccolo ritardo dopo ogni lettura da seriale..basta anche una delay(1) credo..io avevo lo stesso problema ed ho risolto cosi..

ho provato come mi hai detto ma ricevo sempre dati in ordine ma spostati....

ma hai provato a stampare il contenuto dell'array quando ricevi? dopo la read dico

ho ho provato con questo codice e me lo riceve giusto

if(mySerial.available()>=6){ 
    for(a=1;a<7;a++){
      x[a]=mySerial.read();
       Serial.println(x[a]);
    }
    delay(10);
    for(a=1;a<7;a++){
      mySerial.write(x[a]);
  }

quando lo re invia e lo leggo sul altro arduino con questo codice me lo riceve o con errori alle volte tipo qualche volta ricevo 255 oppure la maggiorparte delle volte ricevo 540123 invece l'altro invia 012345....

 if(digitalRead(9)==HIGH){
    delay(200);
      for(a=0;a<6;a++){
      mySerial.write(a);
      Serial.println(a);
    }
  }
  if(mySerial.available()>=6){ 
    for(a=0;a<6;a++){
      x[a]=mySerial.read();
    }
  }
  if(digitalRead(8)==HIGH){ delay(300);
   for(a=0;a<6;a++){
      Serial.println(x[a]);
    ;}}
}

prova cosi

if(mySerial.available()>=6){ 
    for(a=1;a<7;a++){
      x[a]=mySerial.read();
       Serial.println(x[a]);
    }
    mySerial.flush();
    delay(10);
    for(a=1;a<7;a++){
      mySerial.print(x[a]);
  }

e dall'altro mettere

if(digitalRead(9)==HIGH){
    delay(200);
      for(a=0;a<6;a++){
      mySerial.print(a);
      Serial.println(a);
    }
  }
  if(mySerial.available()>=6){ 
    for(a=0;a<6;a++){
      x[a]=mySerial.read();
    }
  }
  if(digitalRead(8)==HIGH){ delay(300);
   for(a=0;a<6;a++){
      Serial.println(x[a]);
    ;}}
}

allora diciamo che funziona ma c'e un pero :slight_smile: nel senso che il dato questa volta mi arriva giusto ma solo alla seconda pressione del pulsante.....

prova a togliere la mySerial.flush()..forse è quella che blocca..

ho provato levando quella riga di comando ma rimane uguale il problema mi riceve il dato giusto al secondo invio...ho provato a cambiare la velocita di trasferimento ma ancora nulla cosi ho provato a fare un cambiamento sullo slave rimuovendo la seriale software e collegarla sul quella hardware e magicamente funziona alla prima pressione..ricevo il dato esatto...diciamo che non ne avrei mooolto bisogno di quella software dato che poi lo devo sostituire il tutto con un mega era piu per comodita nel caso avessi bisogno ri riprogrammare senza dover staccare il tutto ogni volta...

riprendo in mano questo mio problema....
allora mi sono accorto che se accendo l'arduino master e dopo quello slave ricevo i dati in modo esatto
invece se dopo vari invii spengo e ri-alimento il master lo slave riceve sempre i dati ma come detto nei precedenti post mi arrivano sfalsati...
e se mi faccio stampare i dati ricevuti mi accorgo che sono giusti i dati ma invece di ricevere:
1 ricevo: 7 oppure 6
2 1 7
3 2 1
4 3 2
5 4 3
6 5 4
7 6 5