Risolto - I2C Problema comunicazione MASTER-SLAVE

Salve a tutti.
Sono nuovo del forum e chiedo il vs aiuto perché non riesco a risolvere un problema da giorni.
Ho due Arduino (modello Uno) che comunicano tra loro tramite protocollo I2C (master-slave; Gnd in comune e pin A4 e A5 collegati tra loro). I due Arduino sono alimentati collegando entrambi, attraverso la porta USB, al PC.
Il master(porta com4 del PC) riceve dati da un programma scritto in VB NET da me; ogni volta che clicco su un pulsante, presente nel programma VB, viene inviato un dato al master.
Il dato è una stringa lunga 14 di questo tipo xxxxxxxxxxxxx + '\n' (dove x è '0' o '1') ovvero 13 caratteri più il terminatore di stringa.
La stringa ricevuta dal master deve essere passata poi allo slave (porta com6 del PC) attraverso la libreria Wire.
Quando clicco per la prima volta il pulsante per inviare la stringa a volte la invia subito altre volte devo premere il tasto più di una volta (lo vedo tramite il monitor seriale com6).
Una volta riuscito a inviare il primo dato non riesco a inviarne altri (posso premere il tasto all'infinito ma nessun dato è ricevuto dallo slave).

Come mai?

Qui sotto il codice del Master

//Codice Master

//Libreria i2c
#include <Wire.h>

#define BAUDRATE 9600  
#define BYTEINVIATI 14
#define DELAY 500                        

byte address = 0;                      

String outputString = "";               
boolean stringComplete = false;     

void setup()

{
  Wire.begin();
  Serial.begin(BAUDRATE);
  outputString.reserve(BYTEINVIATI);
}

void loop()

{
  
  String inputString = "";
  
  if (stringComplete == true)
  {
    Wire.beginTransmission(1);
    for(int i = 0; i < BYTEINVIATI; i++)
    {
    Wire.write(outputString[i]);
    }
    Wire.endTransmission();
    outputString = "";
    stringComplete = false;
  }  
  
}

void serialEvent() 
{
  while (Serial.available()) 
  {
    char inChar = Serial.read();
    outputString += inChar;
    if (inChar == '\n') 
    {
      stringComplete = true;
    }
  }
}

Qui sotto il codice dello Slave

//Codice Slave

//Libreria i2c
#include <Wire.h>

#define DELAY 50                            
#define BAUDRATE 9600                       
#define ADDRESSSLAVECENTINAIA 0
#define ADDRESSSLAVEDECINA 0
#define ADDRESSSLAVEUNITA 1                                               

String inputString = "";
boolean stringComplete = false;         //Stringa completata  

void setup()
{
Wire.begin((ADDRESSSLAVECENTINAIA * 100)+(ADDRESSSLAVEDECINA * 10)+ (ADDRESSSLAVEUNITA));       
Wire.onReceive(receiveEvent);
Serial.begin(BAUDRATE);                   
}

void loop()
{
  delay(DELAY);
}

void receiveEvent(int howMany)
{
  inputString = "";
  while (1 < Wire.available())
  {
  char c = Serial.read(); 
  inputString += c;
  }
  Serial.print(inputString);
}

Grazie a tutti in anticipo :slight_smile:

Ciao!

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Nessuno può aiutarmi?
Grazie ancora

Trovato l'errore. Era errata la condizione nel while dello slave.