heyy
I have a Project to connect a 1 master 2 slaves nrf boards to get sensor values from the two slaves to the master board
It working with the first slave but with the second dosn't work
any help!
master code
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
const int pinButton = 8;
const uint64_t pipeOut = {00};
const uint64_t pipeIn = {01};
const uint64_t pipeIn2 = {02};
RF24 radio(10, 9);
RF24 network(radio);
struct MyData {
float re;
float h;
float t;
float f;
float v;
float ds;
float h2;
float t2;
float ds2;
};
MyData data;
void setup()
{
Serial.begin(9600);
pinMode(pinButton, INPUT);
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1, pipeIn);
radio.openReadingPipe(2, pipeIn);
radio.openWritingPipe(pipeOut);
radio.startListening();
}
void loop()
{
if ( radio.available() ) {
radio.read(&data, sizeof(MyData));
Serial.print("relay: ");
Serial.print(data.re);
Serial.println(" " );
Serial.print("Humidity: " );
Serial.print(data.h);
Serial.println(" " );
Serial.print("Temperature: ");
Serial.print(data.t);
Serial.println(" " );
Serial.print("flow rate: ");
Serial.print(data.f);
Serial.println(" " );
Serial.print("volume: ");
Serial.print(data.v);
Serial.println(" " );
Serial.print("external temp: ");
Serial.print(data.ds);
Serial.println(" " );
Serial.println(" " );
Serial.print("external temp 2: ");
Serial.print(data.ds2);
Serial.println(" " );
Serial.print("Humidity 2: " );
Serial.print(data.h2);
Serial.println(" " );
Serial.print("Temperature 2: ");
Serial.print(data.t2);
Serial.println(" " );
Serial.println(" " );
radio.read(&data, sizeof(MyData));
delay (5000);
}
}
slave code
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
int dataToSend = 6;
#include "DHT.h"
const byte address[5] = "00001";
const uint64_t pipeIn = 00;
const uint64_t pipeOut = 01;
const int pinButton = 8;
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
#include <DS18B20.h>
DS18B20 ds(3);
#include <FlowMeter.h>
FlowMeter Meter = FlowMeter(2);
const unsigned long period = 1000;
void MeterISR() {
Meter.count();
}
RF24 radio(10, 9); // CN and CSN pins of nrf
RF24 network(radio);
struct MyData {
float re;
float h;
float t;
float f;
float v;
float ds;
};
MyData data;
void setup()
{
lcd.init();
lcd.backlight();
Serial.print("Devices: ");
Serial.println(ds.getNumberOfDevices());
Serial.println();
Serial.begin(9600);
dht.begin();
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
dht.humidity().getSensor(&sensor);
Serial.println(F("Humidity Sensor"));
Serial.print (F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print (F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print (F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print (F("Max Value: ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print (F("Min Value: ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print (F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("------------------------------------"));
if (isnan(data.h) || isnan(data.t)){
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
delayMS = sensor.min_delay / 1000;
attachInterrupt(INT0, MeterISR, RISING);
Meter.reset();
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1, pipeIn);
radio.openWritingPipe(pipeOut);
radio.stopListening();
pinMode(pinButton, INPUT);
//lcd.println("Receiver ");
}
void loop()
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while (ds.selectNext()) {
switch (ds.getFamilyCode()) {
case MODEL_DS18S20:
Serial.println("Model: DS18S20/DS1820");
break;
case MODEL_DS1822:
Serial.println("Model: DS1822");
break;
case MODEL_DS18B20:
Serial.println("Mode2: DS18B20");
break;
default:
Serial.println("Unrecognized Device");
break;
}
uint8_t address[8];
ds.getAddress(address);
Serial.print("Address:");
for (uint8_t i = 0; i < 8; i++) {
Serial.print(" ");
Serial.print(address[i]);
}
Serial.println();
Serial.print("Resolution: ");
Serial.println(ds.getResolution());
Serial.print("Power Mode: ");
if (ds.getPowerMode()) {
Serial.println("External");
} else {
Serial.println("Parasite");
}
Serial.print("Temperature: ");
Serial.print(ds.getTempC());
data.ds = ds.getTempC();
Serial.print(" C / ");
lcd.setCursor(0,2);
lcd.print(ds.getTempC());
lcd.setCursor(6,2);
lcd.print("C");
}
delay(2000);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
delay(delayMS);
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
lcd.setCursor(3,0);
lcd.print(F("Error reading temperature!"));
}
else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
lcd.setCursor(0,0);
lcd.print(F("Temp:"));
lcd.print(event.temperature);
data.t = event.temperature;
lcd.print(F("°C"));
}
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humi:"));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
lcd.setCursor(0,1);
lcd.print(F("Humidity: "));
lcd.print(event.relative_humidity);
data.h = event.relative_humidity;
lcd.print(F("%"));
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
delay(period);
Meter.tick(period);
Serial.println("Currently " + String(Meter.getCurrentFlowrate()));
data.f = Meter.getCurrentFlowrate();
Serial.println ( " l/min, " + String(Meter.getTotalVolume()));
data.v = Meter.getTotalVolume();
Serial.println (" l total.");
lcd.setCursor(0,3);
lcd.print("Currently " + String(Meter.getCurrentFlowrate()));
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
radio.write(&data, sizeof(MyData));
radio.write( &dataToSend, sizeof(dataToSend) );
data.re = digitalRead(pinButton);
Serial.print("relay: ");
Serial.print(data.re);
Serial.println(" " );
Serial.print("Humidity: " );
Serial.print(data.h);
Serial.println(" " );
Serial.print("Temperature: ");
Serial.print(data.t);
Serial.println(" " );
Serial.print("flow rate: ");
Serial.print(data.f);
Serial.println(" " );
Serial.print("volume: ");
Serial.print(data.v);
Serial.println(" " );
Serial.print("external temp: ");
Serial.print(data.ds);
Serial.println(" " );
}