Etienne Stransky
/
commande_moteur
ok
Diff: main.cpp
- Revision:
- 0:2f1dafe76e87
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Feb 12 14:43:27 2019 +0000 @@ -0,0 +1,110 @@ +#include "mbed.h" + +AnalogIn potard_adc(p15); // La valeur analog rentre sur le pin P15 + +//Liaison série +Serial PC(USBTX,USBRX); +Serial centrale(p9,p10); +void lecture_centrale(int *ptr1,int* ptr2); + +//gouvernail +PwmOut monpwm_gouv(p26); // Le PWM_gouv est sur le pin P26 +DigitalOut ina_gouv(p27); // La valeur numérique sort sur le pin P27 +DigitalOut inb_gouv(p25); // La valeur numérique sort sur le pin P25 + +//propulsion +PwmOut monpwm_pro(p21); // Le PWM est sur le pin P21 +DigitalOut ina_pro(p11); // La valeur numérique sort sur le pin P11 +DigitalOut inb_pro(p12); // La valeur numérique sort sur le pin P12 + +int main() +{ + + //Liason série + int vitesse,direction; + centrale.baud(9600); + PC.baud(460800); + + //gouvernail + monpwm_gouv.period_us(50); // f= 20 000 Hz + ina_gouv.write(1); //on force à 1 ina pour le mettre en sens horaire + inb_gouv.write(0); //on force à 0 inb pour le mettre en sens anti-horaire + + //propulsion + monpwm_pro.period_us(50); // f= 20 000 Hz + ina_pro.write(1); //on force à 1 ina pour le mettre en sens horaire + inb_pro.write(0); //on force à 0 inb pour le mettre en sens anti-horaire + + while(1) + { + + lecture_centrale(&vitesse,&direction); + + //Réglage du sens de rotation + if(direction>= 0) + { + //on règle sur le sens horaire + ina_pro.write(1); + inb_pro.write(0); + } + else + { + //on règle sur le sens anti-horaire + ina_pro.write(0); + inb_pro.write(1); + } + + PC.printf("Vitesse :%d\n\rDirection:%d\n\r",vitesse,direction); + //monpwm_pro.write(0.1); + //monpwm_gouv.write(0.05); //Le rapport cyclique du moteur de gouvernail + monpwm_gouv.write(direction/200.0); + //monpwm_pro.write(vitesse/100.0); //Le rapport cyclique du moteur de propulsion + wait(0.01);//Tempo + } +} + + +void lecture_centrale(int* ptr1,int* ptr2) +{ +char fin=0; +char etat = 0; +char a,i=0; +char buffer[30]; + +while(fin==0) +{ +if (centrale.readable()) +{ // attention PC.readable reste à 1 tant qu'il n'y a pas eu de getc qui vide le buffer +a=centrale.getc(); + +switch(etat) +{ +case 0 : +if(a=='$')//On attend le début d'une trame +{ +buffer[0] = '$'; +i=1; +etat = 1; +} +break; + +case 1 ://Après le début d'une trame, on récupère la trame en entier et on l'analyse +buffer[i] = a; +i++; +if(a=='*') +{ +sscanf(buffer,"$%d|%d*",ptr1,ptr2); +fin = 1; +i=0; +etat=0; +} +break; + +default : +etat = 0; +break; + +} +} +} +} \ No newline at end of file