Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Revision 11:8df4529f060d, committed 2018-12-10
- Comitter:
- screamer
- Date:
- Mon Dec 10 10:42:29 2018 +0000
- Parent:
- 10:b27c962b3c3f
- Child:
- 12:1f1a50e973db
- Commit message:
- Make use of the physical button and 2 sensors (temp & humidity)
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| sensors/LSM303AGR.lib | Show diff for this revision Revisions of this file |
--- 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);
--- a/sensors/LSM303AGR.lib Sat Dec 08 01:46:22 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/teams/ST/code/LSM303AGR/#652f8f67d991