Temperature only code for husky showcase
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Diff: main.cpp
- Revision:
- 11:8df4529f060d
- Parent:
- 10:b27c962b3c3f
- Child:
- 12:1f1a50e973db
--- a/main.cpp Sat Dec 08 01:46:22 2018 +0000 +++ b/main.cpp Mon Dec 10 10:42:29 2018 +0000 @@ -20,13 +20,13 @@ #include "simple-mbed-cloud-client.h" #include "LittleFileSystem.h" -//#define SENSORS_AND_BUTTONS +#define SENSORS_AND_BUTTONS #ifdef SENSORS_AND_BUTTONS #include "HTS221Sensor.h" #include "LPS22HBSensor.h" #include "LSM6DSLSensor.h" #include "lis3mdl_class.h" -#include "VL53L0X.h" +// #include "VL53L0X.h" static DevI2C devI2c(PB_11,PB_10); static HTS221Sensor hum_temp(&devI2c); @@ -34,9 +34,10 @@ static LSM6DSLSensor acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address static LIS3MDL magnetometer(&devI2c); static DigitalOut shutdown_pin(PC_6); -static VL53L0X range(&devI2c, &shutdown_pin, PC_7); +// static VL53L0X range(&devI2c, &shutdown_pin, PC_7); InterruptIn button(USER_BUTTON); +#define SENSORS_POLL_INTERVAL 1.0 #endif /* SENSORS_AND_BUTTONS */ // An event queue is a very useful structure to debounce information between contexts (e.g. ISR and normal threads) @@ -51,9 +52,12 @@ SlicingBlockDevice sd(bd, 0, 2*1024*1024); LittleFileSystem fs("fs", &sd); +// Default LED to use for PUT/POST +DigitalOut led(LED1); + // Declaring pointers for access to Pelion Client resources outside of main() MbedCloudClientResource *button_res; -MbedCloudClientResource *pattern_res; +MbedCloudClientResource *led_res; #ifdef SENSORS_AND_BUTTONS // Additional resources for sensor readings @@ -66,21 +70,13 @@ static const ConnectorClientEndpointInfo* endpointInfo; /** - * Button function triggered by the physical button press or by timer depending on SENSORS_AND_BUTTONS macro. - */ -void button_press() { - int v = button_res->get_value_int() + 1; - button_res->set_value(v); - printf("Button clicked %d times\n", v); -} - -/** * PUT handler * @param resource The resource that triggered the callback * @param newValue Updated value for the resource */ -void pattern_updated(MbedCloudClientResource *resource, m2m::String newValue) { +void led_put_callback(MbedCloudClientResource *resource, m2m::String newValue) { printf("PUT received, new value: %s\n", newValue.c_str()); + led = atoi(newValue.c_str()); } /** @@ -90,27 +86,18 @@ * Note that the buffer is deallocated after leaving this function, so copy it if you need it longer. * @param size Size of the body */ -void blink_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size) { - printf("POST received. Going to blink LED pattern: %s\n", pattern_res->get_value().c_str()); - - static DigitalOut augmentedLed(LED1); // LED that is used for blinking the pattern +void led_post_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size) { + printf("POST received. Going to blink LED pattern: %s\n", led_res->get_value().c_str()); + led = atoi(led_res->get_value().c_str()); +} - // Parse the pattern string, and toggle the LED in that pattern - string s = std::string(pattern_res->get_value().c_str()); - size_t i = 0; - size_t pos = s.find(':'); - while (pos != string::npos) { - wait_ms(atoi(s.substr(i, pos - i).c_str())); - augmentedLed = !augmentedLed; - - i = ++pos; - pos = s.find(':', pos); - - if (pos == string::npos) { - wait_ms(atoi(s.substr(i, s.length()).c_str())); - augmentedLed = !augmentedLed; - } - } +/** + * Button function triggered by the physical button press or by timer depending on SENSORS_AND_BUTTONS macro. + */ +void button_press() { + int v = button_res->get_value_int() + 1; + button_res->set_value(v); + printf("Button clicked %d times\n", v); } /** @@ -131,10 +118,10 @@ endpointInfo = endpoint; } -#ifdef SENSORS_AND_BUTTONS /** * Initialize sensors */ +#ifdef SENSORS_AND_BUTTONS void sensors_init() { uint8_t id; @@ -143,7 +130,7 @@ press_temp.init(NULL); acc_gyro.init(NULL); magnetometer.init(NULL); - range.init_sensor(VL53L0X_DEFAULT_ADDRESS); + // range.init_sensor(VL53L0X_DEFAULT_ADDRESS); /// Call sensors enable routines hum_temp.enable(); @@ -189,7 +176,7 @@ value1 = value2 = 0.0; press_temp.get_temperature(&value1); - press_temp.get_pressure(&value2); + // press_temp.get_pressure(&value2); printf("LPS22HB: [temp] %.2f C, [press] %.2f mbar\r\n", value1, value2); printf("Mag/Acc/Gyro readings: x, y, z\r\n"); @@ -200,16 +187,16 @@ acc_gyro.get_g_axes(axes); printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); - if (range.get_distance(&distance) == VL53L0X_ERROR_NONE) { - printf("VL53L0X [mm]: %6ld\r\n", distance); - if (endpointInfo) { - distance_res->set_value((int)distance); - } - } else { - printf("VL53L0X [mm]: --\r\n"); - } + // if (range.get_distance(&distance) == VL53L0X_ERROR_NONE) { + // printf("VL53L0X [mm]: %6ld\r\n", distance); + // if (endpointInfo) { + // distance_res->set_value((int)distance); + // } + // } else { + // printf("VL53L0X [mm]: --\r\n"); + // } - printf("\033[8A"); + printf("\033[7A"); } #endif /* SENSORS_AND_BUTTONS */ @@ -276,15 +263,6 @@ button_res->observable(true); button_res->attach_notification_callback(button_callback); - pattern_res = client.create_resource("3201/0/5853", "blink_pattern"); - pattern_res->set_value("500:500:500:500:500:500:500:500"); - pattern_res->methods(M2MMethod::GET | M2MMethod::PUT); - pattern_res->attach_put_callback(pattern_updated); - - MbedCloudClientResource *blink_res = client.create_resource("3201/0/5850", "blink_action"); - blink_res->methods(M2MMethod::POST); - blink_res->attach_post_callback(blink_callback); - #ifdef SENSORS_AND_BUTTONS // Sensor resources temperature_res = client.create_resource("3303/0/5700", "temperature"); @@ -297,12 +275,17 @@ humidity_res->methods(M2MMethod::GET); humidity_res->observable(true); - distance_res = client.create_resource("3330/0/5700", "distance"); - distance_res->set_value(0); - distance_res->methods(M2MMethod::GET); - distance_res->observable(true); + // distance_res = client.create_resource("3330/0/5700", "distance"); + // distance_res->set_value(0); + // distance_res->methods(M2MMethod::GET); + // distance_res->observable(true); #endif /* SENSORS_AND_BUTTONS */ + // led_res = client.create_resource("3201/0/5853", "led_state"); + // led_res->set_value(1); + // led_res->methods(M2MMethod::GET | M2MMethod::PUT); + // led_res->attach_put_callback(led_put_callback); + printf("Initialized Pelion Client. Registering...\n"); // Callback that fires when registering is complete @@ -314,10 +297,10 @@ // Placeholder for callback to update local resource when GET comes. // The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations #ifdef SENSORS_AND_BUTTONS - button.fall(eventQueue.event(button_press)); + button.fall(eventQueue.event(&button_press)); Ticker timer; - timer.attach(eventQueue.event(sensors_update), 3.0); + timer.attach(eventQueue.event(&sensors_update), SENSORS_POLL_INTERVAL); #else /* SENSORS_AND_BUTTONS */ Ticker timer; timer.attach(eventQueue.event(&button_press), 5.0);