Comunicazione Master Slave

Buongiorno a tutti!

(piccola premessa: sono nuovo con arduino per cui mi scuso se pongo domande banali.)

Sto lavorando per un progetto universitario con due schede arduino: una scheda arduino mega2560 e una scheda arduino uno wifi rev2.
Alla scheda Mega2560 ho collegato diversi sensori tra i quali anche un GPS (Adafruit Ultimate GPS Breakout) per ricostruire il percorso che faccio.
Il mio obiettivo è quello di creare una specie di sincronizzazione tra le due schede e per fare questo, la cosa fondamentale è inviare l'ora che ottengo dal gps da una scheda all'altra (poi ovviamente devo eseguire altre operazioni ma su quelle non ho grossi problemi).
Il gps mi restituisce una stringa (con tutte le informazioni) ad ogni secondo.
Nella mia configurazione la scheda Mega sarebbe lo slave, mentre la scheda Uno il master; collegamento con I2C.
Vi allego il codice master-slave delle schede:
MASTER

void setup() {
  
  // MASTER
  Wire.begin();
....
....
....
}

void loop() {
  Wire.requestFrom(7, 32);
  while(Wire.available()){
    char c;
    c = Wire.read();
    Serial.println(c);
  
  }
  // ....
  //.....
  //.....
}

SLAVE:

void setup() {
  // SLAVE
  Wire.begin(7);
  Wire.onRequest(trasmetti);
....
....
....
//PER ABILITARE L'INTERRUPT
  useInterrupt(true);
}

void trasmetti(char s[32]) {
  //  QUA IO DOVREI INVIARE AL MASTER (ARDUINO UNO) IL TIME DEL GPS (UTC) + i millisecondi correnti
  //Serial.println(s);
  Wire.write(s);

}

ISR(TIMER0_COMPA_vect) {
  //file_gps = SD.open("gps.csv", FILE_WRITE);

  char c = GPS.read();
  // if you want to debug, this is a good time to do it!
#ifdef UDR0
  if (GPSECHO)
    if (c) UDR0 = c;  
    // writing direct to UDR0 is much much faster than Serial.print 
    // but only one character can be written at a time. 
#endif

  if (GPS.newNMEAreceived()) {
    char *stringa;
    stringa = GPS.lastNMEA();
    //Serial.println(stringa);
    if(stringa[1] == 'G' && stringa[5] == 'A' && stringa[28] == 'N'){ // QUESTO IF MI SERVE PER VERIFICARE CHE LA STRINGA SIA NEL FORMATO GIUSTO
      currentTime = millis();
      char time_gps[11];
      char timestamp[32] = " ";
      char millis_conv[20] = " ";
      int time_int;
      //Serial.println(stringa);
      strncpy(time_gps, stringa + 7, 10); // Copia i caratteri dall'indice 7 al 16
      time_gps[10] = '\0'; // Aggiungi il terminatore nullo
      //Serial.println(time_gps);

      // CREO IL MESSAGGIO CHE INVIERO' ALL'ALTRA SCHEDA...
      dtostrf(currentTime, 7, 2, millis_conv);
      strcpy(timestamp, time_gps);      // Copia la prima stringa in timestamp
      strcat(timestamp, ",");          // Concatena la virgola e lo spazio
      strcat(timestamp, millis_conv);   // Concatena la seconda stringa
      //Serial.println(timestamp);
      //Serial.println(strlen(timestamp)); //OK, VA BENE

      //INVIO IL MSG AL MASTER, RICHIAMO LA FUNZIONE 'trasmetti()'....
      trasmetti(timestamp);
    }
    // file_gps.print(GPS.lastNMEA());
    // if (!GPS.parse(GPS.lastNMEA()))
    //   return; 
  }
  //file_gps.close();
}

void useInterrupt(boolean v) {
  if (v) {
    // Timer0 is already used for millis() - we'll just interrupt somewhere
    // in the middle and call the "Compare A" function above
    OCR0A = 0xAF;
    TIMSK0 |= _BV(OCIE0A);
    usingInterrupt = true;
  } else {
    // do not call the interrupt function COMPA anymore
    TIMSK0 &= ~_BV(OCIE0A);
    usingInterrupt = false;
  }
}

Come vedete vado a creare un 'timestamp' formato dall'ora del gps (in fromato UTC) + i millis(); questa stringa viene creata correttamente (ho verificato andando a stamparla).
Il PROBLEMA è che in fase di ricezione non la ricevo proprio, ma anche quando io richiamo la funzione 'trasmetti()' e vado a stampare il parametro che gli passo, questo non è stampato nel modo giusto.

Sapete dirmi come mai?
Grazie mille,
Alberto.

Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Detto questo, in conformità al punto 13 del succitato regolamento, ti rammento che il cross-posting è proibito (anche tra lingue diverse) e ... tu hai già posto la stessa/simile domanda QUI:roll_eyes:

Quindi, in conformità al succitato regolamento, questa tua discussione duplicata viene chiusa e ti prego di continuare dove avevi cominciato.

Grazie,

Guglielmo