A demo on NXP KL25Z of the telemetry library to publish some sensor data that can be read/plotted on the computer using pytelemetrycli (https://github.com/Overdrivr/pytelemetrycli) Published data: "touch" -> capacitive slider output value "acc:x" -> x channel of the accelerometer "acc:y" -> y channel "acc:z" -> z channel
Dependencies: BufferedSerial MMA8451Q mbed telemetry tsi_sensor
main.cpp@0:d38b884af46a, 2016-02-11 (annotated)
- Committer:
- Overdrivr
- Date:
- Thu Feb 11 08:59:40 2016 +0000
- Revision:
- 0:d38b884af46a
- Child:
- 1:b63db8e76533
demo of the telemetry library on NXP KL25Z that publishes the capacitive slider value and the accelerometer XYZ values
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Overdrivr | 0:d38b884af46a | 1 | #include "mbed.h" |
Overdrivr | 0:d38b884af46a | 2 | #include "telemetry/driver.hpp" |
Overdrivr | 0:d38b884af46a | 3 | #include "tsi_sensor.h" |
Overdrivr | 0:d38b884af46a | 4 | #include "MMA8451Q.h" |
Overdrivr | 0:d38b884af46a | 5 | |
Overdrivr | 0:d38b884af46a | 6 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
Overdrivr | 0:d38b884af46a | 7 | |
Overdrivr | 0:d38b884af46a | 8 | DigitalOut led(LED1); |
Overdrivr | 0:d38b884af46a | 9 | |
Overdrivr | 0:d38b884af46a | 10 | struct TM_state { |
Overdrivr | 0:d38b884af46a | 11 | float throttle; |
Overdrivr | 0:d38b884af46a | 12 | }; |
Overdrivr | 0:d38b884af46a | 13 | |
Overdrivr | 0:d38b884af46a | 14 | void process(TM_state* state, TM_msg* msg); |
Overdrivr | 0:d38b884af46a | 15 | |
Overdrivr | 0:d38b884af46a | 16 | int main() |
Overdrivr | 0:d38b884af46a | 17 | { |
Overdrivr | 0:d38b884af46a | 18 | // Instance the structure holding our application tuning parameters |
Overdrivr | 0:d38b884af46a | 19 | TM_state state; |
Overdrivr | 0:d38b884af46a | 20 | state.throttle = 0; |
Overdrivr | 0:d38b884af46a | 21 | |
Overdrivr | 0:d38b884af46a | 22 | // Instance Telemetry |
Overdrivr | 0:d38b884af46a | 23 | Telemetry TM(&state); |
Overdrivr | 0:d38b884af46a | 24 | // Connect our process function |
Overdrivr | 0:d38b884af46a | 25 | TM.sub(process); |
Overdrivr | 0:d38b884af46a | 26 | |
Overdrivr | 0:d38b884af46a | 27 | // Some sensors to read |
Overdrivr | 0:d38b884af46a | 28 | TSIAnalogSlider tsi(PTB16,PTB17,40); |
Overdrivr | 0:d38b884af46a | 29 | MMA8451Q acc(PTE25, PTE24); |
Overdrivr | 0:d38b884af46a | 30 | |
Overdrivr | 0:d38b884af46a | 31 | led = 1; |
Overdrivr | 0:d38b884af46a | 32 | |
Overdrivr | 0:d38b884af46a | 33 | Timer tm_timer; |
Overdrivr | 0:d38b884af46a | 34 | Timer print_timer; |
Overdrivr | 0:d38b884af46a | 35 | Timer led_timer; |
Overdrivr | 0:d38b884af46a | 36 | |
Overdrivr | 0:d38b884af46a | 37 | tm_timer.start(); |
Overdrivr | 0:d38b884af46a | 38 | print_timer.start(); |
Overdrivr | 0:d38b884af46a | 39 | |
Overdrivr | 0:d38b884af46a | 40 | for(;;) |
Overdrivr | 0:d38b884af46a | 41 | { |
Overdrivr | 0:d38b884af46a | 42 | // update telemetry |
Overdrivr | 0:d38b884af46a | 43 | if(tm_timer.read_ms() > 50) |
Overdrivr | 0:d38b884af46a | 44 | { |
Overdrivr | 0:d38b884af46a | 45 | tm_timer.reset(); |
Overdrivr | 0:d38b884af46a | 46 | TM.update(); |
Overdrivr | 0:d38b884af46a | 47 | } |
Overdrivr | 0:d38b884af46a | 48 | |
Overdrivr | 0:d38b884af46a | 49 | |
Overdrivr | 0:d38b884af46a | 50 | // publish accelerometer data |
Overdrivr | 0:d38b884af46a | 51 | if(print_timer.read_ms() > 50) |
Overdrivr | 0:d38b884af46a | 52 | { |
Overdrivr | 0:d38b884af46a | 53 | print_timer.reset(); |
Overdrivr | 0:d38b884af46a | 54 | TM.pub_f32("touch",tsi.readPercentage()); |
Overdrivr | 0:d38b884af46a | 55 | |
Overdrivr | 0:d38b884af46a | 56 | int16_t axis[3]; |
Overdrivr | 0:d38b884af46a | 57 | acc.getAccAllAxis(axis); |
Overdrivr | 0:d38b884af46a | 58 | |
Overdrivr | 0:d38b884af46a | 59 | TM.pub_i16("acc:x",axis[0]); |
Overdrivr | 0:d38b884af46a | 60 | TM.pub_i16("acc:y",axis[1]); |
Overdrivr | 0:d38b884af46a | 61 | TM.pub_i16("acc:z",axis[2]); |
Overdrivr | 0:d38b884af46a | 62 | |
Overdrivr | 0:d38b884af46a | 63 | TM.pub_f32("throttle",state.throttle); |
Overdrivr | 0:d38b884af46a | 64 | |
Overdrivr | 0:d38b884af46a | 65 | } |
Overdrivr | 0:d38b884af46a | 66 | |
Overdrivr | 0:d38b884af46a | 67 | if(led_timer.read_ms() > 500) |
Overdrivr | 0:d38b884af46a | 68 | { |
Overdrivr | 0:d38b884af46a | 69 | led_timer.reset(); |
Overdrivr | 0:d38b884af46a | 70 | led = (led == 0) ? 1 : 0; |
Overdrivr | 0:d38b884af46a | 71 | } |
Overdrivr | 0:d38b884af46a | 72 | } |
Overdrivr | 0:d38b884af46a | 73 | } |
Overdrivr | 0:d38b884af46a | 74 | |
Overdrivr | 0:d38b884af46a | 75 | void process(TM_state* state, TM_msg* msg) |
Overdrivr | 0:d38b884af46a | 76 | { |
Overdrivr | 0:d38b884af46a | 77 | float value = 0.f; |
Overdrivr | 0:d38b884af46a | 78 | |
Overdrivr | 0:d38b884af46a | 79 | // If the received frame topic matches "throttle" |
Overdrivr | 0:d38b884af46a | 80 | if(strcmp(msg->topic,"throttle") == 0) |
Overdrivr | 0:d38b884af46a | 81 | { |
Overdrivr | 0:d38b884af46a | 82 | // If the payload type matches float32 |
Overdrivr | 0:d38b884af46a | 83 | if(emplace_f32(msg,&value)) |
Overdrivr | 0:d38b884af46a | 84 | { |
Overdrivr | 0:d38b884af46a | 85 | state->throttle = value; |
Overdrivr | 0:d38b884af46a | 86 | } |
Overdrivr | 0:d38b884af46a | 87 | } |
Overdrivr | 0:d38b884af46a | 88 | } |