lib para o framework sgam

Dependencies:   MPU6050 Grove_temperature

Dependents:   example_smart-grid

Committer:
AndersonIctus
Date:
Thu Jun 06 23:54:07 2019 -0300
Revision:
5:caecc2426bbb
Parent:
4:f21aab30658a
- Mudancas para por a chamada Assincrona na LIB !!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndersonIctus 3:f998244e9f80 1 #include "mbed.h"
AndersonIctus 3:f998244e9f80 2 #include "MPU6050.h"
AndersonIctus 3:f998244e9f80 3
AndersonIctus 3:f998244e9f80 4 #include "Gyroscope.h"
AndersonIctus 3:f998244e9f80 5
AndersonIctus 3:f998244e9f80 6 #define LOG(args...) // printf(args)
AndersonIctus 3:f998244e9f80 7
AndersonIctus 5:caecc2426bbb 8 Gyroscope::Gyroscope(I2C &i2c): mpu(i2c, MPU6050_ADDRESS_AD0_LOW), timeout(10*1000) {
AndersonIctus 3:f998244e9f80 9 mpu.initialize();
AndersonIctus 3:f998244e9f80 10
AndersonIctus 5:caecc2426bbb 11 if( mpu.testConnection() ) {
AndersonIctus 5:caecc2426bbb 12 LOG("Giroscope Initialized !!\r\n");
AndersonIctus 3:f998244e9f80 13 } else {
AndersonIctus 5:caecc2426bbb 14 LOG("There's an error trying initialize the Gyroscope !!\r\n");
AndersonIctus 3:f998244e9f80 15 }
AndersonIctus 5:caecc2426bbb 16
AndersonIctus 5:caecc2426bbb 17 value = new GyroscopeData();
AndersonIctus 3:f998244e9f80 18 }
AndersonIctus 3:f998244e9f80 19
AndersonIctus 3:f998244e9f80 20 Gyroscope::~Gyroscope() {
AndersonIctus 5:caecc2426bbb 21 finalizeTask();
AndersonIctus 5:caecc2426bbb 22 value->~GyroscopeData();
AndersonIctus 5:caecc2426bbb 23 // mpu.~MPU6050();
AndersonIctus 3:f998244e9f80 24 }
AndersonIctus 3:f998244e9f80 25
AndersonIctus 3:f998244e9f80 26 void Gyroscope::getMotion(GyroscopeData* data) {
AndersonIctus 3:f998244e9f80 27 mpu.getMotion6(
AndersonIctus 3:f998244e9f80 28 &data->ax, &data->ay, &data->az,
AndersonIctus 3:f998244e9f80 29 &data->gx, &data->gy, &data->gz
AndersonIctus 3:f998244e9f80 30 );
AndersonIctus 3:f998244e9f80 31 }
AndersonIctus 3:f998244e9f80 32
AndersonIctus 4:f21aab30658a 33 GyroscopeData Gyroscope::getValue() {
AndersonIctus 5:caecc2426bbb 34 getMotion(value);
AndersonIctus 5:caecc2426bbb 35 return *(value);
AndersonIctus 5:caecc2426bbb 36 }
AndersonIctus 5:caecc2426bbb 37
AndersonIctus 5:caecc2426bbb 38 void Gyroscope::setCallbackReadOcurred( void (*callback_sensor)(GyroscopeData* value), uint32_t timeout = 10*1000 ) {
AndersonIctus 5:caecc2426bbb 39 Gyroscope::callback_sensor = callback_sensor;
AndersonIctus 5:caecc2426bbb 40 Gyroscope::timeout = timeout;
AndersonIctus 4:f21aab30658a 41 }
AndersonIctus 4:f21aab30658a 42
AndersonIctus 5:caecc2426bbb 43 void Gyroscope::run(void const *self_context) {
AndersonIctus 5:caecc2426bbb 44 Gyroscope* self = (Gyroscope*)self_context;
AndersonIctus 3:f998244e9f80 45
AndersonIctus 5:caecc2426bbb 46 while(1) {
AndersonIctus 5:caecc2426bbb 47 GyroscopeData val = self->getValue();
AndersonIctus 5:caecc2426bbb 48 self->acceptDataEvent( &val );
AndersonIctus 5:caecc2426bbb 49 ThisThread::sleep_for(self->timeout);
AndersonIctus 5:caecc2426bbb 50 }
AndersonIctus 3:f998244e9f80 51 }
AndersonIctus 4:f21aab30658a 52
AndersonIctus 4:f21aab30658a 53 void Gyroscope::acceptDataEvent(GyroscopeData* data) {
AndersonIctus 5:caecc2426bbb 54 if(callback_sensor != NULL)
AndersonIctus 5:caecc2426bbb 55 callback_sensor(data);
AndersonIctus 4:f21aab30658a 56 }
AndersonIctus 5:caecc2426bbb 57
AndersonIctus 5:caecc2426bbb 58 void Gyroscope::initializeTask() {
AndersonIctus 5:caecc2426bbb 59 t = new Thread();
AndersonIctus 5:caecc2426bbb 60 t->start(callback(run, this));
AndersonIctus 5:caecc2426bbb 61 }
AndersonIctus 5:caecc2426bbb 62
AndersonIctus 5:caecc2426bbb 63 void Gyroscope::finalizeTask() {
AndersonIctus 5:caecc2426bbb 64 if(t != NULL)
AndersonIctus 5:caecc2426bbb 65 t->terminate();
AndersonIctus 5:caecc2426bbb 66 }