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 ![]()