motor dc driver with lcd nextion nx8048t050_011

Dependencies:   mbed QEI_hw NVIC_set_all_priorities SoftPWM

https://os.mbed.com/media/uploads/exarkun/wp_20180730_002.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180823_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180730_007.jpg https://os.mbed.com/media/uploads/exarkun/wp_20171120_004.jpg

https://os.mbed.com/media/uploads/exarkun/wp_20191002_006.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_004.jpg https://os.mbed.com/media/uploads/exarkun/wp_20191002_005.jpg https://os.mbed.com/media/uploads/exarkun/wp_20190322_003.jpg https://os.mbed.com/media/uploads/exarkun/wp_20180925_002.jpg https://os.mbed.com/media/uploads/exarkun/wp_20181010_006.jpg https://os.mbed.com/media/uploads/exarkun/wp_20181220_001.jpg

https://os.mbed.com/media/uploads/exarkun/wp_20181220_002.jpg

Committer:
exarkun
Date:
Fri Sep 27 12:46:15 2019 +0000
Revision:
0:ea04a1655f3b
Child:
1:2fe82be93e80
example project how to  use motor enslavement position with lcd nextion nx8048t050_011

Who changed what in which revision?

UserRevisionLine numberNew contents of line
exarkun 0:ea04a1655f3b 1 ////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 2 //rajout du spi1(p5, p6, p7, p8)--------( 14 / 11 / 2017 ) task5
exarkun 0:ea04a1655f3b 3 //rajout de la conversion AD p20--------( 15 / 11 / 2017 ) task6
exarkun 0:ea04a1655f3b 4 //rajout fonction generation trajectoire a tester "il y as un probleme de position final lorsque on change "slope_time"
exarkun 0:ea04a1655f3b 5 //rajout en task2 visualisation des pulses avec "telemetry viewer v0.4"
exarkun 0:ea04a1655f3b 6
exarkun 0:ea04a1655f3b 7 #include "mbed.h"
exarkun 0:ea04a1655f3b 8 #include "qeihw.h"
exarkun 0:ea04a1655f3b 9 #include "NVIC_set_all_priorities.h"
exarkun 0:ea04a1655f3b 10
exarkun 0:ea04a1655f3b 11 // déclaration du hardware
exarkun 0:ea04a1655f3b 12 Serial pc(USBTX, USBRX);//utilisation de la liaison usb
exarkun 0:ea04a1655f3b 13
exarkun 0:ea04a1655f3b 14 QEIHW qei(QEI_DIRINV_NONE, QEI_SIGNALMODE_QUAD, QEI_CAPMODE_4X, QEI_INVINX_NONE );
exarkun 0:ea04a1655f3b 15
exarkun 0:ea04a1655f3b 16 Serial device(p9, p10);// tx, rx.//definition de la liaison rs232
exarkun 0:ea04a1655f3b 17
exarkun 0:ea04a1655f3b 18 DigitalOut frein_moteur1(p15); //changement momentané pour le projet r2d de p5 a p15
exarkun 0:ea04a1655f3b 19
exarkun 0:ea04a1655f3b 20 DigitalOut sens_rotation_moteur1(p13);
exarkun 0:ea04a1655f3b 21
exarkun 0:ea04a1655f3b 22 PwmOut PWM1(p21);
exarkun 0:ea04a1655f3b 23
exarkun 0:ea04a1655f3b 24 SPISlave spi1(p5, p6, p7, p8); // mosi, miso, sclk, ssel
exarkun 0:ea04a1655f3b 25
exarkun 0:ea04a1655f3b 26 AnalogIn Ain(p20);
exarkun 0:ea04a1655f3b 27
exarkun 0:ea04a1655f3b 28 // définition des timers.
exarkun 0:ea04a1655f3b 29 Timer timer1;
exarkun 0:ea04a1655f3b 30 Timer timer2;
exarkun 0:ea04a1655f3b 31
exarkun 0:ea04a1655f3b 32 //definition spi1
exarkun 0:ea04a1655f3b 33 int reply = 0xAAAA;// en bin "1010101010101010"
exarkun 0:ea04a1655f3b 34 int valueFromMaster;
exarkun 0:ea04a1655f3b 35
exarkun 0:ea04a1655f3b 36 int Spi_val_RX[10]={0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};//buffer reception données SPI
exarkun 0:ea04a1655f3b 37 int Spi_val_TX[10]={0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};//buffer transmission données SPI
exarkun 0:ea04a1655f3b 38
exarkun 0:ea04a1655f3b 39 // définition des sorties leds
exarkun 0:ea04a1655f3b 40 DigitalOut led1(LED1);
exarkun 0:ea04a1655f3b 41 DigitalOut led3(LED3);
exarkun 0:ea04a1655f3b 42
exarkun 0:ea04a1655f3b 43 char c ;
exarkun 0:ea04a1655f3b 44 int t ;
exarkun 0:ea04a1655f3b 45 int x=0 ;
exarkun 0:ea04a1655f3b 46
exarkun 0:ea04a1655f3b 47 float PI=3.141592653589793;
exarkun 0:ea04a1655f3b 48
exarkun 0:ea04a1655f3b 49 //vitesse moteur
exarkun 0:ea04a1655f3b 50 int vitesse_actuelle;
exarkun 0:ea04a1655f3b 51
exarkun 0:ea04a1655f3b 52 //position codeur en pulses 2000pulses/rotation
exarkun 0:ea04a1655f3b 53 int position_actuelle;//position du codeur
exarkun 0:ea04a1655f3b 54 int position_actuelle_n1;//position du codeur a n-1
exarkun 0:ea04a1655f3b 55
exarkun 0:ea04a1655f3b 56 //données mecanique & moteur
exarkun 0:ea04a1655f3b 57 float J=3.375*1e-5;//0.005;//inertie en kg.m²
exarkun 0:ea04a1655f3b 58 float K=0.05;//2;//constante de couple N.m/v
exarkun 0:ea04a1655f3b 59 float R=5;//K;//resistance du moteur en Ohms
exarkun 0:ea04a1655f3b 60 float Umax=24;//24vdc tension max en volts
exarkun 0:ea04a1655f3b 61
exarkun 0:ea04a1655f3b 62 //parametres reglage
exarkun 0:ea04a1655f3b 63 float dt_vit(5*1e-4);
exarkun 0:ea04a1655f3b 64 float Ki=12;//default value=10;
exarkun 0:ea04a1655f3b 65 float Kp;
exarkun 0:ea04a1655f3b 66 float Kv;
exarkun 0:ea04a1655f3b 67 float K_sw(K);
exarkun 0:ea04a1655f3b 68 float tau;
exarkun 0:ea04a1655f3b 69 float taud=(10*dt_vit);
exarkun 0:ea04a1655f3b 70 float r1=3;//default value=2.5;derniere valeur =3
exarkun 0:ea04a1655f3b 71 float r2=r1;//default value=2.5;
exarkun 0:ea04a1655f3b 72
exarkun 0:ea04a1655f3b 73 //variables generateur de consigne///////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 74 float Teta_debut, Teta_fin, Teta_diff;
exarkun 0:ea04a1655f3b 75 float delta_Teta;
exarkun 0:ea04a1655f3b 76 float consigne;//en pulse
exarkun 0:ea04a1655f3b 77 float slope_time(1.);//en seconde
exarkun 0:ea04a1655f3b 78 bool start_slope(false);//flag debut de montee
exarkun 0:ea04a1655f3b 79 int ticks_total;
exarkun 0:ea04a1655f3b 80 int count_ticks;
exarkun 0:ea04a1655f3b 81 int count_slope(0);
exarkun 0:ea04a1655f3b 82 int count_max(0);
exarkun 0:ea04a1655f3b 83
exarkun 0:ea04a1655f3b 84 //variables calcul de l'asservissement en vitesse et position
exarkun 0:ea04a1655f3b 85 float Tetaco; //valeur de la consigne position en radians
exarkun 0:ea04a1655f3b 86 float Tetam;//valeur mesuree de la position en radians
exarkun 0:ea04a1655f3b 87
exarkun 0:ea04a1655f3b 88 float dTetam;
exarkun 0:ea04a1655f3b 89 float integ;
exarkun 0:ea04a1655f3b 90 float A;
exarkun 0:ea04a1655f3b 91
exarkun 0:ea04a1655f3b 92 float dTetam_n1;
exarkun 0:ea04a1655f3b 93 float Tetaco_n1;
exarkun 0:ea04a1655f3b 94 float Tetam_n1;
exarkun 0:ea04a1655f3b 95 float integ_n1;
exarkun 0:ea04a1655f3b 96 float cyclic;
exarkun 0:ea04a1655f3b 97 int signe_rot;
exarkun 0:ea04a1655f3b 98
exarkun 0:ea04a1655f3b 99 //variable ADC
exarkun 0:ea04a1655f3b 100 float ADCdata;
exarkun 0:ea04a1655f3b 101 float imax=1.8;
exarkun 0:ea04a1655f3b 102
exarkun 0:ea04a1655f3b 103 //declaration des differantes taches
exarkun 0:ea04a1655f3b 104 void task1_switch(void);
exarkun 0:ea04a1655f3b 105 void task2_switch(void);
exarkun 0:ea04a1655f3b 106 void task3_switch(void);
exarkun 0:ea04a1655f3b 107 void task4_switch(void);
exarkun 0:ea04a1655f3b 108 void task5_switch(void);
exarkun 0:ea04a1655f3b 109 void task6_switch(void);
exarkun 0:ea04a1655f3b 110 void task7_switch(void);
exarkun 0:ea04a1655f3b 111 void task8_switch(void);
exarkun 0:ea04a1655f3b 112
exarkun 0:ea04a1655f3b 113 //declaration des differantes interuption timer
exarkun 0:ea04a1655f3b 114 Ticker time_up1; //definition du Ticker, avec le nom “time_up1”
exarkun 0:ea04a1655f3b 115 Ticker time_up2; //definition du Ticker, avec le nom “time_up2”
exarkun 0:ea04a1655f3b 116 Ticker time_up3; //definition du Ticker, avec le nom “time_up3”
exarkun 0:ea04a1655f3b 117 Ticker time_up4; //definition du Ticker, avec le nom “time_up4”
exarkun 0:ea04a1655f3b 118 Ticker time_up5; //definition du Ticker, avec le nom_up5”
exarkun 0:ea04a1655f3b 119 Ticker time_up6; //definition du Ticker, avec le nom_up6”
exarkun 0:ea04a1655f3b 120 Ticker time_up7; //definition du Ticker, avec le nom “time_up7”
exarkun 0:ea04a1655f3b 121 Ticker time_up8; //definition du Ticker, avec le nom “time_up8”
exarkun 0:ea04a1655f3b 122
exarkun 0:ea04a1655f3b 123 //declaration des leds visuelle utiliser pour mesurer le temps des taches
exarkun 0:ea04a1655f3b 124 DigitalOut myled1(LED1);
exarkun 0:ea04a1655f3b 125 DigitalOut myled3(LED3);
exarkun 0:ea04a1655f3b 126
exarkun 0:ea04a1655f3b 127 //declaration des variables afficheur
exarkun 0:ea04a1655f3b 128 char mRxMsg[40];
exarkun 0:ea04a1655f3b 129 int mRxIdx;
exarkun 0:ea04a1655f3b 130 char charac;
exarkun 0:ea04a1655f3b 131 bool mTouch;
exarkun 0:ea04a1655f3b 132 int mTouchX, mTouchY;
exarkun 0:ea04a1655f3b 133
exarkun 0:ea04a1655f3b 134 int val_temp;//valleur temporaire
exarkun 0:ea04a1655f3b 135 int val_temp1;//valleur temporaire
exarkun 0:ea04a1655f3b 136
exarkun 0:ea04a1655f3b 137 ////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 138 // fonction affichage sur nextion //
exarkun 0:ea04a1655f3b 139 ////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 140
exarkun 0:ea04a1655f3b 141 bool Touch(void) {
exarkun 0:ea04a1655f3b 142 return mTouch;
exarkun 0:ea04a1655f3b 143 }
exarkun 0:ea04a1655f3b 144
exarkun 0:ea04a1655f3b 145 int TouchX(void) {
exarkun 0:ea04a1655f3b 146 return mTouchX;
exarkun 0:ea04a1655f3b 147 }
exarkun 0:ea04a1655f3b 148
exarkun 0:ea04a1655f3b 149 int TouchY(void) {
exarkun 0:ea04a1655f3b 150 return mTouchY;
exarkun 0:ea04a1655f3b 151 }
exarkun 0:ea04a1655f3b 152
exarkun 0:ea04a1655f3b 153 bool lectureRSlcd(void)
exarkun 0:ea04a1655f3b 154 {
exarkun 0:ea04a1655f3b 155 if(device.readable())
exarkun 0:ea04a1655f3b 156 {
exarkun 0:ea04a1655f3b 157 charac = device.getc();
exarkun 0:ea04a1655f3b 158 mRxMsg[mRxIdx] = charac;
exarkun 0:ea04a1655f3b 159 mRxIdx++;
exarkun 0:ea04a1655f3b 160 if ((mRxIdx >= 3) && (mRxMsg[mRxIdx-1] == 0xff) && (mRxMsg[mRxIdx-2] == 0xff) && (mRxMsg[mRxIdx-3] == 0xff)) //valid rx message
exarkun 0:ea04a1655f3b 161 {
exarkun 0:ea04a1655f3b 162 mRxIdx=0;
exarkun 0:ea04a1655f3b 163
exarkun 0:ea04a1655f3b 164 if(mRxMsg[0] == 0x67) //Touch coordinate data return
exarkun 0:ea04a1655f3b 165 { mTouchX = (mRxMsg[1]*256) + mRxMsg[2];
exarkun 0:ea04a1655f3b 166 mTouchY = (mRxMsg[3]*256) + mRxMsg[4];
exarkun 0:ea04a1655f3b 167 if(mRxMsg[5] == 0x01)
exarkun 0:ea04a1655f3b 168 mTouch = true;
exarkun 0:ea04a1655f3b 169 else
exarkun 0:ea04a1655f3b 170 mTouch = false;
exarkun 0:ea04a1655f3b 171 }
exarkun 0:ea04a1655f3b 172 }
exarkun 0:ea04a1655f3b 173 }
exarkun 0:ea04a1655f3b 174 return mTouch;
exarkun 0:ea04a1655f3b 175 }
exarkun 0:ea04a1655f3b 176
exarkun 0:ea04a1655f3b 177 //lecture de la donnée val d une reponse de sliders
exarkun 0:ea04a1655f3b 178 int lecture_slider_RS_lcd(void)
exarkun 0:ea04a1655f3b 179 {
exarkun 0:ea04a1655f3b 180 if(device.readable())
exarkun 0:ea04a1655f3b 181 {
exarkun 0:ea04a1655f3b 182 charac = device.getc();
exarkun 0:ea04a1655f3b 183 mRxMsg[mRxIdx] = charac;
exarkun 0:ea04a1655f3b 184 mRxIdx++;
exarkun 0:ea04a1655f3b 185 if ((mRxIdx >= 3) && (mRxMsg[mRxIdx-1] == 0xff) && (mRxMsg[mRxIdx-2] == 0xff) && (mRxMsg[mRxIdx-3] == 0xff)) //valid rx message
exarkun 0:ea04a1655f3b 186 {
exarkun 0:ea04a1655f3b 187 mRxIdx=0;
exarkun 0:ea04a1655f3b 188
exarkun 0:ea04a1655f3b 189 if(mRxMsg[0] == 0x71) //sliders data return
exarkun 0:ea04a1655f3b 190 {
exarkun 0:ea04a1655f3b 191 val_temp=mRxMsg[1];
exarkun 0:ea04a1655f3b 192
exarkun 0:ea04a1655f3b 193 }
exarkun 0:ea04a1655f3b 194 }
exarkun 0:ea04a1655f3b 195 }
exarkun 0:ea04a1655f3b 196 return val_temp;
exarkun 0:ea04a1655f3b 197 }
exarkun 0:ea04a1655f3b 198
exarkun 0:ea04a1655f3b 199 //recuperation de la valeur val du sliders h0
exarkun 0:ea04a1655f3b 200 // example : get_val(0);
exarkun 0:ea04a1655f3b 201 void get_val(int n)
exarkun 0:ea04a1655f3b 202 {
exarkun 0:ea04a1655f3b 203 device.printf("get h%d.val %c%c%c",n, 0xff, 0xff, 0xff);//recuperation de la valeur val du sliders h0
exarkun 0:ea04a1655f3b 204 }
exarkun 0:ea04a1655f3b 205 //fonction general recuperation de la valeur val de h0
exarkun 0:ea04a1655f3b 206 void get_val_h0()
exarkun 0:ea04a1655f3b 207 {
exarkun 0:ea04a1655f3b 208 device.printf("get h0.val %c%c%c", 0xff, 0xff, 0xff);//recuperation de la valeur val du sliders h0
exarkun 0:ea04a1655f3b 209 }
exarkun 0:ea04a1655f3b 210
exarkun 0:ea04a1655f3b 211 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 212 // Convertion pulses to radians //
exarkun 0:ea04a1655f3b 213 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 214
exarkun 0:ea04a1655f3b 215 //PI =3.141592653589793 =1000 pulses codeurs
exarkun 0:ea04a1655f3b 216 float pulsesToRadians(int pulses)
exarkun 0:ea04a1655f3b 217 {
exarkun 0:ea04a1655f3b 218 float radians_VAL;
exarkun 0:ea04a1655f3b 219 radians_VAL=(pulses*PI)/1000.;
exarkun 0:ea04a1655f3b 220 return radians_VAL;
exarkun 0:ea04a1655f3b 221 };
exarkun 0:ea04a1655f3b 222
exarkun 0:ea04a1655f3b 223 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 224 // calcule de la vitesse angulaire //
exarkun 0:ea04a1655f3b 225 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 226
exarkun 0:ea04a1655f3b 227 // ici le code du calcule pas encore fait !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
exarkun 0:ea04a1655f3b 228
exarkun 0:ea04a1655f3b 229 // Convert ASCII string to unsigned 32-bit decimal "string is null-terminated"
exarkun 0:ea04a1655f3b 230 unsigned long Str2UDec(unsigned char string[]){
exarkun 0:ea04a1655f3b 231 unsigned long i = 0; // index
exarkun 0:ea04a1655f3b 232 unsigned long n = 0; // number
exarkun 0:ea04a1655f3b 233 while(string[i] != 0){
exarkun 0:ea04a1655f3b 234 n = 10*n +(string[i]-0x30);
exarkun 0:ea04a1655f3b 235 i++;
exarkun 0:ea04a1655f3b 236 }
exarkun 0:ea04a1655f3b 237 return n;
exarkun 0:ea04a1655f3b 238 }
exarkun 0:ea04a1655f3b 239
exarkun 0:ea04a1655f3b 240
exarkun 0:ea04a1655f3b 241 /////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 242 // declaration de la fonction moteur1 //
exarkun 0:ea04a1655f3b 243 /////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 244
exarkun 0:ea04a1655f3b 245 void motor1_mouve(int position1,int T1,int position2,int T2,int position3,int T3)
exarkun 0:ea04a1655f3b 246 {
exarkun 0:ea04a1655f3b 247
exarkun 0:ea04a1655f3b 248 /////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 249 // mouvement trapezoide non tésté //
exarkun 0:ea04a1655f3b 250 /////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 251
exarkun 0:ea04a1655f3b 252 timer1.start(); // déclenchement du timer1
exarkun 0:ea04a1655f3b 253 timer2.start(); // déclenchement du timer2
exarkun 0:ea04a1655f3b 254 //ACC
exarkun 0:ea04a1655f3b 255 consigne=position1 ;
exarkun 0:ea04a1655f3b 256 slope_time=T1;
exarkun 0:ea04a1655f3b 257 start_slope=true;
exarkun 0:ea04a1655f3b 258 //do{} while (timer1.read_ms()!=T1);
exarkun 0:ea04a1655f3b 259 do{} while (timer1.read_ms()<T1);
exarkun 0:ea04a1655f3b 260 if (timer1.read_ms()>T1) // lecture du temps du timer1 en ms
exarkun 0:ea04a1655f3b 261 {
exarkun 0:ea04a1655f3b 262 //device.printf("TIME out T1 ms \r\n");
exarkun 0:ea04a1655f3b 263 device.printf("t0.txt=\"time1out\"%c%c%c", 0xff, 0xff, 0xff);
exarkun 0:ea04a1655f3b 264 }
exarkun 0:ea04a1655f3b 265
exarkun 0:ea04a1655f3b 266 timer1.reset(); // remise à zéro du timer1
exarkun 0:ea04a1655f3b 267 //vmax
exarkun 0:ea04a1655f3b 268 timer1.start(); // déclenchement du timer1
exarkun 0:ea04a1655f3b 269 consigne=position2 ;
exarkun 0:ea04a1655f3b 270 slope_time=T2;
exarkun 0:ea04a1655f3b 271 start_slope=true;
exarkun 0:ea04a1655f3b 272 //do{} while (timer1.read_ms()!=T2);
exarkun 0:ea04a1655f3b 273 do{} while (timer1.read_ms()<T2);
exarkun 0:ea04a1655f3b 274 if (timer1.read_ms()>T2) // lecture du temps du timer1 en ms
exarkun 0:ea04a1655f3b 275 {
exarkun 0:ea04a1655f3b 276 //device.printf("TIME out T2 ms \r\n");
exarkun 0:ea04a1655f3b 277 device.printf("t0.txt=\"time2out\"%c%c%c", 0xff, 0xff, 0xff);
exarkun 0:ea04a1655f3b 278 }
exarkun 0:ea04a1655f3b 279 timer1.reset(); // remise à zéro du timer1
exarkun 0:ea04a1655f3b 280 //DCC
exarkun 0:ea04a1655f3b 281 timer1.start(); // déclenchement du timer1
exarkun 0:ea04a1655f3b 282 consigne=position3 ;
exarkun 0:ea04a1655f3b 283 slope_time=T3;
exarkun 0:ea04a1655f3b 284 start_slope=true;
exarkun 0:ea04a1655f3b 285 //do{} while (timer1.read_ms()!=T3);
exarkun 0:ea04a1655f3b 286 do{} while (timer1.read_ms()<T3);
exarkun 0:ea04a1655f3b 287 if (timer1.read_ms()>T3) // lecture du temps du timer1 en ms
exarkun 0:ea04a1655f3b 288 {
exarkun 0:ea04a1655f3b 289 //device.printf("TIME out T3 ms \r\n");
exarkun 0:ea04a1655f3b 290 device.printf("t0.txt=\"time3out\"%c%c%c", 0xff, 0xff, 0xff);
exarkun 0:ea04a1655f3b 291 }
exarkun 0:ea04a1655f3b 292 timer1.reset(); // remise à zéro du timer1
exarkun 0:ea04a1655f3b 293
exarkun 0:ea04a1655f3b 294 if (timer2.read_ms()>(T1+T2+T3)) // lecture du temps du timer1 en ms
exarkun 0:ea04a1655f3b 295 {
exarkun 0:ea04a1655f3b 296 //device.printf("TIME out motor \r\n");
exarkun 0:ea04a1655f3b 297 device.printf("t0.txt=\"timeMout\"%c%c%c", 0xff, 0xff, 0xff);
exarkun 0:ea04a1655f3b 298 }
exarkun 0:ea04a1655f3b 299
exarkun 0:ea04a1655f3b 300 timer2.reset(); // remise à zéro du timer2
exarkun 0:ea04a1655f3b 301 };
exarkun 0:ea04a1655f3b 302
exarkun 0:ea04a1655f3b 303
exarkun 0:ea04a1655f3b 304
exarkun 0:ea04a1655f3b 305
exarkun 0:ea04a1655f3b 306 //////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 307 // declaration des differantes pages //
exarkun 0:ea04a1655f3b 308 //////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 309
exarkun 0:ea04a1655f3b 310 void page0()//code de la page : 6600ffffff
exarkun 0:ea04a1655f3b 311 {
exarkun 0:ea04a1655f3b 312
exarkun 0:ea04a1655f3b 313 //device.printf("cls RED %c%c%c", 0xff, 0xff, 0xff); //clear screen color red fonnctionne pas ??
exarkun 0:ea04a1655f3b 314 //device.printf("rest%c%c%c", 0xff, 0xff, 0xff);//y as un bug toute les commande prochine fonctionne plus ???
exarkun 0:ea04a1655f3b 315 //wait_ms(10);
exarkun 0:ea04a1655f3b 316
exarkun 0:ea04a1655f3b 317 //device.printf("page %d%c%c%c",0x0, 0xff, 0xff, 0xff);// saut a la page0------sy
exarkun 0:ea04a1655f3b 318 //wait_ms(10);
exarkun 0:ea04a1655f3b 319 device.printf("t6.txt=\"soft V0.01\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 320 wait_ms(5);
exarkun 0:ea04a1655f3b 321 device.printf("b13.txt=\"flyready\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 322 wait_ms(5);
exarkun 0:ea04a1655f3b 323 device.printf("b12.txt=\"BREAK\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 324 wait_ms(5);
exarkun 0:ea04a1655f3b 325 device.printf("b11.txt=\"LANDING\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 326 wait_ms(5);
exarkun 0:ea04a1655f3b 327 device.printf("b21.txt=\"Quantum\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 328 wait_ms(5);
exarkun 0:ea04a1655f3b 329
exarkun 0:ea04a1655f3b 330 device.printf("b18.txt=\"Speed M\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 331 wait_ms(5);
exarkun 0:ea04a1655f3b 332 device.printf("b19.txt=\"couple M\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 333 wait_ms(5);
exarkun 0:ea04a1655f3b 334 device.printf("b20.txt=\"Afterburner\"%c%c%c", 0xff, 0xff, 0xff);//affiche la version soft -------sy
exarkun 0:ea04a1655f3b 335 wait_ms(5);
exarkun 0:ea04a1655f3b 336
exarkun 0:ea04a1655f3b 337 //device.printf("b0.pic=17%c%c%c", 0xff, 0xff, 0xff);//chager l image du bouton b0 par l image n°17------sy
exarkun 0:ea04a1655f3b 338 //wait_ms(10);
exarkun 0:ea04a1655f3b 339 //device.printf("ref b0%c%c%c", 0xff, 0xff, 0xff);//rafrechir b0--------------sy
exarkun 0:ea04a1655f3b 340
exarkun 0:ea04a1655f3b 341 //wait_ms(10);
exarkun 0:ea04a1655f3b 342
exarkun 0:ea04a1655f3b 343 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 344 //FLY READY switch
exarkun 0:ea04a1655f3b 345 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x19)&&(mRxMsg[3] == 0x01))
exarkun 0:ea04a1655f3b 346 {
exarkun 0:ea04a1655f3b 347 //keyboard.printf("r");//flight ready
exarkun 0:ea04a1655f3b 348 }//uniquement le bouton allumeras la led 1 en release ---------------SY
exarkun 0:ea04a1655f3b 349 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 350 //space break switch
exarkun 0:ea04a1655f3b 351 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x18)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 352 {myled3=1;
exarkun 0:ea04a1655f3b 353 //keyboard.printf("x");//spacebreak
exarkun 0:ea04a1655f3b 354 //wait(0.5);
exarkun 0:ea04a1655f3b 355 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 356 {
exarkun 0:ea04a1655f3b 357 //lectureRSlcd();
exarkun 0:ea04a1655f3b 358 //keyboard.printf("x");//spacebreak
exarkun 0:ea04a1655f3b 359 //wait(0.035);
exarkun 0:ea04a1655f3b 360 }
exarkun 0:ea04a1655f3b 361 }//uniquement le bouton allumeras la led 2 en press event ---------------SY
exarkun 0:ea04a1655f3b 362 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 363 //LANDING switch
exarkun 0:ea04a1655f3b 364 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x17)&&(mRxMsg[3] == 0x01))
exarkun 0:ea04a1655f3b 365 {
exarkun 0:ea04a1655f3b 366 //keyboard.printf("n");//landing mode
exarkun 0:ea04a1655f3b 367 }//uniquement le bouton home allumeras la led 3 en release ---------------SY
exarkun 0:ea04a1655f3b 368
exarkun 0:ea04a1655f3b 369 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 370 //strafe up switch
exarkun 0:ea04a1655f3b 371 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x13)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 372 {myled3=1;
exarkun 0:ea04a1655f3b 373 //keyboard.printf(" ");//strafe up
exarkun 0:ea04a1655f3b 374 //wait(0.5);
exarkun 0:ea04a1655f3b 375 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 376 {
exarkun 0:ea04a1655f3b 377 //lectureRSlcd();
exarkun 0:ea04a1655f3b 378 //keyboard.printf(" ");//strafe up
exarkun 0:ea04a1655f3b 379 //wait(0.035);
exarkun 0:ea04a1655f3b 380 }
exarkun 0:ea04a1655f3b 381
exarkun 0:ea04a1655f3b 382 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 383
exarkun 0:ea04a1655f3b 384 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 385 //strafe down switch
exarkun 0:ea04a1655f3b 386 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x14)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 387 {myled3=1;
exarkun 0:ea04a1655f3b 388 //keyboard.keyCode(KEY_CTRL);//strafe down
exarkun 0:ea04a1655f3b 389 //wait(0.5);
exarkun 0:ea04a1655f3b 390 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 391 {
exarkun 0:ea04a1655f3b 392 //lectureRSlcd();
exarkun 0:ea04a1655f3b 393 //keyboard.keyCode(KEY_CTRL);//strafe down
exarkun 0:ea04a1655f3b 394 //wait(0.035);
exarkun 0:ea04a1655f3b 395 }
exarkun 0:ea04a1655f3b 396
exarkun 0:ea04a1655f3b 397 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 398
exarkun 0:ea04a1655f3b 399 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 400 //forward switch
exarkun 0:ea04a1655f3b 401 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x02)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 402 {myled3=1;
exarkun 0:ea04a1655f3b 403 //keyboard.printf("w");//vers l'avant
exarkun 0:ea04a1655f3b 404 //wait(0.5);
exarkun 0:ea04a1655f3b 405
exarkun 0:ea04a1655f3b 406 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 407 {
exarkun 0:ea04a1655f3b 408 //lectureRSlcd();
exarkun 0:ea04a1655f3b 409 //keyboard.printf("w");//vers l'avant
exarkun 0:ea04a1655f3b 410 //wait(0.035);
exarkun 0:ea04a1655f3b 411 }
exarkun 0:ea04a1655f3b 412
exarkun 0:ea04a1655f3b 413 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 414
exarkun 0:ea04a1655f3b 415 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 416 //rearward switch
exarkun 0:ea04a1655f3b 417 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x01)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 418 {myled3=1;
exarkun 0:ea04a1655f3b 419 //keyboard.printf("s");//vers l arriere
exarkun 0:ea04a1655f3b 420 //wait(0.5);
exarkun 0:ea04a1655f3b 421
exarkun 0:ea04a1655f3b 422 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 423 {
exarkun 0:ea04a1655f3b 424 //lectureRSlcd();
exarkun 0:ea04a1655f3b 425 //keyboard.printf("s");//vers l arriere
exarkun 0:ea04a1655f3b 426 //wait(0.035);
exarkun 0:ea04a1655f3b 427 }
exarkun 0:ea04a1655f3b 428
exarkun 0:ea04a1655f3b 429 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 430
exarkun 0:ea04a1655f3b 431 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 432 //Right switch
exarkun 0:ea04a1655f3b 433 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x03)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 434 {myled3=1;
exarkun 0:ea04a1655f3b 435 //keyboard.printf("d");//vers la droite
exarkun 0:ea04a1655f3b 436 //wait(0.5);
exarkun 0:ea04a1655f3b 437
exarkun 0:ea04a1655f3b 438 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 439 {
exarkun 0:ea04a1655f3b 440 //lectureRSlcd();
exarkun 0:ea04a1655f3b 441 //keyboard.printf("d");//vers la droite
exarkun 0:ea04a1655f3b 442 //wait(0.035);
exarkun 0:ea04a1655f3b 443 }
exarkun 0:ea04a1655f3b 444
exarkun 0:ea04a1655f3b 445 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 446
exarkun 0:ea04a1655f3b 447 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 448 //Left switch
exarkun 0:ea04a1655f3b 449 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x04)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 450 {myled3=1;
exarkun 0:ea04a1655f3b 451
exarkun 0:ea04a1655f3b 452 //keyboard.printf("a");//vers la gauche
exarkun 0:ea04a1655f3b 453 //wait(0.5);
exarkun 0:ea04a1655f3b 454
exarkun 0:ea04a1655f3b 455 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 456 {
exarkun 0:ea04a1655f3b 457 //lectureRSlcd();
exarkun 0:ea04a1655f3b 458 //keyboard.printf("a");//vers la gauche
exarkun 0:ea04a1655f3b 459 //wait(0.035);
exarkun 0:ea04a1655f3b 460 }
exarkun 0:ea04a1655f3b 461
exarkun 0:ea04a1655f3b 462 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 463
exarkun 0:ea04a1655f3b 464 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 465 //roll left switch
exarkun 0:ea04a1655f3b 466 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1a)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 467 {myled3=1;
exarkun 0:ea04a1655f3b 468 //keyboard.printf("e");//rouli gauche
exarkun 0:ea04a1655f3b 469 //wait(0.5);
exarkun 0:ea04a1655f3b 470
exarkun 0:ea04a1655f3b 471 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 472 {
exarkun 0:ea04a1655f3b 473 //lectureRSlcd();
exarkun 0:ea04a1655f3b 474 //keyboard.printf("e");//rouli gauche
exarkun 0:ea04a1655f3b 475 //wait(0.035);
exarkun 0:ea04a1655f3b 476 }
exarkun 0:ea04a1655f3b 477
exarkun 0:ea04a1655f3b 478 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 479
exarkun 0:ea04a1655f3b 480 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 481 //roll Right switch
exarkun 0:ea04a1655f3b 482 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x05)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 483 {myled3=1;
exarkun 0:ea04a1655f3b 484
exarkun 0:ea04a1655f3b 485 //keyboard.printf("q");//rouli droit
exarkun 0:ea04a1655f3b 486 //wait(0.5);
exarkun 0:ea04a1655f3b 487
exarkun 0:ea04a1655f3b 488 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 489 {
exarkun 0:ea04a1655f3b 490 //lectureRSlcd();
exarkun 0:ea04a1655f3b 491 //keyboard.printf("q");//rouli droit
exarkun 0:ea04a1655f3b 492 //wait(0.035);
exarkun 0:ea04a1655f3b 493 }
exarkun 0:ea04a1655f3b 494
exarkun 0:ea04a1655f3b 495 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 496
exarkun 0:ea04a1655f3b 497 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 498 //tangage vers le bas switch
exarkun 0:ea04a1655f3b 499 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1b)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 500 {myled3=1;
exarkun 0:ea04a1655f3b 501
exarkun 0:ea04a1655f3b 502 //keyboard.printf("");//touche non affecté
exarkun 0:ea04a1655f3b 503 //wait(0.5);
exarkun 0:ea04a1655f3b 504
exarkun 0:ea04a1655f3b 505 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 506 {
exarkun 0:ea04a1655f3b 507 //lectureRSlcd();
exarkun 0:ea04a1655f3b 508 //keyboard.printf("");//touche non affecté la touche non connue
exarkun 0:ea04a1655f3b 509 //wait(0.035);
exarkun 0:ea04a1655f3b 510 }
exarkun 0:ea04a1655f3b 511
exarkun 0:ea04a1655f3b 512 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 513
exarkun 0:ea04a1655f3b 514 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 515 //tangage vers le haut switch
exarkun 0:ea04a1655f3b 516 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1b)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 517 {myled3=1;
exarkun 0:ea04a1655f3b 518
exarkun 0:ea04a1655f3b 519 //keyboard.printf("");//touche non affecté la touche non connue
exarkun 0:ea04a1655f3b 520 //wait(0.5);
exarkun 0:ea04a1655f3b 521
exarkun 0:ea04a1655f3b 522 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 523 {
exarkun 0:ea04a1655f3b 524 //lectureRSlcd();
exarkun 0:ea04a1655f3b 525 //keyboard.printf("");//touche non affecté
exarkun 0:ea04a1655f3b 526 //wait(0.035);
exarkun 0:ea04a1655f3b 527 }
exarkun 0:ea04a1655f3b 528
exarkun 0:ea04a1655f3b 529 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 530
exarkun 0:ea04a1655f3b 531
exarkun 0:ea04a1655f3b 532
exarkun 0:ea04a1655f3b 533 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 534 //quantum drive
exarkun 0:ea04a1655f3b 535 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1f)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 536 {myled3=1;
exarkun 0:ea04a1655f3b 537
exarkun 0:ea04a1655f3b 538 //keyboard.printf("b");//touche non affecté la touche non connue
exarkun 0:ea04a1655f3b 539 //wait(0.5);
exarkun 0:ea04a1655f3b 540
exarkun 0:ea04a1655f3b 541 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 542 {
exarkun 0:ea04a1655f3b 543 //lectureRSlcd();
exarkun 0:ea04a1655f3b 544 //keyboard.printf("b");//touche non affecté
exarkun 0:ea04a1655f3b 545 //wait(0.035);
exarkun 0:ea04a1655f3b 546 }
exarkun 0:ea04a1655f3b 547
exarkun 0:ea04a1655f3b 548 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 549
exarkun 0:ea04a1655f3b 550 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 551 //Speed M
exarkun 0:ea04a1655f3b 552 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1c)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 553 {myled3=1;
exarkun 0:ea04a1655f3b 554
exarkun 0:ea04a1655f3b 555 //keyboard.printf("c");//touche non affecté la touche non connue
exarkun 0:ea04a1655f3b 556 //wait(0.5);
exarkun 0:ea04a1655f3b 557
exarkun 0:ea04a1655f3b 558 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 559 {
exarkun 0:ea04a1655f3b 560 //lectureRSlcd();
exarkun 0:ea04a1655f3b 561 //keyboard.printf("c");//touche non affecté
exarkun 0:ea04a1655f3b 562 //wait(0.035);
exarkun 0:ea04a1655f3b 563 }
exarkun 0:ea04a1655f3b 564
exarkun 0:ea04a1655f3b 565 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 566
exarkun 0:ea04a1655f3b 567 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 568 //Speed M
exarkun 0:ea04a1655f3b 569 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1c)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 570 {myled3=1;
exarkun 0:ea04a1655f3b 571
exarkun 0:ea04a1655f3b 572 //keyboard.printf("b");//touche non affecté la touche non connue
exarkun 0:ea04a1655f3b 573 //wait(0.5);
exarkun 0:ea04a1655f3b 574
exarkun 0:ea04a1655f3b 575 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 576 {
exarkun 0:ea04a1655f3b 577 //lectureRSlcd();
exarkun 0:ea04a1655f3b 578 //keyboard.printf("c");//touche non affecté
exarkun 0:ea04a1655f3b 579 //wait(0.035);
exarkun 0:ea04a1655f3b 580 }
exarkun 0:ea04a1655f3b 581
exarkun 0:ea04a1655f3b 582 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 583
exarkun 0:ea04a1655f3b 584 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 585 //Afterburner
exarkun 0:ea04a1655f3b 586 if((mRxMsg[0] == 0x65)&&(mRxMsg[1] == 0x00)&&(mRxMsg[2] == 0x1c)&&(mRxMsg[3] == 0x01))//press
exarkun 0:ea04a1655f3b 587 {myled3=1;
exarkun 0:ea04a1655f3b 588
exarkun 0:ea04a1655f3b 589 //keyboard.keyCode(KEY_SHIFT);
exarkun 0:ea04a1655f3b 590 //wait(0.5);
exarkun 0:ea04a1655f3b 591
exarkun 0:ea04a1655f3b 592 while (mRxMsg[3]!=0x00)
exarkun 0:ea04a1655f3b 593 {
exarkun 0:ea04a1655f3b 594 //lectureRSlcd();
exarkun 0:ea04a1655f3b 595 //keyboard.keyCode(KEY_SHIFT);
exarkun 0:ea04a1655f3b 596 //wait(0.035);
exarkun 0:ea04a1655f3b 597 }
exarkun 0:ea04a1655f3b 598
exarkun 0:ea04a1655f3b 599 }//uniquement le bouton allumeras la led 4 en release ---------------SY
exarkun 0:ea04a1655f3b 600
exarkun 0:ea04a1655f3b 601
exarkun 0:ea04a1655f3b 602 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 603
exarkun 0:ea04a1655f3b 604 //ici il faut completer le code pour pouvoir detecter le bon bouton en press event et release event
exarkun 0:ea04a1655f3b 605 //example le bouton start press event 65 01 01 01 ff ff ff et en release event 65 01 01 00 ff ff ff . rem:code touche repris par simulation avec le soft nextion
exarkun 0:ea04a1655f3b 606
exarkun 0:ea04a1655f3b 607 }
exarkun 0:ea04a1655f3b 608
exarkun 0:ea04a1655f3b 609 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 610 //******************************************************************page1******************************************************************//
exarkun 0:ea04a1655f3b 611 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 612 void page1()//code de la page : 6601ffffff
exarkun 0:ea04a1655f3b 613 {
exarkun 0:ea04a1655f3b 614 device.printf("bt0.txt=\"BREAK1\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 615 }
exarkun 0:ea04a1655f3b 616
exarkun 0:ea04a1655f3b 617 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 618 //******************************************************************page2******************************************************************//
exarkun 0:ea04a1655f3b 619 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 620 void page2()//code de la page : 6602ffffff
exarkun 0:ea04a1655f3b 621 {
exarkun 0:ea04a1655f3b 622 device.printf("b0.txt=\"BREAK2\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton b0 -------sy
exarkun 0:ea04a1655f3b 623 get_val(3);//donner l'ordre d envoyer la valeur val de h3
exarkun 0:ea04a1655f3b 624 int valeur_val=lecture_slider_RS_lcd();//recuperation de la valeur val de h3
exarkun 0:ea04a1655f3b 625 device.printf("n3.val=%d %c%c%c", valeur_val, 0xff, 0xff, 0xff);//affiche le nombre sur n1 -------sy
exarkun 0:ea04a1655f3b 626 device.printf("z0.val=%d %c%c%c", valeur_val, 0xff, 0xff, 0xff);//affiche le nombre sur z0 gauge -------sy
exarkun 0:ea04a1655f3b 627 }
exarkun 0:ea04a1655f3b 628
exarkun 0:ea04a1655f3b 629 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 630 //******************************************************************page3******************************************************************//
exarkun 0:ea04a1655f3b 631 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 632 void page3()//code de la page : 6603ffffff
exarkun 0:ea04a1655f3b 633 {
exarkun 0:ea04a1655f3b 634 device.printf("b19.txt=\"BREAK3\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton b19 -------sy
exarkun 0:ea04a1655f3b 635 }
exarkun 0:ea04a1655f3b 636
exarkun 0:ea04a1655f3b 637 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 638 //******************************************************************page4******************************************************************//
exarkun 0:ea04a1655f3b 639 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 640 void page4()//code de la page : 6604ffffff
exarkun 0:ea04a1655f3b 641 {
exarkun 0:ea04a1655f3b 642 device.printf("t0.txt=\"BREAK4\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 643
exarkun 0:ea04a1655f3b 644 get_val_h0();
exarkun 0:ea04a1655f3b 645 val_temp1=lecture_slider_RS_lcd();//recuperation de la valeur du sliders h0 dans val_temp
exarkun 0:ea04a1655f3b 646 device.printf("n1.val=%d %c%c%c", val_temp1, 0xff, 0xff, 0xff);//affiche le nombre sur n1 -------sy
exarkun 0:ea04a1655f3b 647
exarkun 0:ea04a1655f3b 648 }
exarkun 0:ea04a1655f3b 649
exarkun 0:ea04a1655f3b 650 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 651 //******************************************************************page5******************************************************************//
exarkun 0:ea04a1655f3b 652 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 653 void page5()//code de la page : 6605ffffff
exarkun 0:ea04a1655f3b 654 {
exarkun 0:ea04a1655f3b 655 device.printf("t0.txt=\"BREAK5\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 656 device.printf("t1.txt=\"500ms/div\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 657
exarkun 0:ea04a1655f3b 658 device.printf("g0.txt=\"position M\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 659 device.printf("add 1,0,%d%c%c%c", (position_actuelle/500), 0xff, 0xff, 0xff);// pour la fonction waveform add id1,chanel0,position actu
exarkun 0:ea04a1655f3b 660
exarkun 0:ea04a1655f3b 661 }
exarkun 0:ea04a1655f3b 662
exarkun 0:ea04a1655f3b 663 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 664 //******************************************************************page6******************************************************************//
exarkun 0:ea04a1655f3b 665 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 666
exarkun 0:ea04a1655f3b 667 void page6()//code de la page : 6606ffffff
exarkun 0:ea04a1655f3b 668 {
exarkun 0:ea04a1655f3b 669
exarkun 0:ea04a1655f3b 670 device.printf("t1.txt=\"courant\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 671 device.printf("t0.txt=\"position\"%c%c%c", 0xff, 0xff, 0xff);//affiche break sur bouton bt0 -------sy
exarkun 0:ea04a1655f3b 672 device.printf("add 2,0,%d%c%c%c", (position_actuelle/500), 0xff, 0xff, 0xff);// pour la fonction waveform add id1,chanel0,position actu
exarkun 0:ea04a1655f3b 673
exarkun 0:ea04a1655f3b 674 }
exarkun 0:ea04a1655f3b 675
exarkun 0:ea04a1655f3b 676
exarkun 0:ea04a1655f3b 677 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 678 //******************************************************************LES TASKS**************************************************************//
exarkun 0:ea04a1655f3b 679 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 680
exarkun 0:ea04a1655f3b 681 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 682 // TASKS1 //
exarkun 0:ea04a1655f3b 683 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 684 void task1_switch()
exarkun 0:ea04a1655f3b 685 {
exarkun 0:ea04a1655f3b 686
exarkun 0:ea04a1655f3b 687 //lecture valeur codeur et conversion en radians
exarkun 0:ea04a1655f3b 688 position_actuelle=qei.GetPosition();//lecture valeur codeur et affectation a la variable globale
exarkun 0:ea04a1655f3b 689 Tetam=pulsesToRadians(position_actuelle);//conversion valeur impulsionel en radians
exarkun 0:ea04a1655f3b 690
exarkun 0:ea04a1655f3b 691 //Calcul de la nouvelle consigne:
exarkun 0:ea04a1655f3b 692
exarkun 0:ea04a1655f3b 693 //Etape1:derivee filtree
exarkun 0:ea04a1655f3b 694 dTetam=1./(1.+taud*2./dt_vit)*(-dTetam_n1*(1.-taud*2./dt_vit)+2./dt_vit*(Tetam-Tetam_n1));
exarkun 0:ea04a1655f3b 695
exarkun 0:ea04a1655f3b 696 //Etape2:calcul de integ non saturee
exarkun 0:ea04a1655f3b 697 integ=integ_n1+dt_vit/2.*((Tetaco-Tetam)+(Tetaco_n1-Tetam_n1));
exarkun 0:ea04a1655f3b 698
exarkun 0:ea04a1655f3b 699 //Etape3:Calcul de A non saturee
exarkun 0:ea04a1655f3b 700 A=Kv*K_sw/Umax*(-dTetam+Kp*Ki*integ-Kp*Tetam);
exarkun 0:ea04a1655f3b 701
exarkun 0:ea04a1655f3b 702 //Etape 4 et 5 : calcul de integ saturee
exarkun 0:ea04a1655f3b 703 if (A>1)
exarkun 0:ea04a1655f3b 704 {
exarkun 0:ea04a1655f3b 705 integ=1./Kp/Ki*(Umax/Kv/K_sw+dTetam+Kp*Tetam);
exarkun 0:ea04a1655f3b 706 A=1;
exarkun 0:ea04a1655f3b 707 }
exarkun 0:ea04a1655f3b 708 if(A<-1)
exarkun 0:ea04a1655f3b 709 {
exarkun 0:ea04a1655f3b 710 integ=1./Kp/Ki*(-Umax/Kv/K_sw+dTetam+Kp*Tetam);
exarkun 0:ea04a1655f3b 711 A=-1;
exarkun 0:ea04a1655f3b 712 }
exarkun 0:ea04a1655f3b 713
exarkun 0:ea04a1655f3b 714 //Etape 6:affectation du signe de rotation a l'etage de puissance
exarkun 0:ea04a1655f3b 715 if (A>0)
exarkun 0:ea04a1655f3b 716 {
exarkun 0:ea04a1655f3b 717 signe_rot=1;
exarkun 0:ea04a1655f3b 718 sens_rotation_moteur1.write(signe_rot); //affectation du sens de rotation moteur1
exarkun 0:ea04a1655f3b 719 cyclic=A;
exarkun 0:ea04a1655f3b 720 }
exarkun 0:ea04a1655f3b 721 else
exarkun 0:ea04a1655f3b 722 {
exarkun 0:ea04a1655f3b 723 signe_rot=0;
exarkun 0:ea04a1655f3b 724 sens_rotation_moteur1.write(signe_rot); //affectation du sens de rotation moteur1
exarkun 0:ea04a1655f3b 725 cyclic=-A;//peut etre une erreur ici sy??
exarkun 0:ea04a1655f3b 726 }
exarkun 0:ea04a1655f3b 727
exarkun 0:ea04a1655f3b 728 PWM1.write(cyclic);// affectation de la valeur calculé en pwm
exarkun 0:ea04a1655f3b 729
exarkun 0:ea04a1655f3b 730 // enregistrement des valeurs N-1
exarkun 0:ea04a1655f3b 731 position_actuelle_n1=position_actuelle;
exarkun 0:ea04a1655f3b 732 dTetam_n1=dTetam;
exarkun 0:ea04a1655f3b 733 Tetaco_n1=Tetaco;
exarkun 0:ea04a1655f3b 734 Tetam_n1=Tetam;
exarkun 0:ea04a1655f3b 735 integ_n1=integ;
exarkun 0:ea04a1655f3b 736
exarkun 0:ea04a1655f3b 737 //myled1=!myled1;//changement etat de la led1
exarkun 0:ea04a1655f3b 738 }
exarkun 0:ea04a1655f3b 739
exarkun 0:ea04a1655f3b 740 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 741 // TASKS2 //
exarkun 0:ea04a1655f3b 742 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 743 void task2_switch()
exarkun 0:ea04a1655f3b 744 {
exarkun 0:ea04a1655f3b 745 // pc.printf("%f\r\n", Tetaco);//valeur float consigne en radians le renvoyé par usb
exarkun 0:ea04a1655f3b 746 // pc.printf("%i\r\n", position_actuelle);//valeur int du codeur renvoyé par usb
exarkun 0:ea04a1655f3b 747 // pc.printf("%f\r\n", Tetam);//valeur float du codeur en radians renvoyé par usb
exarkun 0:ea04a1655f3b 748 // pc.printf("dTetam : %f\r\n", dTetam);//valeur float dTetam
exarkun 0:ea04a1655f3b 749 // pc.printf("integ : %f\r\n", integ);//valeur float integ
exarkun 0:ea04a1655f3b 750 // pc.printf("%f\r\n", A);//valeur float du codeur en radians le renvoyé par usb
exarkun 0:ea04a1655f3b 751 // pc.printf("%e\r\n", cyclic);//valeur float du codeur en radians le renvoyé par usb
exarkun 0:ea04a1655f3b 752 // pc.printf("\r\n");//retour chario
exarkun 0:ea04a1655f3b 753 // pc.printf("$%d %d %d;", position_actuelle,position_actuelle/2,position_actuelle/10 ); //utiliser avec logicielle serial port ploter
exarkun 0:ea04a1655f3b 754 // pc.printf("$%d ;", position_actuelle); //utiliser avec logicielle serial port ploter
exarkun 0:ea04a1655f3b 755 // pc.printf("%d",position_actuelle); //utiliser avec logicielle serial port ploter
exarkun 0:ea04a1655f3b 756
exarkun 0:ea04a1655f3b 757 // this code is a crude template
exarkun 0:ea04a1655f3b 758 // you will need to edit this
exarkun 0:ea04a1655f3b 759
exarkun 0:ea04a1655f3b 760
exarkun 0:ea04a1655f3b 761 // use this loop if sending integers----------------------------------------------SY
exarkun 0:ea04a1655f3b 762
exarkun 0:ea04a1655f3b 763 // int ppp = position_actuelle;
exarkun 0:ea04a1655f3b 764 // char text[7];
exarkun 0:ea04a1655f3b 765 // snprintf(text, 7, "%d", ppp);
exarkun 0:ea04a1655f3b 766 // pc.printf("\r");
exarkun 0:ea04a1655f3b 767 // pc.printf(text);
exarkun 0:ea04a1655f3b 768
exarkun 0:ea04a1655f3b 769
exarkun 0:ea04a1655f3b 770 // or use this loop if sending floats
exarkun 0:ea04a1655f3b 771
exarkun 0:ea04a1655f3b 772 // float ppp =position_actuelle;
exarkun 0:ea04a1655f3b 773 // char ppp_text[30];
exarkun 0:ea04a1655f3b 774 // dtostrf(ppp, 10, 10, ppp_text);
exarkun 0:ea04a1655f3b 775 // char text[31];
exarkun 0:ea04a1655f3b 776 // snprintf(text, 31, "%s", ppp_text);
exarkun 0:ea04a1655f3b 777 // pc.printf(text);
exarkun 0:ea04a1655f3b 778 //device.printf("n0.val=%d%c%c%c", position_actuelle, 0xff, 0xff, 0xff);// affiche la valeur de position sur l afficheur nextion
exarkun 0:ea04a1655f3b 779
exarkun 0:ea04a1655f3b 780 };
exarkun 0:ea04a1655f3b 781
exarkun 0:ea04a1655f3b 782 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 783 // TASKS3 //
exarkun 0:ea04a1655f3b 784 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 785 void task3_switch()
exarkun 0:ea04a1655f3b 786 {
exarkun 0:ea04a1655f3b 787
exarkun 0:ea04a1655f3b 788 //generation de la trajectoire
exarkun 0:ea04a1655f3b 789 if(start_slope)
exarkun 0:ea04a1655f3b 790 {
exarkun 0:ea04a1655f3b 791 Teta_debut=Tetam;//affectation de la mesure a la variable globale
exarkun 0:ea04a1655f3b 792 Teta_fin=pulsesToRadians(consigne);//affectation de la consigne a la variable globale
exarkun 0:ea04a1655f3b 793 Teta_diff = Teta_fin - Teta_debut;//calcule de la position a parcourir
exarkun 0:ea04a1655f3b 794 delta_Teta=(Teta_diff/slope_time)*5*1e-4;//calcule de la distance ideal parcouru en 500us "regle de trois"!!!
exarkun 0:ea04a1655f3b 795 count_slope = 0;//mise a zero du conteur de pas
exarkun 0:ea04a1655f3b 796 count_max = slope_time/(5*1e-4);//calcule du nombre max de pas
exarkun 0:ea04a1655f3b 797 start_slope=false;
exarkun 0:ea04a1655f3b 798 }
exarkun 0:ea04a1655f3b 799 count_slope++;//incrementation nombre de pas
exarkun 0:ea04a1655f3b 800 if (count_slope<=count_max){Tetaco=Tetaco+delta_Teta;}
exarkun 0:ea04a1655f3b 801
exarkun 0:ea04a1655f3b 802 }
exarkun 0:ea04a1655f3b 803
exarkun 0:ea04a1655f3b 804 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 805 // TASKS4 //
exarkun 0:ea04a1655f3b 806 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 807 void task4_switch()
exarkun 0:ea04a1655f3b 808 {
exarkun 0:ea04a1655f3b 809 //device.printf("$%d;", position_actuelle); //utiliser avec logicielle serial port ploter
exarkun 0:ea04a1655f3b 810 //pc.printf("0x%04x\n", valueFromMaster);
exarkun 0:ea04a1655f3b 811 //pc.printf("%04x", valueFromMaster);
exarkun 0:ea04a1655f3b 812 //device.printf("add 1,0,%d%c%c%c", (position_actuelle/500), 0xff, 0xff, 0xff);// pour la fonction waveform add id1,chanel0,position actu
exarkun 0:ea04a1655f3b 813 //device.printf("add 1,0,%d%c%c%c", (ADCdata)/10, 0xff, 0xff, 0xff);// pour la fonction waveform add id1,chanel0,position actu
exarkun 0:ea04a1655f3b 814
exarkun 0:ea04a1655f3b 815 }
exarkun 0:ea04a1655f3b 816
exarkun 0:ea04a1655f3b 817 //////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 818 // TASKS5 reception et transfert données sur SPI //
exarkun 0:ea04a1655f3b 819 //////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 820 void task5_switch()
exarkun 0:ea04a1655f3b 821 {
exarkun 0:ea04a1655f3b 822 //reply=0xAAAA;
exarkun 0:ea04a1655f3b 823 //spi1.reply(reply);
exarkun 0:ea04a1655f3b 824 if (spi1.receive())
exarkun 0:ea04a1655f3b 825 {
exarkun 0:ea04a1655f3b 826 valueFromMaster = spi1.read();
exarkun 0:ea04a1655f3b 827
exarkun 0:ea04a1655f3b 828 Spi_val_RX[x]=valueFromMaster;
exarkun 0:ea04a1655f3b 829 if (x==9){x=0;}
exarkun 0:ea04a1655f3b 830 else {x++;}
exarkun 0:ea04a1655f3b 831
exarkun 0:ea04a1655f3b 832 // pc.printf("%d Something rxvd, and should have replied with %d\n\r", counter++, reply);
exarkun 0:ea04a1655f3b 833 //reply=valueFromMaster;
exarkun 0:ea04a1655f3b 834 //spi1.reply(reply); // Prime SPI with next reply
exarkun 0:ea04a1655f3b 835 //reply--;
exarkun 0:ea04a1655f3b 836
exarkun 0:ea04a1655f3b 837 // pc.printf(" Received value from Master (%d) Next reply will be %d \r\n", valueFromMaster, reply);
exarkun 0:ea04a1655f3b 838 //if (reply==0){reply=65535;}//100
exarkun 0:ea04a1655f3b 839 }
exarkun 0:ea04a1655f3b 840
exarkun 0:ea04a1655f3b 841 // ici code de la tache 5
exarkun 0:ea04a1655f3b 842 }
exarkun 0:ea04a1655f3b 843
exarkun 0:ea04a1655f3b 844 /////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 845 // TASKS6 lecture de l'image courant moteur //
exarkun 0:ea04a1655f3b 846 /////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 847 void task6_switch()
exarkun 0:ea04a1655f3b 848 {
exarkun 0:ea04a1655f3b 849
exarkun 0:ea04a1655f3b 850 //ADCdata=Ain*3.3; //lecture de l'image du courant
exarkun 0:ea04a1655f3b 851
exarkun 0:ea04a1655f3b 852 for (int z=0;z<=9;z++)
exarkun 0:ea04a1655f3b 853 {
exarkun 0:ea04a1655f3b 854 ADCdata=ADCdata+Ain*3.3; //sum 10 samples
exarkun 0:ea04a1655f3b 855 }
exarkun 0:ea04a1655f3b 856 ADCdata=ADCdata/10; //divide by 10
exarkun 0:ea04a1655f3b 857 //ADCdata=Ain.read_u16();
exarkun 0:ea04a1655f3b 858 if(ADCdata>=imax)//si l'image du courant egale a 0.5v je coupe le moteur .
exarkun 0:ea04a1655f3b 859 {
exarkun 0:ea04a1655f3b 860 while(1){
exarkun 0:ea04a1655f3b 861 PWM1.write(0);//mise du signal pwm a zero.
exarkun 0:ea04a1655f3b 862 // pc.printf("%1.3f",ADCdata);
exarkun 0:ea04a1655f3b 863 // pc.printf("V\n\r");
exarkun 0:ea04a1655f3b 864 // pc.printf("current overload \n\r");
exarkun 0:ea04a1655f3b 865
exarkun 0:ea04a1655f3b 866 //attendre que le manipulateur appuis sur le bouton restart a coder .
exarkun 0:ea04a1655f3b 867 //veriffier que les plaques sont bien en position .
exarkun 0:ea04a1655f3b 868 //faire une home ou continuer la trajectoire .a voir !!!!
exarkun 0:ea04a1655f3b 869 }
exarkun 0:ea04a1655f3b 870 }
exarkun 0:ea04a1655f3b 871 // ici code de la tache 6
exarkun 0:ea04a1655f3b 872
exarkun 0:ea04a1655f3b 873 }
exarkun 0:ea04a1655f3b 874
exarkun 0:ea04a1655f3b 875 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 876 // TASKS7 //
exarkun 0:ea04a1655f3b 877 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 878 void task7_switch()
exarkun 0:ea04a1655f3b 879 {
exarkun 0:ea04a1655f3b 880 //lectureRSlcd();
exarkun 0:ea04a1655f3b 881 if(device.readable())
exarkun 0:ea04a1655f3b 882 {
exarkun 0:ea04a1655f3b 883 myled1=1;
exarkun 0:ea04a1655f3b 884 charac = device.getc();
exarkun 0:ea04a1655f3b 885 mRxMsg[mRxIdx] = charac;
exarkun 0:ea04a1655f3b 886 mRxIdx++;
exarkun 0:ea04a1655f3b 887 if ((mRxIdx >= 3) && (mRxMsg[mRxIdx-1] == 0xff) && (mRxMsg[mRxIdx-2] == 0xff) && (mRxMsg[mRxIdx-3] == 0xff)) //valid rx message
exarkun 0:ea04a1655f3b 888 {
exarkun 0:ea04a1655f3b 889 myled3=1;
exarkun 0:ea04a1655f3b 890 mRxIdx=0;
exarkun 0:ea04a1655f3b 891
exarkun 0:ea04a1655f3b 892 if(mRxMsg[0] == 0x67) //Touch coordinate data return
exarkun 0:ea04a1655f3b 893 { mTouchX = (mRxMsg[1]*256) + mRxMsg[2];
exarkun 0:ea04a1655f3b 894 mTouchY = (mRxMsg[3]*256) + mRxMsg[4];
exarkun 0:ea04a1655f3b 895 if(mRxMsg[5] == 0x01)
exarkun 0:ea04a1655f3b 896 mTouch = true;
exarkun 0:ea04a1655f3b 897 else
exarkun 0:ea04a1655f3b 898 mTouch = false;
exarkun 0:ea04a1655f3b 899 }
exarkun 0:ea04a1655f3b 900 myled3=0;
exarkun 0:ea04a1655f3b 901 }
exarkun 0:ea04a1655f3b 902 //vitesse_actuelle=qei.GetVelocity(); //fonctionne pas ...
exarkun 0:ea04a1655f3b 903 // ici code de la tache 7
exarkun 0:ea04a1655f3b 904 myled1=0;
exarkun 0:ea04a1655f3b 905 }
exarkun 0:ea04a1655f3b 906 }
exarkun 0:ea04a1655f3b 907
exarkun 0:ea04a1655f3b 908 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 909 // TASKS8 //
exarkun 0:ea04a1655f3b 910 ////////////////////////////////////////
exarkun 0:ea04a1655f3b 911
exarkun 0:ea04a1655f3b 912 void task8_switch()
exarkun 0:ea04a1655f3b 913 {
exarkun 0:ea04a1655f3b 914
exarkun 0:ea04a1655f3b 915 if((mRxMsg[0] == 0x66))//detection code de la page0
exarkun 0:ea04a1655f3b 916 {
exarkun 0:ea04a1655f3b 917 switch ( mRxMsg[1])
exarkun 0:ea04a1655f3b 918 {
exarkun 0:ea04a1655f3b 919 case 0x00:
exarkun 0:ea04a1655f3b 920 page0();//ici la page0 es traité ----------- code de la page : 66 00 ff ff ff
exarkun 0:ea04a1655f3b 921 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 922 break;
exarkun 0:ea04a1655f3b 923
exarkun 0:ea04a1655f3b 924 case 0x01:
exarkun 0:ea04a1655f3b 925 page1();//ici la page0 es traité ----------- code de la page : 66 01 ff ff ff
exarkun 0:ea04a1655f3b 926 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 927 break;
exarkun 0:ea04a1655f3b 928
exarkun 0:ea04a1655f3b 929 case 0x02:
exarkun 0:ea04a1655f3b 930 page2();//ici la page0 es traité ----------- code de la page : 66 02 ff ff ff
exarkun 0:ea04a1655f3b 931 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 932 break;
exarkun 0:ea04a1655f3b 933
exarkun 0:ea04a1655f3b 934 case 0x03:
exarkun 0:ea04a1655f3b 935 page3();//ici la page0 es traité ----------- code de la page : 66 03 ff ff ff
exarkun 0:ea04a1655f3b 936 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 937 break;
exarkun 0:ea04a1655f3b 938
exarkun 0:ea04a1655f3b 939 case 0x04:
exarkun 0:ea04a1655f3b 940 page4();//ici la page0 es traité ----------- code de la page : 66 04 ff ff ff
exarkun 0:ea04a1655f3b 941 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 942 break;
exarkun 0:ea04a1655f3b 943
exarkun 0:ea04a1655f3b 944 case 0x05:
exarkun 0:ea04a1655f3b 945 page5();//ici la page0 es traité ----------- code de la page : 66 05 ff ff ff
exarkun 0:ea04a1655f3b 946 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 947 break;
exarkun 0:ea04a1655f3b 948
exarkun 0:ea04a1655f3b 949 case 0x06:
exarkun 0:ea04a1655f3b 950 page6();//ici la page6 es traité ----------- code de la page : 66 06 ff ff ff
exarkun 0:ea04a1655f3b 951 mRxMsg[0] = 0x00;
exarkun 0:ea04a1655f3b 952 break;
exarkun 0:ea04a1655f3b 953
exarkun 0:ea04a1655f3b 954 }
exarkun 0:ea04a1655f3b 955
exarkun 0:ea04a1655f3b 956 // ici code de la tache 8
exarkun 0:ea04a1655f3b 957 }
exarkun 0:ea04a1655f3b 958
exarkun 0:ea04a1655f3b 959 }
exarkun 0:ea04a1655f3b 960
exarkun 0:ea04a1655f3b 961 ////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 962 // PROGRAMME PRINCIPAL //
exarkun 0:ea04a1655f3b 963 ////////////////////////////////////////////////////////////////////////////
exarkun 0:ea04a1655f3b 964
exarkun 0:ea04a1655f3b 965 int main()
exarkun 0:ea04a1655f3b 966 {
exarkun 0:ea04a1655f3b 967 // int cycles;
exarkun 0:ea04a1655f3b 968 //NVIC_SetPriority(EINT3_IRQn, 252);//set interupt to highest priority 0.
exarkun 0:ea04a1655f3b 969 //NVIC_SetPriority(TIMER1_IRQn, 253);// set mbed tickers to lower priority than other things
exarkun 0:ea04a1655f3b 970 //NVIC_SetPriority(TIMER2_IRQn, 254);// set mbed tickers to lower priority than other things
exarkun 0:ea04a1655f3b 971 //NVIC_SetPriority(TIMER3_IRQn, 255);// set mbed tickers to lower priority than other things
exarkun 0:ea04a1655f3b 972 //NVIC_set_all_irq_priorities(0);
exarkun 0:ea04a1655f3b 973
exarkun 0:ea04a1655f3b 974 qei.SetDigiFilter(480UL);//filtre
exarkun 0:ea04a1655f3b 975 qei.SetMaxPosition(0xFFFFFFFF);//position max 4294967295 pulses
exarkun 0:ea04a1655f3b 976
exarkun 0:ea04a1655f3b 977 //initialisation de la com rs232
exarkun 0:ea04a1655f3b 978 device.baud(9600);//rs232 28800 baud
exarkun 0:ea04a1655f3b 979 device.printf("serial rs232 ok \n");
exarkun 0:ea04a1655f3b 980
exarkun 0:ea04a1655f3b 981 //calculs de tau ,Kv,Kp
exarkun 0:ea04a1655f3b 982 tau=(J*R)/K;
exarkun 0:ea04a1655f3b 983 Kv=r1*r2*tau*Ki-1.;
exarkun 0:ea04a1655f3b 984 if(Kv<0){Kv = -Kv;}
exarkun 0:ea04a1655f3b 985 Kp=r1*Ki*(1.+Kv)/Kv;
exarkun 0:ea04a1655f3b 986
exarkun 0:ea04a1655f3b 987 //initialisation moteur
exarkun 0:ea04a1655f3b 988 PWM1.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz
exarkun 0:ea04a1655f3b 989 frein_moteur1.write(0);//affectation de la valeur du frein moteur1
exarkun 0:ea04a1655f3b 990 sens_rotation_moteur1.write(0); //affectation du sens de rotation moteur1 non utiliser puisque c'est la tache1 qui le fait non pas la generation de trajectoire
exarkun 0:ea04a1655f3b 991
exarkun 0:ea04a1655f3b 992 //initialisation du spi
exarkun 0:ea04a1655f3b 993 spi1.format(16,3); // Setup: bit data, high steady state clock, 2nd edge capture
exarkun 0:ea04a1655f3b 994 spi1.frequency(1000000); // 1MHz
exarkun 0:ea04a1655f3b 995
exarkun 0:ea04a1655f3b 996 //lancement des tasks
exarkun 0:ea04a1655f3b 997 time_up1.attach(&task1_switch, 0.0005);//"calcule de l'asservissement" initialisation du ticker a 2Khz "500us".
exarkun 0:ea04a1655f3b 998 //time_up2.attach(&task2_switch, 0.05);//"retour d'information position par usb" initialisation du ticker a 100hz "10ms".
exarkun 0:ea04a1655f3b 999 time_up3.attach(&task3_switch, 0.0005);//"generation trajectoire" initialisation du ticker a 2khz "500us".
exarkun 0:ea04a1655f3b 1000 //time_up4.attach(&task4_switch, 0.0005);//"retour d'information position par rs232"initialisation du ticker a 100hz "10ms".
exarkun 0:ea04a1655f3b 1001 //time_up5.attach(&task5_switch, 0.0001);//"lecture et ecriture DATA SPI1 initialisation du ticker 10khz.
exarkun 0:ea04a1655f3b 1002
exarkun 0:ea04a1655f3b 1003 //time_up6.attach(&task6_switch, 0.0005);//initialises the ticker 2kh
exarkun 0:ea04a1655f3b 1004 time_up7.attach(&task7_switch, 0.0001);//initialises the ticker 2kh
exarkun 0:ea04a1655f3b 1005 time_up8.attach(&task8_switch, 0.1);//initialises the ticker 2kh
exarkun 0:ea04a1655f3b 1006
exarkun 0:ea04a1655f3b 1007 device.printf("sendme");
exarkun 0:ea04a1655f3b 1008
exarkun 0:ea04a1655f3b 1009 count_ticks=0;
exarkun 0:ea04a1655f3b 1010 while(1)
exarkun 0:ea04a1655f3b 1011 {
exarkun 0:ea04a1655f3b 1012
exarkun 0:ea04a1655f3b 1013 c='0';
exarkun 0:ea04a1655f3b 1014
exarkun 0:ea04a1655f3b 1015 //c=valueFromMaster;//valeur par la liaison spi par le master
exarkun 0:ea04a1655f3b 1016
exarkun 0:ea04a1655f3b 1017 //device.scanf("%c",&c);//capture du caract ascii
exarkun 0:ea04a1655f3b 1018
exarkun 0:ea04a1655f3b 1019 switch(c)//chargement des wafers dans tete
exarkun 0:ea04a1655f3b 1020 {
exarkun 0:ea04a1655f3b 1021
exarkun 0:ea04a1655f3b 1022 case 'a':
exarkun 0:ea04a1655f3b 1023 //qei.Reset(0);
exarkun 0:ea04a1655f3b 1024 consigne=70000 ; //1 tour
exarkun 0:ea04a1655f3b 1025 slope_time=3;//t =0.ms
exarkun 0:ea04a1655f3b 1026 start_slope=true;
exarkun 0:ea04a1655f3b 1027 wait(4.5);
exarkun 0:ea04a1655f3b 1028
exarkun 0:ea04a1655f3b 1029 consigne=0 ; //1 tour
exarkun 0:ea04a1655f3b 1030 slope_time=3;//t=ms
exarkun 0:ea04a1655f3b 1031 start_slope=true;
exarkun 0:ea04a1655f3b 1032 wait(4.5);
exarkun 0:ea04a1655f3b 1033
exarkun 0:ea04a1655f3b 1034 consigne=-70000 ; //1 tour
exarkun 0:ea04a1655f3b 1035 slope_time=3;//t=ms
exarkun 0:ea04a1655f3b 1036 start_slope=true;
exarkun 0:ea04a1655f3b 1037 wait(4.5);
exarkun 0:ea04a1655f3b 1038
exarkun 0:ea04a1655f3b 1039 consigne=0 ; //1 tour
exarkun 0:ea04a1655f3b 1040 slope_time=3;//t=ms
exarkun 0:ea04a1655f3b 1041 start_slope=true;
exarkun 0:ea04a1655f3b 1042 wait(4.5);
exarkun 0:ea04a1655f3b 1043
exarkun 0:ea04a1655f3b 1044 break;
exarkun 0:ea04a1655f3b 1045
exarkun 0:ea04a1655f3b 1046 case 'b':
exarkun 0:ea04a1655f3b 1047 //qei.Reset(0);
exarkun 0:ea04a1655f3b 1048 consigne=100000 ; //1 tour
exarkun 0:ea04a1655f3b 1049 slope_time=2.5;//t =0.5ms
exarkun 0:ea04a1655f3b 1050 start_slope=true;
exarkun 0:ea04a1655f3b 1051 wait(3.5);
exarkun 0:ea04a1655f3b 1052
exarkun 0:ea04a1655f3b 1053 consigne=0 ; //1 tour
exarkun 0:ea04a1655f3b 1054 slope_time=2.5;//t=1ms
exarkun 0:ea04a1655f3b 1055 start_slope=true;
exarkun 0:ea04a1655f3b 1056 wait(3.5);
exarkun 0:ea04a1655f3b 1057
exarkun 0:ea04a1655f3b 1058 break;
exarkun 0:ea04a1655f3b 1059
exarkun 0:ea04a1655f3b 1060 }
exarkun 0:ea04a1655f3b 1061
exarkun 0:ea04a1655f3b 1062
exarkun 0:ea04a1655f3b 1063
exarkun 0:ea04a1655f3b 1064
exarkun 0:ea04a1655f3b 1065
exarkun 0:ea04a1655f3b 1066 /*if(device2.readable())//ici on utilise une seconde com rs avec un autre ecrant nextion
exarkun 0:ea04a1655f3b 1067 {
exarkun 0:ea04a1655f3b 1068 c2 = device2.getc();
exarkun 0:ea04a1655f3b 1069 mRxMsg2[mRxIdx2] = c2;
exarkun 0:ea04a1655f3b 1070 mRxIdx2++;
exarkun 0:ea04a1655f3b 1071 if ((mRxIdx2 >= 3) && (mRxMsg2[mRxIdx2-1] == 0xff) && (mRxMsg2[mRxIdx2-2] == 0xff) && (mRxMsg2[mRxIdx2-3] == 0xff)) //valid rx message
exarkun 0:ea04a1655f3b 1072 {
exarkun 0:ea04a1655f3b 1073 mRxIdx2=0;
exarkun 0:ea04a1655f3b 1074
exarkun 0:ea04a1655f3b 1075 if(mRxMsg2[0] == 0x67) //Touch coordinate data return
exarkun 0:ea04a1655f3b 1076 { mTouchX2 = (mRxMsg2[1]*256) + mRxMsg2[2];
exarkun 0:ea04a1655f3b 1077 mTouchY2 = (mRxMsg2[3]*256) + mRxMsg2[4];
exarkun 0:ea04a1655f3b 1078 if(mRxMsg2[5] == 0x01)
exarkun 0:ea04a1655f3b 1079 mTouch2 = true;
exarkun 0:ea04a1655f3b 1080 else
exarkun 0:ea04a1655f3b 1081 mTouch2 = false;
exarkun 0:ea04a1655f3b 1082 }
exarkun 0:ea04a1655f3b 1083 //start switch
exarkun 0:ea04a1655f3b 1084 if((mRxMsg2[0] == 0x65)&&(mRxMsg2[1] == 0x01)&&(mRxMsg2[2] == 0x01)&&(mRxMsg2[3] == 0x00))
exarkun 0:ea04a1655f3b 1085 {
exarkun 0:ea04a1655f3b 1086 keyboard.printf("t");
exarkun 0:ea04a1655f3b 1087 }//uniquement le bouton start allumeras la led 1 en release ---------------SY
exarkun 0:ea04a1655f3b 1088
exarkun 0:ea04a1655f3b 1089 }
exarkun 0:ea04a1655f3b 1090 }*/
exarkun 0:ea04a1655f3b 1091
exarkun 0:ea04a1655f3b 1092 //wait(0.05);
exarkun 0:ea04a1655f3b 1093 }
exarkun 0:ea04a1655f3b 1094 }