salve a tutti
so benissimo che di questo argomento ne è stato parlato all'infinito, e a tal proposito non so quanti post ho letto nell'ultima settimana, ma non riesco a capire il problema del mancato funzionamento e di conseguenza chiedo aiuto a tutti voi.
devo far comunicare una variale ti tipo float fra due arduino uno, il collegamento hardware funziona perchè l'ho provato con questo sketch e sul monitor seriale del ricevitore riesco a leggere ciò che spedisce il trasmettitore.
void loop() {
if (BTSerial.available() > 0) Serial.write(BTSerial.read());
if (Serial.available() > 0) BTSerial.write(Serial.read());
il codice del trasmettitore, la parte semplificata solo per vedere se trasmette e riceve è la seguente:
//Codice per Arduino A in trasmissione
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
byte Decimali = 1; // numero decimali
float Ros = 13.0 ; //dichiarazione della variabile
void setup() {
Serial.begin(9600);
Serial.println("seriale tx inizio");
mySerial.begin(9600);
mySerial.println("seriale virtuale tx inizio");
}
void loop() {
Serial.println(Ros, Decimali);
mySerial.println(Ros, Decimali);
}
e quella del ricevitore è la seguente:
// Codice per Arduino B in ricezione
#include <SoftwareSerial.h> // libreria creazione porta seriale virtuale
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Libreria per LCD i2c
LiquidCrystal_I2C lcd(0x3E, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // si assegna l'indirizzo del LCD
SoftwareSerial mySerial(9, 8); // RX, TX
int I = 0;
int J = 0;
String Z = "";
byte Decimali = 1;
String SerRx = ""; // azzera buffer ricezione
float Ros = 0.0 ;
void setup() {
Serial.begin(9600); // inizializza porta seriale
Serial.println("seriale rx inizio");
mySerial.begin(9600);
mySerial.println("seriale virtuale rx inizio"); // inizializza porta seriale ausiliaria
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ros:");
}
void loop() {
SerRx = ""; // azzera buffer ricezione
while (mySerial.available() > 0) { // ricezione da modulo
SerRx += char(mySerial.read()); // aggiungi carattere al buffer
if (SerRx.length() > 0) { // ci sono dei dati nel buffer (Temp<CR><LF>)
J = 0;
I = SerRx.indexOf(13, J); // cerca CR (carriage return) a partire dal carattere J
if (I > 0) {
Z = SerRx.substring(J, I); // sotto stringa dal carattere J al carattere I-1
Ros = Z.toInt();
J = I + 2; // nuova posizione di ricerca
mySerial.println(Ros, Decimali);
Serial.print("Ros = ");
Serial.println(Ros);
lcd.setCursor(0, 1);
lcd.print(Ros);
}
}
}
}
, ma sul serial monitor del ricevitore non riesco a vedere niente.
non capisco dove sbaglio, ho provato anche a cambiare tipo di variabile , ma il risultato non cambia.
qualcuno è così gentile da aiutarmi
grazie