![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Accelero Brindan
main.cpp
- Committer:
- MaxLaMenace
- Date:
- 2019-05-09
- Revision:
- 1:bcb2d1a61147
- Parent:
- 0:a2a605398a75
- Child:
- 2:59eeb8637e5d
File content as of revision 1:bcb2d1a61147:
#include "LSM6DS33.h" #include <stdio.h> #include <stdlib.h> // Definition des variables de l'accéléromètre LSM6DS33 acc = LSM6DS33(I2C_SDA, I2C_SCL); //Déclarations des broches pour la communication en I2C float axx0; float ayy0; float axx1; float ayy1; float vx0; float vy0; float vx; float vy; float V; float epsilonx; float epsilony; float tabax[5]; float tabay[5]; float tabvx[5]; float tabvy[5]; int k; int a1; //Grandeurs pour déterminer si les roues de la voiture sont immobiles int a2; //ou non. Mesure si la valeur du compteur incrémental change int main() { a2 = 0; k = 0; vx = 0; vy = 0; acc.begin(); acc.readAccel(); axx0 = acc.ax; ayy0 = acc.ay; acc.readAccel(); epsilonx = acc.ax-axx0; epsilony = acc.ay-ayy0; while (1) { // Calibration nécessaire à vitesse nul (position immobile), l'accéleration est nulle // On calcule l'écart entre la valeur lue et la valeur initial (contenant le bruit) // On veut que l'accéleration qu'on mesure soit nul, pour cela, nous devons trouver axx0 // le plus précisement possible ( à 10^-2). On pourra alors retrancher axx0 au futur valeur. while(abs(epsilonx)>0.001 or abs(epsilony)>0.001) { axx0=axx0+epsilonx; ayy0=ayy0+epsilony; acc.readAccel(); epsilonx = acc.ax-axx0; epsilony = acc.ay-ayy0; printf("epsilonx vaut : %f\n", epsilonx); printf("epsilony vaut : %f\n", epsilony); } // Mesure de l'accélération en g (1g = 9,8 m/s^2) acc.readAccel(); axx1 = acc.ax-axx0; ayy1 = acc.ay-ayy0; // Condition de seuil pour eviter de prendre en compte le bruit if (abs(axx1) < 0.01) { axx1 = 0; // On considère que c'est du bruit donc on le néglige } if (abs(ayy1) < 0.01) { ayy1 = 0; // On considère que c'est du bruit donc on le néglige } // Calcul de la vitesse par intégration wait(0.0005); vx = vx + axx1*9.8*0.0005*1000; vy = vy + ayy1*9.8*0.0005*1000; V = sqrt(vx*vx+vy*vy); if (abs(vx)<0.001) { vx=0; } if (abs(vy)<0.001) { vy=0; } if (k == 5) {k=0;}; tabax[k] = axx1; tabay[k] = ayy1; tabvx[k] = vx; tabvy[k] = vy; if ( tabax[0]<0.1 && tabax[1]<0.1 && tabax[2]<0.1 && tabax[3]<0.1 && tabax[4]<0.1 && tabvx[0]<0.1 && tabvx[1]<0.1 && tabvx[2]<0.1 && tabvx[3]<0.1 && tabvx[4]<0.1 ) { vx=0; printf("Vitesse en X mis a zero\n"); } if ( tabay[0]<0.1 && tabay[1]<0.1 && tabay[2]<0.1 && tabay[3]<0.1 && tabay[4]<0.1 && tabvy[0]<0.1 && tabvy[1]<0.1 && tabvy[2]<0.1 && tabvy[3]<0.1 && tabvy[4]<0.1 ) { vy=0; printf("Vitesse en Y mis a zero\n"); } k++; // Affichage printf("acceleration en x = %f\n", axx1); printf("acceleration en y = %f\n", ayy1); printf("vitesse en x = %f mm/s\n", vx); printf("vitesse en y = %f mm/s\n", vy); //printf("acceleration en V = %f\n", V); //if (a1=a2) } // fin du while } // fin du main