simple data logger
Dependencies: Buffer MMA8451Q mbed-rtos mbed
logger.cpp
- Committer:
- jhestolano
- Date:
- 2013-06-04
- Revision:
- 0:93d648fde6cf
File content as of revision 0:93d648fde6cf:
#include "logger.h"
Logger::Logger(PinName tx, PinName rx) :
port(tx, rx),
redLed(LED_RED),
blueLed(LED_BLUE),
greenLed(LED_GREEN),
acc(PTE25, PTE24, MMA8451Q_I2C_ADDRESS),
//tx_th(tx_thread, (void*)this),
data_th(this->data_thread, (void*)this),
led_th(this->led_thread, (void*)&blueLed),
acc_x(BUF_SIZE)
{
redLed = 1; blueLed = 1; greenLed = 1;
msg = 0;
newMsg = false;
port.baud(BAUD_115200);
port.attach(this, &Logger::rcv_isr, Serial::RxIrq);
}
/* Rutina de interrupción para recibir datos del servidor */
/* Funciona! */
void Logger::rcv_isr()
{
msg = UART0->D; // Leer UART0 para desactivar bandera de interrupción.
while(UART0->S1 & UART_S1_RDRF_MASK); // Esperar a UART0 listo.
newMsg = true;
//redLed = !redLed;
}
/* Thread para adquisicion de datos de los sensores */
/* Funciona */
void Logger::data_thread(const void* args)
{
Logger* log = (Logger*)args;
float temp[3];
//Buffer<float> buf_x(BUF_SIZE); Buffer<float> buf_y(BUF_SIZE); Buffer<float> buf_z(BUF_SIZE);
while(true)
{
log->led_th.signal_set(LED_SIGNAL);
log->acc.getAccAllAxis(temp);
log->acc_x.put(temp[0]);
//buf_x.put(temp[0]); buf_y.put(temp[1]); buf_z.put(temp[2]);
//log->port.printf("a[x]: %f, a[y]: %f, a[z]: %f\n\r", temp[0], temp[1], temp[2]);
log->port.printf("a[x}: %f\n\r", log->acc_x.get());
Thread::wait(SAMPLE_RATE);
}
}
void Logger::led_thread(const void* args)
{
DigitalOut* led = (DigitalOut*)args;
while(true)
{
Thread::signal_wait(LED_SIGNAL);
*led = !(*led);
}
}
/* Thread para el envio de datos al servidor */
//void Logger::tx_thread(const void* args) {}
/* Destructor */
Logger::~Logger()
{
}