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

Committer:
Overdrivr
Date:
2016-02-11
Revision:
0:d38b884af46a
Child:
1:b63db8e76533

File content as of revision 0:d38b884af46a:

#include "mbed.h"
#include "telemetry/driver.hpp"
#include "tsi_sensor.h"
#include "MMA8451Q.h"
 
#define MMA8451_I2C_ADDRESS (0x1d<<1)

DigitalOut led(LED1);

struct TM_state {
  float throttle;  
};

void process(TM_state* state, TM_msg* msg);

int main()
{   
    // Instance the structure holding our application tuning parameters
    TM_state state;
    state.throttle = 0;
    
    // Instance Telemetry
    Telemetry TM(&state);
    // Connect our process function
    TM.sub(process);
    
    // Some sensors to read
    TSIAnalogSlider tsi(PTB16,PTB17,40);
    MMA8451Q acc(PTE25, PTE24);
    
    led = 1;
    
    Timer tm_timer;
    Timer print_timer;
    Timer led_timer;
    
    tm_timer.start();
    print_timer.start();
    
    for(;;)
    {       
        // update telemetry
        if(tm_timer.read_ms() > 50)
        {
            tm_timer.reset();
            TM.update();   
        }
        
       
        // publish accelerometer data
        if(print_timer.read_ms() > 50)
        {
            print_timer.reset();
            TM.pub_f32("touch",tsi.readPercentage());
            
            int16_t axis[3];
            acc.getAccAllAxis(axis);
            
            TM.pub_i16("acc:x",axis[0]);
            TM.pub_i16("acc:y",axis[1]);
            TM.pub_i16("acc:z",axis[2]);
            
            TM.pub_f32("throttle",state.throttle);
            
        }
        
        if(led_timer.read_ms() > 500)
        {
            led_timer.reset();
            led = (led == 0) ? 1 : 0;  
        }
    }
}

void process(TM_state* state, TM_msg* msg)
{
    float value = 0.f;
    
    // If the received frame topic matches "throttle"
    if(strcmp(msg->topic,"throttle") == 0)
    {
        // If the payload type matches float32
        if(emplace_f32(msg,&value))
        {
            state->throttle = value; 
        }
    }
}