example

Dependencies:   sgam-lib

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?

UserRevisionLine numberNew 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