Benoît Roussel / Mbed 2 deprecated test_algo

Dependencies:   mbed

Committer:
Mrlinkblue
Date:
Fri May 31 13:45:02 2019 +0000
Revision:
3:97827746c632
Parent:
0:9eb40ee5ff41
Child:
4:c393c14f4502
Bug Corrected

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mrlinkblue 0:9eb40ee5ff41 1 #include "mbed.h"
Mrlinkblue 0:9eb40ee5ff41 2 #include <string>
Mrlinkblue 0:9eb40ee5ff41 3
Mrlinkblue 0:9eb40ee5ff41 4 int Periode = 20; //ms
Mrlinkblue 0:9eb40ee5ff41 5
Mrlinkblue 0:9eb40ee5ff41 6 // Paramètre de temps haut pour la vitesse
Mrlinkblue 0:9eb40ee5ff41 7 float Tmin_avant = 1.48; //ms
Mrlinkblue 0:9eb40ee5ff41 8 float Tmax_avant = 1.14; //ms
Mrlinkblue 0:9eb40ee5ff41 9 // Paramètre de temps haut pour la vitesse
Mrlinkblue 0:9eb40ee5ff41 10 float Tmin_direction = 1.09; //ms
Mrlinkblue 0:9eb40ee5ff41 11 float Tmax_direction = 1.5; //ms
Mrlinkblue 0:9eb40ee5ff41 12 // PWM du servo-moteur-vitesse
Mrlinkblue 0:9eb40ee5ff41 13 PwmOut pwm_servo_vitesse(PE_5);
Mrlinkblue 0:9eb40ee5ff41 14 // PWM du servo-moteur-direction
Mrlinkblue 0:9eb40ee5ff41 15 PwmOut pwm_servo_direction(PE_6);
Mrlinkblue 0:9eb40ee5ff41 16
Mrlinkblue 0:9eb40ee5ff41 17 // Liaison série de la liaison bluetooth
Mrlinkblue 0:9eb40ee5ff41 18 Serial ComBT(PD_5,PD_6,115200);
Mrlinkblue 0:9eb40ee5ff41 19
Mrlinkblue 0:9eb40ee5ff41 20 // Nombres entre 0 et 200
Mrlinkblue 0:9eb40ee5ff41 21 // Format : a 147 (angle)
Mrlinkblue 0:9eb40ee5ff41 22 int a_com;
Mrlinkblue 0:9eb40ee5ff41 23 // Format : v 136 (vitesse)
Mrlinkblue 0:9eb40ee5ff41 24 int v_com;
Mrlinkblue 0:9eb40ee5ff41 25
Mrlinkblue 0:9eb40ee5ff41 26 // Pourcentage initiale de la vitesse
Mrlinkblue 0:9eb40ee5ff41 27 float pv=0.0;
Mrlinkblue 0:9eb40ee5ff41 28 float pa=0.5;
Mrlinkblue 0:9eb40ee5ff41 29
Mrlinkblue 0:9eb40ee5ff41 30 // Liste avec a130v012
Mrlinkblue 0:9eb40ee5ff41 31 char data_direction[8];
Mrlinkblue 0:9eb40ee5ff41 32
Mrlinkblue 0:9eb40ee5ff41 33
Mrlinkblue 0:9eb40ee5ff41 34 // Fonction permettant d'envoyer le temps haut correspondant à un pourcentage de la vitesse max
Mrlinkblue 0:9eb40ee5ff41 35 void commande_servo_vitesse(float p) {
Mrlinkblue 0:9eb40ee5ff41 36 int t1 = ((Tmax_avant-Tmin_avant)*p/2+Tmin_avant)*1000;
Mrlinkblue 0:9eb40ee5ff41 37 pwm_servo_vitesse.pulsewidth_us(t1);
Mrlinkblue 0:9eb40ee5ff41 38 }
Mrlinkblue 0:9eb40ee5ff41 39
Mrlinkblue 0:9eb40ee5ff41 40 // Fonction permettant d'envoyer le temps haut correspondant à un pourcentage de l'angle
Mrlinkblue 0:9eb40ee5ff41 41 void commande_servo_direction(float p) {
Mrlinkblue 0:9eb40ee5ff41 42 int t1 = ((Tmin_direction-Tmax_direction)*p/2+Tmax_direction)*1000;
Mrlinkblue 0:9eb40ee5ff41 43 pwm_servo_direction.pulsewidth_us(t1);
Mrlinkblue 0:9eb40ee5ff41 44 }
Mrlinkblue 0:9eb40ee5ff41 45
Mrlinkblue 0:9eb40ee5ff41 46 // Fonction permettant de récupérer la commande par bluetooth
Mrlinkblue 0:9eb40ee5ff41 47 void recuperer(char* data_direction){
Mrlinkblue 0:9eb40ee5ff41 48 int i=0;
Mrlinkblue 0:9eb40ee5ff41 49 char a = '0';
Mrlinkblue 0:9eb40ee5ff41 50 bool state=false;
Mrlinkblue 0:9eb40ee5ff41 51 while(i<8){
Mrlinkblue 0:9eb40ee5ff41 52 if (ComBT.readable()){
Mrlinkblue 0:9eb40ee5ff41 53 a = ComBT.getc();
Mrlinkblue 0:9eb40ee5ff41 54 if (a=='a'){
Mrlinkblue 0:9eb40ee5ff41 55 state=true;
Mrlinkblue 0:9eb40ee5ff41 56 }
Mrlinkblue 0:9eb40ee5ff41 57 if (state==true){
Mrlinkblue 0:9eb40ee5ff41 58 data_direction[i] = a;
Mrlinkblue 0:9eb40ee5ff41 59 i++;
Mrlinkblue 0:9eb40ee5ff41 60 }
Mrlinkblue 0:9eb40ee5ff41 61 }
Mrlinkblue 0:9eb40ee5ff41 62 }
Mrlinkblue 0:9eb40ee5ff41 63 }
Mrlinkblue 0:9eb40ee5ff41 64
Mrlinkblue 0:9eb40ee5ff41 65 void pourcentage_commande_bluetooth(){
Mrlinkblue 0:9eb40ee5ff41 66 // Conversion char -> entier
Mrlinkblue 0:9eb40ee5ff41 67 int d1 = data_direction[1] - 48;
Mrlinkblue 0:9eb40ee5ff41 68 int d2 = data_direction[2] - 48;
Mrlinkblue 0:9eb40ee5ff41 69 int d3 = data_direction[3] - 48;
Mrlinkblue 0:9eb40ee5ff41 70 // Détermination du nombre écrit sur l'écran (commande angle)
Mrlinkblue 0:9eb40ee5ff41 71 if (data_direction[0]=='a'){
Mrlinkblue 0:9eb40ee5ff41 72 a_com = d1*100+d2*10+d3;
Mrlinkblue 0:9eb40ee5ff41 73 }
Mrlinkblue 0:9eb40ee5ff41 74 // Pourcentage de l'angle
Mrlinkblue 0:9eb40ee5ff41 75 pa=((float)a_com)/100.0;
Mrlinkblue 0:9eb40ee5ff41 76
Mrlinkblue 0:9eb40ee5ff41 77 // Conversion char -> entier
Mrlinkblue 0:9eb40ee5ff41 78 int d5 = data_direction[5] - 48;
Mrlinkblue 0:9eb40ee5ff41 79 int d6 = data_direction[6] - 48;
Mrlinkblue 0:9eb40ee5ff41 80 int d7 = data_direction[7] - 48;
Mrlinkblue 0:9eb40ee5ff41 81 // Détermination du nombre écrit sur l'écran (commande vitesse)
Mrlinkblue 0:9eb40ee5ff41 82 if (data_direction[4]=='v'){
Mrlinkblue 0:9eb40ee5ff41 83 v_com = d5*100+d6*10+d7;
Mrlinkblue 0:9eb40ee5ff41 84 }
Mrlinkblue 0:9eb40ee5ff41 85 // Pourcentage de la vitesse
Mrlinkblue 0:9eb40ee5ff41 86 pv=((float)v_com)/100.0;
Mrlinkblue 0:9eb40ee5ff41 87 }
Mrlinkblue 0:9eb40ee5ff41 88
Mrlinkblue 0:9eb40ee5ff41 89 void setup_direction(){
Mrlinkblue 0:9eb40ee5ff41 90 //Initialisation de la PWM de direction
Mrlinkblue 0:9eb40ee5ff41 91 pwm_servo_vitesse.period_ms(Periode);
Mrlinkblue 0:9eb40ee5ff41 92 pwm_servo_direction.period_ms(Periode);
Mrlinkblue 0:9eb40ee5ff41 93 commande_servo_vitesse(pv);
Mrlinkblue 0:9eb40ee5ff41 94 commande_servo_direction(pa);
Mrlinkblue 0:9eb40ee5ff41 95 }
Mrlinkblue 0:9eb40ee5ff41 96
Mrlinkblue 0:9eb40ee5ff41 97 int convers_angle_tempsh(float angle){
Mrlinkblue 0:9eb40ee5ff41 98 int t_angle;
Mrlinkblue 0:9eb40ee5ff41 99 t_angle=int((-11.554)*angle+1308.4);
Mrlinkblue 0:9eb40ee5ff41 100 return(t_angle);
Mrlinkblue 0:9eb40ee5ff41 101 }
Mrlinkblue 0:9eb40ee5ff41 102
Mrlinkblue 0:9eb40ee5ff41 103 int convers_vitesse_tempsh(float vitesse){
Mrlinkblue 0:9eb40ee5ff41 104 int t_vitesse;
Mrlinkblue 3:97827746c632 105 t_vitesse = int (vitesse *(1440.0-1480.0)/vitesse_max + 1480.0) ; // (us)
Mrlinkblue 3:97827746c632 106 if (t_vitesse>1480){
Mrlinkblue 3:97827746c632 107 return(1480);
Mrlinkblue 3:97827746c632 108 }
Mrlinkblue 0:9eb40ee5ff41 109 return(t_vitesse);
Mrlinkblue 0:9eb40ee5ff41 110 }