pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Accelerometer.cpp Source File

Accelerometer.cpp

00001 #include "Accelerometer.hpp"
00002 
00003 namespace MaruSolSensorManager
00004 {
00005     Accelerometer::Accelerometer()
00006     {
00007         read_count = 1;
00008         acc = new MMA8451Q(
00009             (PinName)PINS::ACCELEROMETER::SDA,
00010             (PinName)PINS::ACCELEROMETER::SCL,
00011             SENSORS::MMA8451Q::ADDRESS);
00012         
00013         pAsymFIFO = new AsymFIFO();
00014         
00015         packet_prev.accelerometer.x = 0;
00016         packet_prev.accelerometer.y = 0;
00017         packet_prev.accelerometer.z = 0;
00018         
00019         read();
00020     }
00021     
00022     Accelerometer::~Accelerometer()
00023     {
00024         delete acc;
00025         acc = NULL;
00026         SERIAL_PRINT_DBG("Accelerometer inited\n");
00027     }
00028 
00029     void
00030     Accelerometer::toJSON(char *buf)
00031     {
00032         float x = packet.accelerometer.x;
00033         float y = packet.accelerometer.y;
00034         float z = packet.accelerometer.z;
00035 
00036         if(SENSORS::DELTA[SENSORS::ACCELEROMETER]==true)
00037         {
00038             x = abs(packet_prev.accelerometer.x - packet.accelerometer.x);
00039             y = abs(packet_prev.accelerometer.y - packet.accelerometer.y);
00040             z = abs(packet_prev.accelerometer.z - packet.accelerometer.z);
00041             packet_prev.accelerometer.x = packet.accelerometer.x;
00042             packet_prev.accelerometer.y = packet.accelerometer.y;
00043             packet_prev.accelerometer.z = packet.accelerometer.z;
00044         }
00045         x /= 4096;
00046         y /= 4096;
00047         z /= 4096;
00048         char* &fmt = SENSORS::MMA8451Q::JSON_FMT;
00049         sprintf( buf, fmt, x, y, z );
00050     }
00051         
00052     void
00053     Accelerometer::getBytes(uint8_t *buf)
00054     {
00055         memcpy(buf,(uint8_t*)&packet.accelerometer,sizeof(packet.accelerometer));
00056     }
00057     
00058     void
00059     Accelerometer::toBASE64(char *buf, PREFERENCES::_crc32 *crc32)
00060     {
00061         pAsymFIFO->pop((uint8_t*)buf, crc32);
00062     }
00063     
00064     void
00065     Accelerometer::go()
00066     {
00067         timeout->attach(this, &Accelerometer::read, 1);
00068         if(read_count>=(PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER]))
00069         {
00070             read_count = 1;
00071             packet.accelerometer.x = acc->getAccX()*4096;
00072             packet.accelerometer.y = acc->getAccY()*4096;
00073             packet.accelerometer.z = acc->getAccZ()*4096;
00074             RTC_GET_UTC(packet.accelerometer.timeStamp);
00075             if(PREFERENCES::FLOW_CONTROL==true)
00076             {
00077                 pAsymFIFO->push(
00078                     packet.accelerometer.timeStamp,
00079                     packet.accelerometer.x,
00080                     packet.accelerometer.y,
00081                     packet.accelerometer.z);
00082             }
00083             else
00084             {
00085                 ToDoQ::queuePut(this);
00086             }
00087         }
00088         else
00089         {
00090             ++read_count;
00091         }
00092         
00093         if(pAsymFIFO->buffed()>1)
00094         {
00095             ToDoQ::queuePut(this);
00096         }
00097         backToNOP();
00098     }
00099 };