Salve a tutti,
ho un problema con la comunicazione di una struttura tramite la libreria EasyTransfer.
Nel sistema, sono presenti 2 schede collegate via seriale(XBee): un Arduino Mega che funge da master e un Arduino Uno configurato come slave.
Dopo l'avvenuta ricezione della struttura e dell'ultimo valore dallo slave, il master si blocca inesorabilmente, non va in crash ne null'altro, si blocca punto.
Ho provato a rimuovere XBee ed instaurare una connessione seriale diretta, ma il problema rimane.
Ho controllato la questione del delay al di sotto dei 5 secondi, ma nulla il master "s'impalla" =( =(
Esiste qualche alternativa per la comunicazione tramite seriale xbee di questo set di dati, oppure sapete come fixare questo problema?
Grazie mille in anticipo in allegato i due codici
Master
#include <EasyTransfer.h>
struct DATA_STRUCTURE{
char TYPE;//tipo di trasmissione C=Comando S=inviodati T=settempo
int DESTINATION;//destinazione 9999=a tutti
int IDDevice;//id slave
int enable;
int pwmVal;
int ledT;
int power;
int temperature;
int umidity;
int pressure;
int lux;
int aperto;
int controll_var;
};
EasyTransfer ET;
DATA_STRUCTURE myData;
void setup(){
ET.begin(details(myData), &Serial1);
}
void loop(){
if(ET.receiveData()){
Serial.println("In ricezione dati...");
Serial.println(Receive_XBEE());
}
}
String Receive_XBEE(){
String s="";
char TYPE=myData.TYPE;
int DESTINATION=myData.DESTINATION;
int IDDevice=myData.IDDevice;
s+="|RECEIVE XBEEE ID="; s+=IDDevice; s+= "|"; s+='\n';
int enable=myData.enable;Serial.print(s);s="";
s+="|RECEIVE XBEEE enable="; s+=enable; s+= "|"; s+='\n';
int pwmVal=myData.pwmVal;Serial.print(s);s="";
s+="|RECEIVE XBEEE pwmVal="; s+=pwmVal; s+= "|"; s+='\n';
int ledT=myData.ledT;Serial.print(s);s="";
s+="|RECEIVE XBEEE ledT="; s+=ledT; s+= "|"; s+='\n';
int power=myData.power;Serial.print(s);s="";
s+="|RECEIVE XBEEE power="; s+=power; s+= "|"; s+='\n';
int temperature=myData.temperature;Serial.print(s);s="";
s+="|RECEIVE XBEEE temperature="; s+=temperature; s+= "|"; s+='\n';
int umidity=myData.umidity;Serial.print(s);s="";
s+="|RECEIVE XBEEE umidity="; s+=umidity; s+= "|"; s+='\n';
int pressure=myData.pressure;Serial.print(s);s="";
s+="|RECEIVE XBEEE pressure="; s+=pressure; s+= "|"; s+='\n';
int lux=myData.lux;Serial.print(s);s="";
s+="|RECEIVE XBEEE lux="; s+=lux; s+= "|"; s+='\n';
int aperto=myData.aperto;Serial.print(s);s="";
s+="|RECEIVE XBEEE aperto="; s+=aperto; s+= "|"; s+='\n';
int controll_var=myData.controll_var;Serial.print(s);s="";
s+="|RECEIVE XBEEE controll_var="; s+=controll_var; s+= "|"; s+='\n';
Serial.print(s);
return("FINE RICEZIONE");
}
Slave
#include <EasyTransfer.h>
EasyTransfer ET;
struct DATA_STRUCTURE{
char TYPE;//tipo di trasmissione C=Comando S=inviodati T=settempo
int DESTINATION;//destinazione 9999=a tutti
int IDDevice;//id slave
int enable;
int pwmVal;
int ledT;
int power;
int temperature;
int umidity;
int pressure;
int lux;
int aperto;
int controll_var;
};
DATA_STRUCTURE myData;
void setup(){
ET.begin(details(myData), &xbee);}
void loop(){
float current = emon1.calcIrms(1480)-0.05;
float power_consumed = current*220;
myData.TYPE='S';
myData.DESTINATION=99999;
myData.IDDevice=MY_ID;
myData.enable=0;
myData.pwmVal=215;
myData.ledT=sensors.getTempCByIndex(0);
myData.power=(int)power_consumed;
myData.temperature=dht.readTemperature()*100;
myData.umidity=dht.readHumidity()*100;
myData.pressure=-1;
myData.lux=analogRead(photoresistor);
myData.aperto=1;
myData.controll_var=0;
ET.sendData();
}