#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "Adafruit_BME280.h"
Adafruit_BME280 bme;

//In negative degrees Celsius
float sensorOffset = 0;

RF24 radio(8, 7);

struct package {
  float temperature;
  float humidity;
};
typedef struct package Package;
Package data;

unsigned long previousSystemTime = millis();

const uint64_t baseAddr = 0xB3B4B5B600LL;

void setup() {
  //Address Selection and NRF24 Start
  //Address Selection and NRF24 Start
  for (int i = 2; i <= 6; i++) {
    pinMode(i, INPUT_PULLUP);
  }
  if (digitalRead(2) == LOW) {
    radio.begin();
    radio.setPALevel(RF24_PA_MAX);
    radio.openWritingPipe(baseAddr | 0x01);
    radio.stopListening();
  } else if (digitalRead(3) == LOW) {
    radio.begin();
    radio.setPALevel(RF24_PA_MAX);
    radio.openWritingPipe(baseAddr | 0x02);
    radio.stopListening();
  } else if (digitalRead(4) == LOW) {
    radio.begin();
    radio.setPALevel(RF24_PA_MAX);
    radio.openWritingPipe(baseAddr | 0x03);
    radio.stopListening();
  } else if (digitalRead(5) == LOW) {
    radio.begin();
    radio.setPALevel(RF24_PA_MAX);
    radio.openWritingPipe(baseAddr | 0x04);
    radio.stopListening();
  } else if (digitalRead(6) == LOW) {
    radio.begin();
    radio.setPALevel(RF24_PA_MAX);
    radio.openWritingPipe(baseAddr | 0x05);
    radio.stopListening();
  }
  //Sensor
  unsigned status;
  status = bme.begin(0x76);
}

void loop() {
  if (millis() >= previousSystemTime + 2500) {
    collectSensorData();
    sendData();
    previousSystemTime = millis();
  }
}

void collectSensorData() {
  data.temperature = (bme.readTemperature() - sensorOffset);
  data.humidity = bme.readHumidity();
}

void sendData() {
  radio.write(&data, sizeof(data));
}
