![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ER2ER
main.cpp
- Committer:
- dorian06
- Date:
- 2021-06-02
- Revision:
- 0:62d65a8de2ae
File content as of revision 0:62d65a8de2ae:
/*#include "mbed.h" #include "MMA7660.h" MMA7660 MMA(p28,p27); int main() { void init(); float fx,fy,fz; printf ("\n\rDebut0"); while(1) { fx=MMA.x(); fy=MMA.y(); fz=MMA.z(); printf ("x=%f,y=%f, z=%f\n\r",fx,fy,fz); wait(1); } } */ #include "mbed.h" #include "MMA7660.h" // période moteur #define PWMPeriod 100 #define PI 3.14159265358979323846264338327950 // Moteurs PwmOut mot1(p23); PwmOut mot2(p22); DigitalOut sensG(p12); DigitalOut sensD(p11); // Boutons DigitalIn bpD(p29); // Tickers Ticker actionChaqueSeconde; MMA7660 MMA(p28, p27); DigitalOut connectionLed(LED1); DigitalOut led1(LED4); DigitalOut led2(LED3); DigitalOut led3(LED2); void calculAngle(void); void ChangementVitesse(float, int); int etat; float angleTot, angle1, angle2, angle3, angle4, angle5, angle6, angle7, angle8; int main() { mot1.period_us(PWMPeriod); mot2.period_us(PWMPeriod); mot1.pulsewidth_us(PWMPeriod); mot2.pulsewidth_us(PWMPeriod); bpD.mode(PullUp); ChangementVitesse(0,1); ChangementVitesse(0,2); actionChaqueSeconde.attach(&calculAngle, 0.02); if (MMA.testConnection()){ connectionLed = 1; } led1 = led2 = led3 = 0; while(1) { switch(etat) { case 0: led1 = led2 = led3 = 0; ChangementVitesse(0,1); ChangementVitesse(0,2); if(bpD.read() == 0) etat++; break; case 1: led1 = led2 = led3 = 0; led1 = 1; ChangementVitesse(48,1); ChangementVitesse(50,2); if(angleTot > 13) { ChangementVitesse(60,1); ChangementVitesse(70,2); etat++; } break; case 2: led1 = led2 = led3 = 0; led2 = 1; if(angleTot < 7) { ChangementVitesse(0,1); ChangementVitesse(0,2); led1 = led2 = 1; wait(3); led1 = led2 = led3 = 0; led3 = 1; ChangementVitesse(45,1); ChangementVitesse(50,2); wait(2.5); etat = 0; } break; } } } void calculAngle() { angle8 = angle7; angle7 = angle6; angle6 = angle5; angle5 = angle4; angle4 = angle3; angle3 = angle2; angle2 = angle1; angle1 = (1 - MMA.z()) * 90; angleTot = (angle1 + angle2 + angle3 + angle4+ angle5 + angle6 + angle7 + angle8) / 8; if (angleTot < 0) { // car très rarement négatif angleTot *= -1; } } void ChangementVitesse(float fVitesse, int iMoteur) { if(fVitesse > 100) { fVitesse = 100; } else if(fVitesse < -100) { fVitesse = -100; } if(iMoteur == 1) { if(fVitesse > 0) { // positive mot1.pulsewidth_us(fVitesse); sensG.write(0); // avance } else { mot1.pulsewidth_us(PWMPeriod - (fVitesse * -1)); sensG.write(1); // recule } } else if (iMoteur == 2) { if(fVitesse > 0) { // positive mot2.pulsewidth_us(fVitesse); sensD.write(0); // avance } else { mot2.pulsewidth_us(PWMPeriod - (fVitesse * -1)); sensD.write(1); // recule } } else { printf("erreur iMoteur incorrect (1 ou 2) dans fonction ChangementVitesse"); } }