Okay Ragazzi, alla fine ho trovato una soluzione che funziona benino nonostante i dati del trasmettitore 1 non vengono stampati immediatamente sul display, impiegando anche piú di un'ora. Ovviamente il problema è che non ho idea di cosa ho copiato e di come funziona. Questa soluzione l'ho trovata su questo forum.
Potreste aiutarmi a capire un pó tutto? Ad esempio, questo passaggio a cosa serve?
int address = 0x28; // 28 is the address
byte byte1, byte2, byte3, byte4;
Allego anche gli sketch completi nel caso vogliate darmi qualche indicazione su come migliorarli nella forma, o nel caso possano essere utili a qualche utente ai primi passi come me.
Trasmettitore 1
int address = 0x28; // 28 is the address
byte byte1, byte2, byte3, byte4;
struct dataStruct {
float t1;
float h1;
} transmitter1_data;
unsigned char ADDRESS1[5] =
{
0xb2, 0x43, 0x88, 0x99, 0x45
}; // Define a static TX address
//just change b1 to b2 or b3 to send to other pip on resciever
void setup()
{
printf_begin();
radio.setRetries(13, 15);
radio.enableDynamicPayloads();
radio.setDataRate(RF24_1MBPS); //set datarate to 250kbps 2MBPS 1MBPS
radio.openWritingPipe(ADDRESS1);
radio.openReadingPipe(1, ADDRESS1);
radio.stopListening();
radio.printDetails();
}
void loop()
{
bool ok = radio.write(&transmitter1_data, sizeof(transmitter1_data));
if (ok)
{
Serial.println("Pipe 1");
Serial.println(transmitter1_data.t1);
Serial.println(transmitter1_data.h1);
}
else
{
Serial.println("it failed to send");
}
delay(5000);
}
Trasmettitore 2
int address = 0x28; // 28 is the address
byte byte1, byte2, byte3, byte4;
struct dataStruct2 {
float t5;
float h5;
} transmitter2_data;
unsigned char ADDRESS0[5] =
{
0xb0, 0x43, 0x88, 0x99, 0x45
}; // Define a static TX address
//just change b1 to b2 or b3 to send to other pip on resciever
void setup()
{
printf_begin();
radio.setRetries(15, 15);
radio.enableDynamicPayloads();
radio.setDataRate(RF24_1MBPS); //set datarate to 250kbps 2MBPS 1MBPS
radio.openWritingPipe(ADDRESS0);
radio.openReadingPipe(0, ADDRESS0);
radio.stopListening();
radio.printDetails();
}
void loop()
{
transmitter2_data.h5 = dht5.readHumidity();
transmitter2_data.t5 = dht5.readTemperature();
bool ok = radio.write(&transmitter2_data, sizeof(transmitter2_data));
if (ok)
{
Serial.println("Pipe 2");
Serial.println(transmitter2_data.t5, 0);
Serial.println(transmitter2_data.h5, 0);
delay(6000);
}
else
{
Serial.println("it failed to send");
delay(5000);
}
}
Ricevitore
#define PLOAD_WIDTH 32 // 32 unsigned chars TX payload
byte pip;
byte pload_width_now;
byte newdata;
unsigned char rx_buf[PLOAD_WIDTH] = {0};
struct dataStruct {
float t1;
float h1;
} transmitter1_data;
struct dataStruct2 {
float t5;
float h5;
} transmitter2_data;
unsigned char ADDRESS1[5] =
{
0xb2, 0x43, 0x88, 0x99, 0x45
}; // trasmettitore 1
unsigned char ADDRESS0[5] =
{
0xb0, 0x43, 0x88, 0x99, 0x45
}; // trasmettitore 2
void setup()
{
radio.begin();
printf_begin();
radio.setDataRate(RF24_1MBPS); //set datarate to 250kbps 2MBPS 1MBPS
radio.enableDynamicPayloads();
radio.openWritingPipe(ADDRESS0);
radio.openWritingPipe(ADDRESS1);
radio.openReadingPipe(0, ADDRESS0);
radio.openReadingPipe(1, ADDRESS1);
radio.startListening();
radio.printDetails();
delay(5000);
}
void loop()
{
if ( radio.available(&pip) )
{
// Fetch the payload, and see if this was the last one.
pload_width_now = radio.getDynamicPayloadSize();
// If a corrupt dynamic payload is received, it will be flushed
if (!pload_width_now) {
}
else
{
radio.read( rx_buf, pload_width_now );
newdata = 1;
// Spew it
Serial.print(F("Data on pip= "));
Serial.print(pip);
Serial.print(F(" Got data size="));
Serial.print(pload_width_now);
Serial.print(F(" data="));
for (byte i = 0; i < pload_width_now; i++)
{
Serial.print(" ");
Serial.print(rx_buf[i]); // print rx_buf
}
Serial.print(" ");
}
}
if (newdata == 1)
{
newdata = 0;
if (pip == 0 && pload_width_now == sizeof(transmitter2_data))
{
memcpy(&transmitter2_data, rx_buf, sizeof(transmitter2_data));
Serial.println("");
Serial.println("");
Serial.print(" Temp5p ");
Serial.println(transmitter2_data.t5, 0);
Serial.print(" Umi 5p ");
Serial.println(transmitter2_data.h5, 0);
}
Serial.println("");
if (pip == 1 && pload_width_now == sizeof(transmitter1_data))
{
memcpy(&transmitter1_data, rx_buf, sizeof(transmitter1_data));
Serial.println("");
Serial.println("");
Serial.print(" Temp1p ");
Serial.println(transmitter1_data.t1, 0);
Serial.print(" Umi 1p ");
Serial.println(transmitter1_data.h1, 0);
}
delay(5000);
}
}
trasmettitore_1.ino (4.3 KB) trasmettitore_2.ino (2.3 KB) ricevitore_con_display.ino (11.0 KB)