lib para o framework sgam
Dependencies: MPU6050 Grove_temperature
Dependents: example_smart-grid
peripheral/impl/Gyroscope.cpp@5:caecc2426bbb, 2019-06-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |