POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel

Dependencies:   mbed vt100

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers edge_accel.cpp Source File

edge_accel.cpp

00001 #include "mbed.h"
00002 #include "afLib.h"
00003 #include "edge_sensor.h"
00004 #include "edge_accel.h"
00005 #include "MMA8451Q.h"
00006 
00007 edge_accel::edge_accel(MMA8451Q *accel) : edge_sensor() 
00008 {
00009     _accel = accel ;
00010     _sample_count = 0 ;
00011     _accumulation = 0 ;
00012     _prev_x = 0 ;
00013     _prev_y = 0 ;
00014     _prev_z = 0 ;
00015     
00016     _interval = 10 ;
00017 }
00018 
00019 edge_accel::~edge_accel(void)
00020 {
00021     delete _accel ;
00022 }
00023 
00024 void    edge_accel::reset(void) 
00025 {
00026     clear_value() ;
00027     edge_sensor::reset() ;
00028 }
00029 
00030 void    edge_accel::prepare(void) 
00031 {
00032 //    printf("accel prepare\n") ;
00033 }
00034 
00035 void    edge_accel::sample(void) 
00036 {
00037 //    printf("accel sample\n") ;
00038 }
00039 
00040 int    edge_accel::deliver(void) 
00041 {
00042     int result ;
00043     float value ;
00044     char timestr[16] ;
00045     print_time(_sampled_time) ;
00046     value = get_value() ;
00047     printf(" accel: %.3f [%d samples]\n", value, _sample_count) ;
00048     time2seq(_sampled_time, timestr) ;
00049     sprintf(_str_buf,
00050         "{\"DEVICE\":\"ACCEL\",\"PN\":\"MMA8451Q\",\"VAL_X\":\"%.3f\",\"VAL_Y\":\"0\",\"VAL_Z\":\"0\",\"UNIT\":\"g\",\"S\":\"%s\",\"E\":\"%d\"}",
00051         value, timestr, _error_count) ;
00052     result = afero->setAttribute(1, _str_buf) ;
00053     if (result == afSUCCESS) {
00054         clear_value() ;
00055     }
00056     return( result == afSUCCESS ) ;
00057 }
00058 
00059 int edge_accel::accum(void)
00060 {
00061     int16_t value[3] ;
00062 
00063     if (_enable) {
00064        _accel->getAllRawData(value) ;
00065             
00066         _sample_count++ ;
00067     
00068         _accumulation +=
00069               abs(_prev_x - value[0])
00070             + abs(_prev_y - value[1])
00071             + abs(_prev_z - value[2]) ;        
00072     
00073         _prev_x = value[0] ;
00074         _prev_y = value[1] ;
00075         _prev_z = value[2] ;
00076     }
00077         
00078     return( _sample_count ) ;
00079 }
00080 
00081 void edge_accel::clear_value(void)
00082 {
00083     _sample_count = 0 ;
00084     _accumulation = 0 ;
00085     _prev_x = 0 ;
00086     _prev_y = 0 ;
00087     _prev_z = 0 ;
00088 }
00089 
00090 float edge_accel::get_value(void)
00091 {
00092     float result = 0.0 ;
00093     if (_sample_count > 0) {
00094         result = (float)_accumulation / (float)_sample_count ;
00095     }
00096     _sampled_time = edge_time ;
00097     return( result / 4096.0 ) ;
00098 }
00099 
00100 void edge_accel::send_config(void)
00101 {
00102     afero->setAttributeBool(100, true) ; /* accel present */
00103     afero->setAttributeBool(101, true) ; /* accel enable */
00104 }
00105 
00106 void edge_accel::recv_config(void)
00107 {
00108 }
00109         
00110