Orefatoi
/
afero_poc15_171201
POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel
Diff: edge_sensor/edge_accel.cpp
- Revision:
- 0:f0de320e23ac
- Child:
- 8:5590f55bdf41
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/edge_sensor/edge_accel.cpp Fri Dec 01 06:16:31 2017 +0000 @@ -0,0 +1,108 @@ +#include "mbed.h" +#include "afLib.h" +#include "edge_sensor.h" +#include "edge_accel.h" +#include "MMA8451Q.h" + +edge_accel::edge_accel(MMA8451Q *accel) : edge_sensor() +{ + _accel = accel ; + _sample_count = 0 ; + _accumulation = 0 ; + _prev_x = 0 ; + _prev_y = 0 ; + _prev_z = 0 ; + + _interval = 10 ; +} + +edge_accel::~edge_accel(void) +{ + delete _accel ; +} + +void edge_accel::reset(void) +{ + clear_value() ; + edge_sensor::reset() ; +} + +void edge_accel::prepare(void) +{ +// printf("accel prepare\n") ; +} + +void edge_accel::sample(void) +{ +// printf("accel sample\n") ; +} + +int edge_accel::deliver(void) +{ + int result ; + float value ; + print_time(_sampled_time) ; + value = get_value() ; + printf(" accel = %.3f [%d samples]\n", value, _sample_count) ; + sprintf(_str_buf, + "{\"DEVICE\":\"ACCEL\",\"PN\":\"MMA8451Q\",\"VAL_X\":\"%.3f\",\"VAL_Y\":\"0\",\"VAL_Z\":\"0\",\"UNIT\":\"g\",\"S\":\"%06d\",\"E\":\"%d\"}", + value, time2seq(_sampled_time), _error_count) ; + result = afero->setAttribute(1, _str_buf) ; + if (result == afSUCCESS) { + clear_value() ; + } + return( result == afSUCCESS ) ; +} + +int edge_accel::accum(void) +{ + int16_t value[3] ; + + if (_enable) { + _accel->getAllRawData(value) ; + + _sample_count++ ; + + _accumulation += + abs(_prev_x - value[0]) + + abs(_prev_y - value[1]) + + abs(_prev_z - value[2]) ; + + _prev_x = value[0] ; + _prev_y = value[1] ; + _prev_z = value[2] ; + } + + return( _sample_count ) ; +} + +void edge_accel::clear_value(void) +{ + _sample_count = 0 ; + _accumulation = 0 ; + _prev_x = 0 ; + _prev_y = 0 ; + _prev_z = 0 ; +} + +float edge_accel::get_value(void) +{ + float result = 0.0 ; + if (_sample_count > 0) { + result = (float)_accumulation / (float)_sample_count ; + } + _sampled_time = edge_time ; + return( result / 4096.0 ) ; +} + +void edge_accel::send_config(void) +{ + afero->setAttributeBool(100, true) ; /* accel present */ + afero->setAttributeBool(101, true) ; /* accel enable */ +} + +void edge_accel::recv_config(void) +{ +} + + \ No newline at end of file