//////////////////////////////////////////////// BRANCHEMENT ///////////////////////////////////////////////////////
// La led RGB                                      // La sonde DHT22                            // Le bouton      //
//                                                 //                                           //                //
// Broche 3 : La broche Rouge de la LED RGB        //  Broche 2 : pin data de la sonde          // Broche 4       //
// Broche 5 : La broche Vert de la LED RGB         //  Avec une resistance de 4.7k              // Et au -        //
// Broche 6 : La broche Bleu de la LED RGB         //  entre le + et la pin data de la sonde    //                //
//                                                 //                                           //                //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// import des librairies
#include <SPI.h>
#include <RF24.h>
#include "DHT.h"

// on definie les pins du nrf24l01
RF24 radio(7,8);

// on definie la sonde sur le pin 2
DHT dht(2DHT22);  

// on definie quelques variables et constante

charpourcent "%"

const int R=1;
const int V=1;
const int B=1;

//On défini le bouton
const int  buttonPin 4;    

int buttonState 0;         // état du bouton est a 0
int lastButtonState 0;     // l'ancien état est a 0

//les leds
const int ledRouge=3// Constante pour la broche 3
const int ledVert=5// Constante pour la broche 5
const int ledBleu=6// Constante pour la broche 6


void setup()   {
 pinMode(buttonPinINPUT_PULLUP); // le bouton en input pullup
 pinMode (ledVert,OUTPUT); // Broche ledVert configurée en sortie
 pinMode (ledRouge,OUTPUT); // Broche ledRouge configurée en sortie
 pinMode (ledBleu,OUTPUT); // Broche ledBleu configurée en sortie

 radio.begin(); // on init le module nrf24l01
 radio.openWritingPipe(0x1111111111); // on defini le channel
 dht.begin();    // on init la sonde
 Serial.begin(9600); // on init la com serie de l'arduino
 Serial.println("Prêt ... ");  // on écrit dans le port serie de l'arduino qu'on est prêt
}

void loop() {
  // lit l'état du bouton 
  buttonState digitalRead(buttonPin);

  // compare avec l'état précédant
  if (buttonState != lastButtonState) {
    // si l'etat du bouton est a 1 (bouton relâché) on ecrit off dans la com serie et rien d 'autre
    if (buttonState == HIGH) {
      Serial.println("off");
    else {
      // si l'état du bouton est a 0 (bouton enclenché) on écrit on dans la com série et lance la fonction "sonde"      
      Serial.println("on");    
      sonde();     
    }
    // Delay pour la sensibilité du bouton 
    delay(50);
  }
  // sauve l'état du bouton pour la réinitialiser la boucle  
  lastButtonState buttonState;

}


void sonde()
{    
    // on defini les variables qu'on va envoyer
    char outBuffer[32]= ""// 32 bytes maximum 
    char floatBuf1[10];
    char floatBuf2[10];
    
    // lecture de la sonde
    float dht.readHumidity(); 
    float dht.readTemperature();
    
    // convertion float en string
    dtostrf(h62floatBuf1);  
    dtostrf(t62floatBuf2);
    
    // ecriture du buffer en string
    sprintf(outBuffer,"Temp=%s °C et Humi=%s %s"floatBuf2floatBuf1pourcent); 
    
    //alimente le module nrf24l01+ 
    radio.powerUp();      
    
    // transmition du buffer vers le raspberry
    radio.write(outBufferstrlen(outBuffer));  
    
    
    //arrêt de l’alimentation du module nrf24l01+ 
    radio.powerDown(); 
              
    //communication avec le port serie de l'arduino. 
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.print(" *C");
    Serial.print(" et ");
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.println(" %\t");    

    // allume une couleur en fonction de la température

    if (>= 30) {
      //---- rouge ---
      digitalWrite(ledRouge,HIGH); // allume la couleur voulue      
      delay(2000); // pause
      digitalWrite(ledRouge,LOW); // éteint la couleur voulue
    }
    
    else if 22 30) {
      //---- vert ---
      digitalWrite(ledVert,HIGH); // allume la couleur voulue
      delay(2000); // pause
      digitalWrite(ledVert,LOW); // éteint la couleur voulue      
    }

    else if <= 22) {
      //---- bleu ---
      digitalWrite(ledBleu,HIGH); // allume la couleur voulue
      delay(2000); // pause
      digitalWrite(ledBleu,LOW); // éteint la couleur voulue
    }
}