
#ifndef Sensores_define
#define Sensores_define 1
#include "Utiles.h"
#include <SimpleDHT.h>
#include <SPI.h>

#include <Adafruit_Sensor.h>
#include "Adafruit_BMP3XX.h"
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>

#define TIMER_DHT (2000) //lee el sensor DHT cada 2 seg
#define TRIES_DHT (5)
#define WAIT_TRIES_DHT (20) //20 mseg
/*
   Clase para manejo del sensor de Temperatura y Humedad
*/

class SensorDht
{
    SimpleDHT22 StaticSimpleDHT;
    float t, h;
    unsigned long tt;
    int pindht;
    //Función que realiza las llamadas necesarias para leer valores del sensor
    void process();


  public:
    //Inicializa el sensor
    SensorDht(int pinSensor);

    //Devuelve el valor de Humedad
    float GetH();
    //Devuelve el valor de Temperatura
    float GetT();

};

#define SEALEVELPRESSURE_HPA (1013.25)
#define TIMER_BMP 2000 //lee el sensor DHT cada 2 seg

/*
   Clase para manejo de sensor de Presión, temperatura y altitud
*/
class SensorBMP
{
    Adafruit_BMP3XX bmp;
    float p, a, t;
    unsigned long tt;


    //Función que realiza las llamadas necesarias para leer valores del sensor
    void process();

  public:
    //Inicializa el sensor
    SensorBMP(int pin_sck_bmp, int pin_miso_bmp, int pin_mosi_bmp, int pin_cs_bmp );

    //Devuelve el valor de Presion
    float GetP();
    //Devuelve el valor de Temperatura
    float GetT();
    //Devuelve el valor de Altitud
    float GetA();
};

#define TIMER_ACELER  2000 //lee el sensor dada 2 seg
#define ACCELE_SCALE 2
/*
   Clase para manejo de acelerómetro
*/
class SensorAcelerometro
{
  public:
    unsigned long tt;

    Adafruit_LSM303_Accel_Unified accel;
    Adafruit_LSM303_Mag_Unified mag;
  public:
    sensors_event_t event_a; /* Display the results (acceleration is measured in m/s^2) */
    sensors_event_t event_m;/* Display the results (magnetic vector values are in micro-Tesla (uT)) */

    SensorAcelerometro();

    bool Init();

  private:
    void process();

  public:
    float GetAx();//m/s^2
    float GetAy();//m/s^2
    float GetAz();//m/s^2
    float GetMx();//Gauss

    float GetMy();//Gauss

    float GetMz();//Gauss


};
#endif
