yes Spada / Mbed OS programme

WeatherStation.cpp

Committer:
loicguibert
Date:
2019-03-19
Revision:
11:dbc310addbf6
Parent:
6:5f56e551f84f
Child:
12:856286ad4cdc

File content as of revision 11:dbc310addbf6:

#include "WeatherStation.h"

// initialization of static data members
    //const int WeatherStation::m_blinkInterval = 500;
    const int WeatherStation::m_measurementInterval = 10000;

// constructor
WeatherStation::WeatherStation(IDevKit& iDevKit, Logger& logger, BLE& ble) :
    GAPPeripheral(ble, iDevKit, "Spada-Guibert", GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED, m_eventQueue, logger),
    m_iDevKit(iDevKit),
    m_logger(logger),
    //m_peripheral(ble, iDevKit, "Spada-Guibert", GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED,m_eventQueue, logger),
    m_lps25hb(m_iDevKit.getSDA(), m_iDevKit.getSCL(), m_logger),
    m_hdc1000(m_iDevKit.getSDA(), m_iDevKit.getSCL(), m_iDevKit.getDataRdy(), m_logger) {
}

void WeatherStation::start() {
  m_logger.log("WeatherStation is starting\r\n");
    
    
  // make sure that the LPW25HB device is present
  // if not log an error and return
  if (m_lps25hb.probe()) {
      m_logger.log("LPS25HB device found\r\n");    
  } else {
      m_logger.log("Device LPS25HB not found!\r\n");
      return;
  }
    
    
  // make sure that the HDC1000 device is present
  // if not log an error and return
  if (m_hdc1000.probe()) {
      m_logger.log("HDC1000 device found\r\n");   
  } else {
      m_logger.log("Device HDC1000 not found!\r\n");
      return;
  }  
  
  //Cleaning the console by the addition of a blank line
  m_logger.log("\r\n");
    
  
  // to show we're running we'll blink every m_blinkInterval milliseconds
  // the syntax used here is the following:
  //   1. the first argument represents the interval in milliseconds at which the event is executed
  //   2. the second argument represents  the address of instance of the object on which the method passed in argument 3 will be applied
  //  3. the third argument is the address of the method to be called (applied to the object passed as argument 2)
  //m_eventQueue.call_every(m_blinkInterval, &m_iDevKit, &IDevKit::toggleLed1);

  // schedule measurements every m_measurementInterval milliseconds
  // apply the same syntax as in the previous call
  // 1. the measurement interval is m_measurementInterval
  // 2. the object is the WeatherStation itself (recall how you refer to the current object in Java - the same applies in c++)
  // 3. the method to call is performMeasurements()
  // m_eventQueue.call_every(TO COMPLETED);
  
  m_eventQueue.call_every(m_measurementInterval, this, &WeatherStation::performMeasurements);
  
  // Starting the BLE peripheral
  // the syntax used here is the following:
  //  1. the first argument represents  the address of instance of the object on which the method passed in argument 3 will be applied
  //  2. the second argument is the address of the method to be called (applied to the object passed as argument 2)
    m_eventQueue.call(this, &WeatherStation::advertise);
    
  // this will not return until shutdown
  m_eventQueue.dispatch_forever(); 
}

void WeatherStation::advertise(void){
    GAPPeripheral::advertise();
}
 
void WeatherStation::performMeasurements(void) {
  m_logger.log("Performing measurements:\r\n");
  
  // get and log pressure
  m_logger.log("Pressure:      %.02f hPa\r\n", m_lps25hb.getPressure());
  
  // get and log temperature
  m_logger.log("Temperature:    %.02f C\r\n", m_hdc1000.getTemperature());
  
  // get and log humidity
  m_logger.log("Humidiy:        %.02f %%\r\n", m_hdc1000.getHumidity());
  
  // get and log the battery level
  m_logger.log("Battery:        %u mV\r\n", m_iDevKit.getBatteryLevel());
  
  //Cleaning the console by the addition of a blank line
  m_logger.log("\r\n");
  
}