sensore di pioggia e nRF24L01+

Finalmente dopo aver sbattuto la testa per bene e dopo mille tentativi sono riuscito a far comunicare due arduino con un nRF24L01+. Fin ad ora sono riuscito a far leggere un arduino con un dht11 temp ed umidità, e far comunicare i risultati sull’altro arduino. Però ho un problema con un sensore di pioggia; non riesco a mandare i due dati digitali(0 ed 1) ad l’altro arduino, ci ho provato in qualsiasi modo.
Questi sono gli sketch.

Arduino che invia

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <DHT11.h>
int pinIngresso=2;
int pin = A0;

DHT11 dht11(pin);
float temperature[3];

double Fahrenheit(double celsius) {
return ((double)(9 / 5) * celsius) + 32;
}

double Kelvin(double celsius) {
return celsius + 273.15;
}

RF24 myRadio(7, 8);
byte addresses[][6] = {"1Node"}; // Create address for 1 pipe.
int dataTransmitted;  // Data that will be Transmitted from the transmitter


void setup() {
Serial.begin(115200); 
 delay(1000);
  pinMode(pinIngresso, INPUT);
 myRadio.begin();
dataTransmitted = 100; // Arbitrary known data to transmit. Change it to test...
   // Start up the physical nRF24L01 Radio
  myRadio.setChannel(108);  // Above most Wifi Channels
  // Set the PA Level low to prevent power supply related issues since this is a
  // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
  myRadio.setPALevel(RF24_PA_MIN);
  //  myRadio.setPALevel(RF24_PA_MAX);  // Uncomment for more power

  myRadio.openWritingPipe( addresses[0]); // Use the first entry in array 'addresses' (Only 1 right now)
  delay(1000);
}
int pio=0;
void loop()
{
float temp, humi;
pio = digitalRead(pinIngresso);
dht11.read(humi, temp);
temperature[0] = temp;
temperature[1] = humi;
temperature[2] = pio;
myRadio.write(temperature, sizeof(temperature));
delay(1000);
}

Arduino che riceve

#include <Wire.h>
#include <DHT11.h>

#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

LiquidCrystal_I2C lcd(0x3F, 16,2);
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity

float temperature[2];
RF24 myRadio (7, 8);
byte addresses[][6] = {"1Node"}; // Create address for 1 pipe.
int dataReceived; 
int pio=0;
void setup() {
Serial.begin(115200); 
delay(1000);
myRadio.begin();  // Start up the physical nRF24L01 Radio
  myRadio.setChannel(108);  // Above most Wifi Channels
  // Set the PA Level low to prevent power supply related issues since this is a
  // getting_started sketch, and the likelihood of close proximity of the devices. RF24_PA_MAX is default.
  myRadio.setPALevel(RF24_PA_MIN);
  //  myRadio.setPALevel(RF24_PA_MAX);  // Uncomment for more power

  myRadio.openReadingPipe(1, addresses[0]); // Use the first entry in array 'addresses' (Only 1 right now)
  myRadio.startListening();
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print("Umid & temp");
delay(1000);
lcd.clear();
lcd.print("Start.....");
delay(1000);
}

void loop(void)
{
  if ( myRadio.available()) // Check for incoming data from transmitter
  {
    while (myRadio.available())  // While there is data ready
    {
      myRadio.read(temperature, sizeof(temperature)); // Get the data payload (You must have defined that already!)
    }



   
{

lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("T");
lcd.setCursor(0, 1);
lcd.print("U");
lcd.setCursor(2, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(2, 1);
lcd.print(temperature[1]);
lcd.print(" %");
piogg();
delay(5000);
}
}
}
void piogg(){
if (temperature[1]==1);
lcd.clear();
lcd.setCursor(0, 7);

lcd.print(" piove");
delay(2000);
}

Ripero che il mio unico problema è quando il sensore di pioggia rileva acqua e quindi si attiva di far apparire sul display la scritta “PIOGGIA”.

Ciao

Arduino che invia:

float temperature[3];
...
temperature[2] = pio;

Arduino che riceve:

float temperature[2];
...
if (temperature[1]==1);
lcd.clear();
lcd.setCursor(0, 7);

lcd.print(" piove");
delay(2000);...

"Piove" ha una crisi di identità: non sa se è il secondo o il terzo valore dell'array.

Tra l'altro metti un int in un array di float; non sono sicuro che funzioni.

Ciao Pippo72

Ciao pippo, inanzitutto grazie per la risposta.

In effetti sono due errori stupidi, ma corregendoli mi esce solo la scritta piove, senza temperatura ed umi.

Sballatissima la funzione piogg() Un if con alla fine ; è come se non esistesse.

if(temperature[2]==1)
{ lcd.clear(); 
  lcd.setCursor(0,7);
  lcd.print(" piove");
}

Inoltre se spedisci il pio in elemento 2 perchè poi lo cerchi nell'1 ?? Spedizione:

temperature[0] = temp;
temperature[1] = humi;
temperature[2] = pio;

Errori proprio banali :confused:

Grazie :D