2 arduino con SoftSerial

Buongiorno a tutti.

Vorrei provare a far 'parlare' due arduino con la libreria SoftSerial.
Tanto per cominciare vorrei memorizzare in maniera on/off lo stato di 1 pulsante su arduino che funge da master sull'arduino che funge da slave.

Cioè:
premo il pulsante 1 su arduino master
Invio il dato
Ricevo il dato su arduino slave
memorizzo il valore in una variabile
invio dallo slave al master il valore della variabile per la verifica

Avevo intenzione di inviare via seriale una cosa di questo tipo:

BT01UP
oppure
BT01DW

Come posso inviare stringhe su seriale ?
Esiste qualche esempio che usi SoftSerial in maniera Master / Slave

Grazie, Alberto

Forse non ti interessa o forse non puoi per altri motivi, ma hai provato a guardare gli esempi "slave/master" per far comunicare due arduino via i2c? Sono inclusi come esempi base nell'ide, e sono semplicissimi.

E se avessi anche un display collegato in 12c funzionerebbe uguale ?

Grazie, Alberto

Certo, sugli stessi pin usando il bus i2c!

Ah !!
Ok provo a far qualcosa :slight_smile:

Grazie molte

Alberto

Come faccio a mandare una stringa con questo codice:

String CMotor = (CurrentMotor);
String SnD = ("M"+CMotor+"UP");
Wire.beginTransmission(4); // transmit to device #4
Wire.send(SnD); // sends 5 bytes 'MXXUP'
Wire.endTransmission(); // stop transmitting

Mi da errore in compilazione

Grazie, Alberto

Devo abbandonare i2c perchè poi la distanza tra gli arduino sarà di 16 metri.
Quindi devo andare di SoftwareSerial.
Ma per collegare fisicamente i due arduino devo aggiundere dell'elettronica o bastano i due fili rx/tx ?

Grazie, Alberto

Solo i fili

solo i fili.
inizializzerai l'oggetto SoftSerial passandogli i pin che vuoi usare come tx/rx, stessa cosa nell'altro arduino.
ricrda che tx1 va con rx2 e rx1 con tx2 (1e 2 cono i 2 arduino)
a questo punto puoi usare l'oggetto come se fosse la normale seriale, begin, read, print, avaiable ecc....

Sto provando ma mi incasino.

Provo ad inviare da arduino 1 con:
mySerial.print("CIAO");

E stampo su serial arduino 2 con:
char someChar = mySerial.read();
Serial.println(someChar);

ma mi escono caratteri strani :slight_smile:

Sicuro di star utilizzando la stessa velocita' di seriale su entrambi?

Si !!

Ho dovuto fare così:

void loop() {
bytesread = 0;

while(bytesread<4) // read 4 digit code
{
val = mySerial.read();
code[bytesread] = val; // add the digit
bytesread++; // ready to read next digit
}
Serial.println(code);
}

Una cosa piacevole è che ho collegato i 2 Arduino con 30 metri di cavo schermato
(quello microfonico a due + schermatura) e sembra non perdere un colpo :grin:

Grazie, Alberto