![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Código base
main.cpp@0:54d4bcb1c653, 2021-07-06 (annotated)
- Committer:
- diogonac
- Date:
- Tue Jul 06 19:55:14 2021 +0000
- Revision:
- 0:54d4bcb1c653
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
diogonac | 0:54d4bcb1c653 | 1 | #include "mbed.h" |
diogonac | 0:54d4bcb1c653 | 2 | #include "BNO055.h" |
diogonac | 0:54d4bcb1c653 | 3 | |
diogonac | 0:54d4bcb1c653 | 4 | #define taxa_de_amostragem 10 //100 Hz (10ms) |
diogonac | 0:54d4bcb1c653 | 5 | |
diogonac | 0:54d4bcb1c653 | 6 | Serial pc (D1, D0); //Comunicação com USB TX, RX |
diogonac | 0:54d4bcb1c653 | 7 | |
diogonac | 0:54d4bcb1c653 | 8 | |
diogonac | 0:54d4bcb1c653 | 9 | BNO055 BNO055(D14, D15); //Define as portas SDA/SCL do BNO055 |
diogonac | 0:54d4bcb1c653 | 10 | float aceleracao_linear[3]; |
diogonac | 0:54d4bcb1c653 | 11 | |
diogonac | 0:54d4bcb1c653 | 12 | Timer t_dados; // timer para taxa de aquisicao dos dados |
diogonac | 0:54d4bcb1c653 | 13 | int tx_aquisicao; //quantos pontos serao plotados em um segundo |
diogonac | 0:54d4bcb1c653 | 14 | int t_amostragem; //valor do timer do Main |
diogonac | 0:54d4bcb1c653 | 15 | |
diogonac | 0:54d4bcb1c653 | 16 | Timer check_status; |
diogonac | 0:54d4bcb1c653 | 17 | |
diogonac | 0:54d4bcb1c653 | 18 | void configuracao_BNO055(void); |
diogonac | 0:54d4bcb1c653 | 19 | void calibracao_BNO055(void); |
diogonac | 0:54d4bcb1c653 | 20 | |
diogonac | 0:54d4bcb1c653 | 21 | int main() |
diogonac | 0:54d4bcb1c653 | 22 | { |
diogonac | 0:54d4bcb1c653 | 23 | |
diogonac | 0:54d4bcb1c653 | 24 | pc.baud(115200); //Define a velocidade da porta USB |
diogonac | 0:54d4bcb1c653 | 25 | t_dados.start(); |
diogonac | 0:54d4bcb1c653 | 26 | tx_aquisicao = 100; |
diogonac | 0:54d4bcb1c653 | 27 | configuracao_BNO055(); |
diogonac | 0:54d4bcb1c653 | 28 | calibracao_BNO055(); |
diogonac | 0:54d4bcb1c653 | 29 | |
diogonac | 0:54d4bcb1c653 | 30 | |
diogonac | 0:54d4bcb1c653 | 31 | while(1) { |
diogonac | 0:54d4bcb1c653 | 32 | |
diogonac | 0:54d4bcb1c653 | 33 | check_status.start(); |
diogonac | 0:54d4bcb1c653 | 34 | |
diogonac | 0:54d4bcb1c653 | 35 | if (t_amostragem >= 1000000/tx_aquisicao % BNO055.check() == true) { |
diogonac | 0:54d4bcb1c653 | 36 | t_dados.reset(); |
diogonac | 0:54d4bcb1c653 | 37 | BNO055.SetExternalCrystal(true); //Indica a existencia de um cristal externo |
diogonac | 0:54d4bcb1c653 | 38 | BNO055.get_angles(); |
diogonac | 0:54d4bcb1c653 | 39 | BNO055.get_accel(); |
diogonac | 0:54d4bcb1c653 | 40 | aceleracao_linear[0] = BNO055.lia.x; |
diogonac | 0:54d4bcb1c653 | 41 | aceleracao_linear[1] = BNO055.lia.y; |
diogonac | 0:54d4bcb1c653 | 42 | aceleracao_linear[2] = BNO055.lia.z; |
diogonac | 0:54d4bcb1c653 | 43 | // pc.printf("YAW= %f, ROLL= %f, PITCH= %f \r\n", BNO055.euler.yaw, BNO055.euler.roll, BNO055.euler.pitch); |
diogonac | 0:54d4bcb1c653 | 44 | //pc.printf("%f,%f,%f \r\n", BNO055.euler.yaw, BNO055.euler.roll, BNO055.euler.pitch); |
diogonac | 0:54d4bcb1c653 | 45 | |
diogonac | 0:54d4bcb1c653 | 46 | //pc.printf("%f,%f,%f\n", aceleracao_linear[0], aceleracao_linear[1], aceleracao_linear[2]); |
diogonac | 0:54d4bcb1c653 | 47 | pc.printf("AX= %f, AY= %f, AZ= %f \r\n", BNO055.accel.x, BNO055.accel.y, BNO055.accel.z); |
diogonac | 0:54d4bcb1c653 | 48 | |
diogonac | 0:54d4bcb1c653 | 49 | //pc.printf("Tempo= %d", check_status.read_ms()); |
diogonac | 0:54d4bcb1c653 | 50 | check_status.reset(); |
diogonac | 0:54d4bcb1c653 | 51 | |
diogonac | 0:54d4bcb1c653 | 52 | } else { |
diogonac | 0:54d4bcb1c653 | 53 | |
diogonac | 0:54d4bcb1c653 | 54 | pc.printf("Status BNO055: %d\r\n", BNO055.check()); //Verifica se tem comunicação com o BNO055 |
diogonac | 0:54d4bcb1c653 | 55 | |
diogonac | 0:54d4bcb1c653 | 56 | configuracao_BNO055(); |
diogonac | 0:54d4bcb1c653 | 57 | calibracao_BNO055(); |
diogonac | 0:54d4bcb1c653 | 58 | |
diogonac | 0:54d4bcb1c653 | 59 | } |
diogonac | 0:54d4bcb1c653 | 60 | |
diogonac | 0:54d4bcb1c653 | 61 | |
diogonac | 0:54d4bcb1c653 | 62 | //wait_ms(taxa_de_amostragem); |
diogonac | 0:54d4bcb1c653 | 63 | |
diogonac | 0:54d4bcb1c653 | 64 | } |
diogonac | 0:54d4bcb1c653 | 65 | } |
diogonac | 0:54d4bcb1c653 | 66 | |
diogonac | 0:54d4bcb1c653 | 67 | void configuracao_BNO055() |
diogonac | 0:54d4bcb1c653 | 68 | { |
diogonac | 0:54d4bcb1c653 | 69 | |
diogonac | 0:54d4bcb1c653 | 70 | //============= Configurações iniciais no BNO055 ================ |
diogonac | 0:54d4bcb1c653 | 71 | BNO055.reset(); //Reseta o BNO055 |
diogonac | 0:54d4bcb1c653 | 72 | //pc.printf("Status BNO055: %d\r\n", BNO055.check()); //Verifica se tem comunicação com o BNO055 |
diogonac | 0:54d4bcb1c653 | 73 | wait_ms(650); |
diogonac | 0:54d4bcb1c653 | 74 | BNO055.setpowermode(POWER_MODE_NORMAL); //Define o modo de alimentação do BNO055 |
diogonac | 0:54d4bcb1c653 | 75 | wait_ms(25); //Aguarda a troca de modo de alimentação |
diogonac | 0:54d4bcb1c653 | 76 | BNO055.setmode(OPERATION_MODE_IMUPLUS); //Configura o modo padrão para iniciar a calibração |
diogonac | 0:54d4bcb1c653 | 77 | wait_ms(25); //Aguarda o BNO055 trocar de modo de operação |
diogonac | 0:54d4bcb1c653 | 78 | |
diogonac | 0:54d4bcb1c653 | 79 | |
diogonac | 0:54d4bcb1c653 | 80 | //============= Unidade das variáveis do BNO055 ================ |
diogonac | 0:54d4bcb1c653 | 81 | BNO055.set_accel_units(MPERSPERS); // m/s2 |
diogonac | 0:54d4bcb1c653 | 82 | BNO055.set_anglerate_units(DEG_PER_SEC); // graus°/s |
diogonac | 0:54d4bcb1c653 | 83 | BNO055.set_angle_units(DEGREES); // graus° |
diogonac | 0:54d4bcb1c653 | 84 | BNO055.set_temp_units(CENTIGRADE); // °C |
diogonac | 0:54d4bcb1c653 | 85 | BNO055.set_orientation(ANDROID); // Sentido de rotação ANDROID = Regra da mão direita |
diogonac | 0:54d4bcb1c653 | 86 | |
diogonac | 0:54d4bcb1c653 | 87 | } |
diogonac | 0:54d4bcb1c653 | 88 | |
diogonac | 0:54d4bcb1c653 | 89 | void calibracao_BNO055() |
diogonac | 0:54d4bcb1c653 | 90 | { |
diogonac | 0:54d4bcb1c653 | 91 | |
diogonac | 0:54d4bcb1c653 | 92 | //=================== Calibração do BNO055 ===================== |
diogonac | 0:54d4bcb1c653 | 93 | BNO055.read_calibration_data(); //Calibração dos sensores |
diogonac | 0:54d4bcb1c653 | 94 | wait_ms(10); |
diogonac | 0:54d4bcb1c653 | 95 | BNO055.write_calibration_data(); //Calibração dos sensores |
diogonac | 0:54d4bcb1c653 | 96 | wait_ms(10); |
diogonac | 0:54d4bcb1c653 | 97 | BNO055.setmode(OPERATION_MODE_IMUPLUS); //Configura o mode de fusão entre acelerômetro e giroscópio taxa de atualização máxima: 100Hz |
diogonac | 0:54d4bcb1c653 | 98 | wait_ms(25); //Aguarda o BNO055 trocar de modo de operação |
diogonac | 0:54d4bcb1c653 | 99 | |
diogonac | 0:54d4bcb1c653 | 100 | } |
diogonac | 0:54d4bcb1c653 | 101 | |
diogonac | 0:54d4bcb1c653 | 102 | |
diogonac | 0:54d4bcb1c653 | 103 |