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

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?

UserRevisionLine numberNew 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 }