Orefatoi
/
afero_poc15_171201
POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Tue Jul 12 2022 21:13:41 by 1.7.2