Anderson Cunha
/
example_smart-grid
example
main.cpp@12:04b0ccb40acc, 2019-06-02 (annotated)
- Committer:
- AndersonIctus
- Date:
- Sun Jun 02 16:51:50 2019 -0300
- Revision:
- 12:04b0ccb40acc
- Parent:
- 8:69160f286ed3
- Child:
- 15:acf6c9c6b15d
- Incluindo as logicas para uso do Giroscopio !!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndersonIctus | 0:2713c2f0904f | 1 | #include "mbed.h" |
AndersonIctus | 12:04b0ccb40acc | 2 | #include "Event.h" |
AndersonIctus | 12:04b0ccb40acc | 3 | |
AndersonIctus | 12:04b0ccb40acc | 4 | #include "Temperature.h" |
AndersonIctus | 12:04b0ccb40acc | 5 | #include "Gyroscope.h" |
AndersonIctus | 12:04b0ccb40acc | 6 | |
AndersonIctus | 12:04b0ccb40acc | 7 | Serial pc(USBTX, USBRX); // SAIDA SERIAL PADRÃO |
AndersonIctus | 12:04b0ccb40acc | 8 | |
AndersonIctus | 12:04b0ccb40acc | 9 | // LEDs para serem acesas |
AndersonIctus | 12:04b0ccb40acc | 10 | DigitalOut led1 (LED1); // LED 1 de 3 DO BOARD |
AndersonIctus | 12:04b0ccb40acc | 11 | DigitalOut led_dig(D6); // LED 1 da porta Digital 6 (A placa tem D6 e D8) |
AndersonIctus | 12:04b0ccb40acc | 12 | |
AndersonIctus | 12:04b0ccb40acc | 13 | Temperature temp (A1); // Instancia de Temperatura |
AndersonIctus | 12:04b0ccb40acc | 14 | |
AndersonIctus | 12:04b0ccb40acc | 15 | I2C i2c(I2C_SDA, I2C_SCL); // PORTA I2C |
AndersonIctus | 12:04b0ccb40acc | 16 | Gyroscope giro(i2c); // Instancia do Giroscopio |
AndersonIctus | 12:04b0ccb40acc | 17 | |
AndersonIctus | 12:04b0ccb40acc | 18 | // FILAS PARA EVENTOS |
AndersonIctus | 12:04b0ccb40acc | 19 | EventQueue eventQueue1; |
AndersonIctus | 12:04b0ccb40acc | 20 | EventQueue eventQueue2; |
AndersonIctus | 12:04b0ccb40acc | 21 | |
AndersonIctus | 12:04b0ccb40acc | 22 | // --------------------------------------------------------------------------------- // |
AndersonIctus | 12:04b0ccb40acc | 23 | void fazLeituraTemperatura() { |
AndersonIctus | 12:04b0ccb40acc | 24 | printf("** Temperatura => %02.02f", *(temp.getValue()) ); |
AndersonIctus | 12:04b0ccb40acc | 25 | } |
AndersonIctus | 12:04b0ccb40acc | 26 | |
AndersonIctus | 12:04b0ccb40acc | 27 | void fazLeituraGyroscopio() { |
AndersonIctus | 12:04b0ccb40acc | 28 | GyroscopeData* data = giro.getValue(); |
AndersonIctus | 12:04b0ccb40acc | 29 | printf("*** (g_x = %03d; g_y = %03d; g_z = %03d) ***\r\n", data->gx, data->gy, data->gz); |
AndersonIctus | 12:04b0ccb40acc | 30 | } |
AndersonIctus | 12:04b0ccb40acc | 31 | |
AndersonIctus | 12:04b0ccb40acc | 32 | // --------------------------------------------------------------------------------- // |
AndersonIctus | 12:04b0ccb40acc | 33 | int main() { |
AndersonIctus | 12:04b0ccb40acc | 34 | printf("!!!INICIO!!!\r\n"); |
AndersonIctus | 12:04b0ccb40acc | 35 | |
AndersonIctus | 12:04b0ccb40acc | 36 | ////////////////// |
AndersonIctus | 12:04b0ccb40acc | 37 | // 1 -> Fazer um temporizador que fica lendo a temperatura a cada 5 segundos !! |
AndersonIctus | 12:04b0ccb40acc | 38 | Thread eventThread(osPriorityNormal); |
AndersonIctus | 12:04b0ccb40acc | 39 | eventThread.start( callback(&eventQueue1, &EventQueue::dispatch_forever) ); |
AndersonIctus | 12:04b0ccb40acc | 40 | |
AndersonIctus | 12:04b0ccb40acc | 41 | Ticker ledTicker; |
AndersonIctus | 12:04b0ccb40acc | 42 | ledTicker.attach(eventQueue1.event(&fazLeituraTemperatura), 5.0f); |
AndersonIctus | 12:04b0ccb40acc | 43 | |
AndersonIctus | 12:04b0ccb40acc | 44 | // 2 - Verificar se houve alguma mudança no Giroscópio |
AndersonIctus | 12:04b0ccb40acc | 45 | // Thread eventThread_2(osPriorityNormal); |
AndersonIctus | 12:04b0ccb40acc | 46 | // eventThread_2.start( callback(&eventQueue2, &EventQueue::dispatch_forever) ); |
AndersonIctus | 12:04b0ccb40acc | 47 | |
AndersonIctus | 12:04b0ccb40acc | 48 | |
AndersonIctus | 12:04b0ccb40acc | 49 | printf("!!!FIM DE INICIALIZACAO!!!\r\n"); |
AndersonIctus | 12:04b0ccb40acc | 50 | wait(osWaitForever); |
AndersonIctus | 12:04b0ccb40acc | 51 | } |
AndersonIctus | 0:2713c2f0904f | 52 | |
AndersonIctus | 7:310098916153 | 53 | /* |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 54 | DigitalOut led1 (LED1); // LED 1 de 3 DO BOARD |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 55 | DigitalOut led_dig(D6); // LED 1 da porta Digital 6 (A placa tem D6 e D8) |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 56 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 57 | Grove_temperature temp(A1); // Deve ser ligado na Porta ANALOGICA 1 |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 58 | Serial pc(USBTX, USBRX); // SAIDA SERIAL PADRÃO |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 59 | |
AndersonIctus | 6:ea945b2ea724 | 60 | // Sensor de movimento !!! |
AndersonIctus | 6:ea945b2ea724 | 61 | I2C i2c(I2C_SDA, I2C_SCL); // PORTA I2C |
AndersonIctus | 6:ea945b2ea724 | 62 | MPU6050 mpu(i2c, MPU6050_ADDRESS_AD0_LOW); |
AndersonIctus | 6:ea945b2ea724 | 63 | |
AndersonIctus | 6:ea945b2ea724 | 64 | // Constantes usadas no sensor de movimento ! |
AndersonIctus | 6:ea945b2ea724 | 65 | int16_t ax, ay, az; |
AndersonIctus | 6:ea945b2ea724 | 66 | int16_t gx, gy, gz; |
AndersonIctus | 6:ea945b2ea724 | 67 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 68 | void rodarLed() { |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 69 | int count = 0; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 70 | while(count ++ < 10) { |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 71 | led1 = 1; |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 72 | wait(0.4); |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 73 | led1 = 0; |
AndersonIctus | 8:69160f286ed3 | 74 | // wait(0.2); |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 75 | } |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 76 | |
AndersonIctus (anderson.ictus@gmail.com) | 2:b6bb08a9723d | 77 | led1 = 0; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 78 | } |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 79 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 80 | void buss_ligth() { |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 81 | led_dig = 1; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 82 | wait(0.3); |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 83 | led_dig = 0; |
AndersonIctus | 0:2713c2f0904f | 84 | } |
AndersonIctus | 3:a02fcd753ae3 | 85 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 86 | int main () { |
AndersonIctus | 6:ea945b2ea724 | 87 | printf("!!!INICIO!!!\r\n"); |
AndersonIctus | 6:ea945b2ea724 | 88 | |
AndersonIctus | 6:ea945b2ea724 | 89 | mpu.initialize(); |
AndersonIctus | 6:ea945b2ea724 | 90 | |
AndersonIctus | 6:ea945b2ea724 | 91 | bool mpu6050TestResult = mpu.testConnection(); |
AndersonIctus | 6:ea945b2ea724 | 92 | if(mpu6050TestResult) { |
AndersonIctus | 6:ea945b2ea724 | 93 | printf("MPU6050 test passed \r\n"); |
AndersonIctus | 6:ea945b2ea724 | 94 | } else { |
AndersonIctus | 6:ea945b2ea724 | 95 | printf("MPU6050 test failed \r\n"); |
AndersonIctus | 6:ea945b2ea724 | 96 | printf("FIM \r\n"); |
AndersonIctus | 6:ea945b2ea724 | 97 | return 0; |
AndersonIctus | 6:ea945b2ea724 | 98 | } |
AndersonIctus | 3:a02fcd753ae3 | 99 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 100 | int count = 0; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 101 | float tempValue = 0; |
AndersonIctus | 6:ea945b2ea724 | 102 | char buffer_giro[100]; |
AndersonIctus | 6:ea945b2ea724 | 103 | while(count ++ < 25) { |
AndersonIctus | 6:ea945b2ea724 | 104 | // ------------------------------------------------------ // |
AndersonIctus | 6:ea945b2ea724 | 105 | mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); |
AndersonIctus | 6:ea945b2ea724 | 106 | |
AndersonIctus | 6:ea945b2ea724 | 107 | //sabe calibrar o gyroscópio! |
AndersonIctus | 6:ea945b2ea724 | 108 | if ( gz > 150 ) { |
AndersonIctus | 6:ea945b2ea724 | 109 | sprintf(buffer_giro, "Movimentou Z .... gy_z = %d", gz); |
AndersonIctus | 6:ea945b2ea724 | 110 | } else if ( gy > 50 ){ |
AndersonIctus | 6:ea945b2ea724 | 111 | sprintf(buffer_giro, "Movimentou Y .... gy_y = %d",gy); |
AndersonIctus | 6:ea945b2ea724 | 112 | } else if ( gx < -370 ){ |
AndersonIctus | 6:ea945b2ea724 | 113 | sprintf(buffer_giro, "Movimentou X .... gy_x = %d",gx); |
AndersonIctus | 6:ea945b2ea724 | 114 | } else { |
AndersonIctus | 6:ea945b2ea724 | 115 | sprintf(buffer_giro, "Sem movimento!"); |
AndersonIctus | 6:ea945b2ea724 | 116 | } |
AndersonIctus | 3:a02fcd753ae3 | 117 | |
AndersonIctus | 6:ea945b2ea724 | 118 | // ------------------------------------------------------ // |
AndersonIctus | 6:ea945b2ea724 | 119 | tempValue = temp.getTemperature(); |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 120 | // Acende o LED quando está acima do valor indicado !! |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 121 | if(tempValue > 30.0) { |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 122 | led_dig = 1; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 123 | } else { |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 124 | led_dig = 0; |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 125 | } |
AndersonIctus | 6:ea945b2ea724 | 126 | // ------------------------------------------------------ // |
AndersonIctus | 6:ea945b2ea724 | 127 | |
AndersonIctus | 6:ea945b2ea724 | 128 | printf("******************* ROLL -> %02d ********************\r\n", count); |
AndersonIctus | 6:ea945b2ea724 | 129 | printf("*** Giro -> %-35s ***\r\n", buffer_giro); |
AndersonIctus | 6:ea945b2ea724 | 130 | printf("*** (gy_x = %03d; gy_y = %03d; gy_z = %03d) ***\r\n", gx, gy, gz); |
AndersonIctus | 6:ea945b2ea724 | 131 | printf("*** Temperatura -> %02.02f ***\r\n", tempValue); |
AndersonIctus | 6:ea945b2ea724 | 132 | printf("***************************************************\r\n\r\n"); |
AndersonIctus | 6:ea945b2ea724 | 133 | |
AndersonIctus | 6:ea945b2ea724 | 134 | wait(2); |
AndersonIctus | 3:a02fcd753ae3 | 135 | } |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 136 | |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 137 | printf("!!!FIM DE LEITURA!!!\r\n"); |
AndersonIctus (anderson.ictus@gmail.com) | 4:60f2a8b3727c | 138 | return 1; |
AndersonIctus | 3:a02fcd753ae3 | 139 | } |
AndersonIctus | 12:04b0ccb40acc | 140 | // */ |
AndersonIctus | 7:310098916153 | 141 | |
AndersonIctus | 12:04b0ccb40acc | 142 |