Hi,
Some of the information being received from the transmitters is getting mixed. What is being displayed on the OLED seems to be the same data from different transmitters, if I unplug one of them the receiver continues to display the information for both transmitters however if I unplug both, then it displays an "error" string. Any ideas what is happening here?
Thanks.
Receiver code is below.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
float temp1, temp2;
String ID = "TP2 ";
RF24 radio(9, 10);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL};
void setup(void)
{
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1,pipes[1]);
radio.openReadingPipe(3, pipes[2]);
radio.startListening();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 20);
// Display static text
display.clearDisplay();
display.println("connecting....");
display.display();
delay(1000);
}
void loop(void)
{
display.clearDisplay();
delay(500);
if ( radio.available() )
{
delay(50);
radio.read(&temp1, sizeof(temp1));
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9, 20);
display.println(temp1);
display.display();
}
if ( radio.available() )
{
delay(50);
radio.read(&temp2, sizeof(temp2));
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9, 40);
display.println(temp2);
display.display();
}
else
{
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(9, 0);
display.println("Error");
display.display();
}
delay(1000);
}
Transmitter TX1 code below.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temp1;
RF24 radio(9, 10);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };
void setup(void) {
Serial.begin(9600);
sensors.begin();
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipes[1]);
radio.stopListening();
}
void loop(void)
{
sensors.requestTemperatures();
temp1 = sensors.getTempCByIndex(0);
radio.write(&temp1, sizeof(temp1));
delay(10);
}
Transmitter TX2 code below.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float temp2;
RF24 radio(9, 10);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL };
void setup(void) {
Serial.begin(9600);
sensors.begin();
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipes[2]);
radio.stopListening();
}
void loop(void)
{
sensors.requestTemperatures();
temp2 = sensors.getTempCByIndex(0);
radio.write(&temp2, sizeof(temp2));
delay(10);
}
Some of this is code modified from here.