Scan Mines

Dependencies:   NeoStrip mbed

Fork of MX28-Scan3D_DB03-IRQ by Denis Brousse

Committer:
dbrousse
Date:
Tue May 19 21:03:01 2015 +0000
Revision:
2:43daa01ba06d
Parent:
1:538b13cb6699
Child:
3:a3074e835b35
Scan3DHQ2015 version 19/05/2015

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dbrousse 0:129e8567ddbd 1 /************************************
dbrousse 2:43daa01ba06d 2 * DB le 19/05/2015 MX28-Scan3D_DB04-IRQ
dbrousse 2:43daa01ba06d 3 * Programme final conforme au protocole de communication
dbrousse 2:43daa01ba06d 4 * Reste à faire : - lecture accéléromètre
dbrousse 2:43daa01ba06d 5 * - vérification de positions atteintes par servomoteurs
dbrousse 2:43daa01ba06d 6 *
dbrousse 2:43daa01ba06d 7 * Pilotage MX-106 (SERVO_VERTICAL) et MX-28 (SERVO_HORIZONTALE)
dbrousse 2:43daa01ba06d 8 * avec liaison série : Trame Scan3D
dbrousse 0:129e8567ddbd 9 * &abcdefghij/ début $, fin /, longueur variable
dbrousse 0:129e8567ddbd 10 * Réception Série par IRQ
dbrousse 0:129e8567ddbd 11 * Piloter les positions des 2 servomoteurs V et H
dbrousse 0:129e8567ddbd 12 * Débit = 57142bit/s
dbrousse 0:129e8567ddbd 13 *
dbrousse 2:43daa01ba06d 14 * Matrice Led Neopixels
dbrousse 0:129e8567ddbd 15 * Une seule instance possible avec la classe NeoStrip :
dbrousse 0:129e8567ddbd 16 * Problème, pour nous il faut 3 voies : panelLed1, panelLed2 et panelLed3 !
dbrousse 0:129e8567ddbd 17 * les 2 autres voies "faite à la main" avec les fonctions :
dbrousse 0:129e8567ddbd 18 * - void writeBitCode1(numMatriceLed) et void writeBitCode0(numMatriceLed)
dbrousse 0:129e8567ddbd 19 * - void writeMatriceLed(int numMatriceLed, int N, int valRouge, int valVerte, int valBleu)
dbrousse 0:129e8567ddbd 20 *
dbrousse 0:129e8567ddbd 21 * Cible : Carte mbed_S3DHQ_2015
dbrousse 0:129e8567ddbd 22 *************************************/
dbrousse 0:129e8567ddbd 23
dbrousse 0:129e8567ddbd 24 #include "mbed.h"
dbrousse 0:129e8567ddbd 25 #include "MX-28_DefConstantes.h"
dbrousse 0:129e8567ddbd 26 #include "NeoStrip.h"
dbrousse 0:129e8567ddbd 27
dbrousse 2:43daa01ba06d 28 #define ID_SERVO_VERTICAL 3 // MX-106R
dbrousse 2:43daa01ba06d 29 #define ID_SERVO_HORIZONTALE 2 // MX-28R
dbrousse 0:129e8567ddbd 30
dbrousse 0:129e8567ddbd 31 #define N1 64 // Nombre de pixels(Led) du panneau Led 1
dbrousse 2:43daa01ba06d 32 #define N2 128 // Nombre de pixels(Led) du panneau Led 2
dbrousse 2:43daa01ba06d 33 #define N3 128 // Nombre de pixels(Led) du panneau Led 3
dbrousse 0:129e8567ddbd 34
dbrousse 0:129e8567ddbd 35 DigitalOut led01(LED1);
dbrousse 0:129e8567ddbd 36 DigitalOut led02(LED2);
dbrousse 0:129e8567ddbd 37 DigitalOut led03(LED3);
dbrousse 0:129e8567ddbd 38 DigitalOut led04(LED4);
dbrousse 0:129e8567ddbd 39
dbrousse 0:129e8567ddbd 40 DigitalOut dir(p17);
dbrousse 0:129e8567ddbd 41 DigitalOut laser(p5);
dbrousse 0:129e8567ddbd 42 DigitalOut panelLed2(p7);
dbrousse 0:129e8567ddbd 43 DigitalOut panelLed3(p8);
dbrousse 0:129e8567ddbd 44
dbrousse 0:129e8567ddbd 45 unsigned char numeroOctetRecu=0;
dbrousse 0:129e8567ddbd 46 char octetRecu; //premier octet reçu
dbrousse 0:129e8567ddbd 47 char bufferRec[12]; // buffer de réception serialPc
dbrousse 0:129e8567ddbd 48
dbrousse 0:129e8567ddbd 49 Serial serialPc(USBTX, USBRX); // tx, rx, écarté car driver incompatible avec LabVIEW
dbrousse 0:129e8567ddbd 50 //Serial serialPc(p28, p27); // tx, rx (c'est l'uart2 du LPC1768)
dbrousse 1:538b13cb6699 51 Serial uartMX28(p13, p14); // tx, rx pour MX28 (uart1 du LPC1768)
dbrousse 1:538b13cb6699 52 //Serial uartMX28(p28, p27); // tx, rx pour MX28 (uart1 du LPC1768)
dbrousse 0:129e8567ddbd 53
dbrousse 0:129e8567ddbd 54 NeoStrip panelLed1(p6, N1); // creation de l'objet panelLed1 cde par p6, N1 Led
dbrousse 0:129e8567ddbd 55 //NeoStrip panelLed2(p7, N2); // creation de l'objet panelLed2 cde par p7, N2 Led
dbrousse 0:129e8567ddbd 56 //NeoStrip panelLed3(p8, N3); // creation de l'objet panelLed3 cde par p8, N3 Led
dbrousse 0:129e8567ddbd 57
dbrousse 0:129e8567ddbd 58 //------------------------------------------------------------------------------------------------
dbrousse 0:129e8567ddbd 59 // Envoi de la trame de pilotage a un servomoteur MX-28
dbrousse 0:129e8567ddbd 60 void write (char id, char longueurTrame, char instruction, char param1 = NULL, char param2 = NULL, char param3 = NULL, char param4 = NULL)
dbrousse 0:129e8567ddbd 61 {
dbrousse 0:129e8567ddbd 62 char Cks;
dbrousse 0:129e8567ddbd 63
dbrousse 0:129e8567ddbd 64 Cks = ~( id + longueurTrame + instruction + param1 + param2 + param3 + param4); //calcul du checkSum
dbrousse 0:129e8567ddbd 65 //serialPc.printf("Cks : %d\n", Cks);
dbrousse 0:129e8567ddbd 66 dir = 1;
dbrousse 0:129e8567ddbd 67 uartMX28.putc(0xFF);
dbrousse 0:129e8567ddbd 68 uartMX28.putc(0xFF);
dbrousse 0:129e8567ddbd 69 uartMX28.putc(id);
dbrousse 0:129e8567ddbd 70 uartMX28.putc(longueurTrame);
dbrousse 0:129e8567ddbd 71 uartMX28.putc(instruction);
dbrousse 0:129e8567ddbd 72 if (longueurTrame >= 3) {
dbrousse 0:129e8567ddbd 73 uartMX28.putc(param1);
dbrousse 0:129e8567ddbd 74 }
dbrousse 0:129e8567ddbd 75 if (longueurTrame >= 4) {
dbrousse 0:129e8567ddbd 76 uartMX28.putc(param2);
dbrousse 0:129e8567ddbd 77 }
dbrousse 0:129e8567ddbd 78 if (longueurTrame >= 5) {
dbrousse 0:129e8567ddbd 79 uartMX28.putc(param3);
dbrousse 0:129e8567ddbd 80 }
dbrousse 0:129e8567ddbd 81 if (longueurTrame >= 6) {
dbrousse 0:129e8567ddbd 82 uartMX28.putc(param4);
dbrousse 0:129e8567ddbd 83 }
dbrousse 0:129e8567ddbd 84 uartMX28.putc(Cks);
dbrousse 0:129e8567ddbd 85
dbrousse 0:129e8567ddbd 86 wait_us(MX28_WAIT_AFTER_WRITE); // Attendre l'envoie complet de la trame.
dbrousse 0:129e8567ddbd 87 dir = 0;
dbrousse 0:129e8567ddbd 88 }
dbrousse 0:129e8567ddbd 89
dbrousse 0:129e8567ddbd 90 // Set goal position of engine
dbrousse 0:129e8567ddbd 91 void setPosition(char id, int goal)
dbrousse 0:129e8567ddbd 92 {
dbrousse 0:129e8567ddbd 93 char goal_h = goal >> 8;
dbrousse 0:129e8567ddbd 94 char goal_l = goal;
dbrousse 0:129e8567ddbd 95 //serialPc.printf("Goal set : %d %d %d\n", goal, goal_h, goal_l);
dbrousse 0:129e8567ddbd 96 write(id, 5, MX28_WRITE_DATA, MX28_GOAL_POSITION_L, goal_l, goal_h);
dbrousse 0:129e8567ddbd 97 }
dbrousse 0:129e8567ddbd 98
dbrousse 0:129e8567ddbd 99 //---------------------------------------------------------------------------------------------
dbrousse 2:43daa01ba06d 100 // Lire position d'un servomoteur MX-28 ou MX-106
dbrousse 2:43daa01ba06d 101 int lirePositionServo(char idServo) {
dbrousse 2:43daa01ba06d 102 //Vider le buffer de réception uartMX28
dbrousse 2:43daa01ba06d 103 while(uartMX28.readable()) {
dbrousse 2:43daa01ba06d 104 uartMX28.getc();
dbrousse 2:43daa01ba06d 105 }
dbrousse 2:43daa01ba06d 106 write(idServo, 4, MX28_READ_DATA, MX28_PRESENT_POSITION_L,2);
dbrousse 2:43daa01ba06d 107 char octetRecuMX[8];
dbrousse 2:43daa01ba06d 108 char i=0;
dbrousse 2:43daa01ba06d 109 int tempoReception=0;
dbrousse 2:43daa01ba06d 110 while((tempoReception < 1000000)&&(i<8)) {
dbrousse 2:43daa01ba06d 111 if(uartMX28.readable()) {
dbrousse 2:43daa01ba06d 112 octetRecuMX[i] = uartMX28.getc();
dbrousse 2:43daa01ba06d 113 i++;
dbrousse 2:43daa01ba06d 114 }
dbrousse 2:43daa01ba06d 115 tempoReception++;
dbrousse 2:43daa01ba06d 116 }
dbrousse 2:43daa01ba06d 117 int valeurLue = octetRecuMX[6] * 256 + octetRecuMX[5];
dbrousse 2:43daa01ba06d 118 return valeurLue;
dbrousse 2:43daa01ba06d 119 }
dbrousse 2:43daa01ba06d 120
dbrousse 2:43daa01ba06d 121 //---------------------------------------------------------------------------------------------
dbrousse 0:129e8567ddbd 122 // fonction écriture Bit code 1 et 0 pour matrice Led Neopixels
dbrousse 0:129e8567ddbd 123 void writeBitCode1(int numMatriceLed)
dbrousse 0:129e8567ddbd 124 {
dbrousse 0:129e8567ddbd 125 if(numMatriceLed==2){panelLed2=1;}
dbrousse 0:129e8567ddbd 126 else{panelLed3=1;}
dbrousse 0:129e8567ddbd 127 for(int i=0;i<37;i++) {int x = i*i*i; x=x*x;} // pour T1H=700ns
dbrousse 0:129e8567ddbd 128 if(numMatriceLed==2){panelLed2=0;}
dbrousse 0:129e8567ddbd 129 else{panelLed3=0;}
dbrousse 0:129e8567ddbd 130 for(int i=0;i<16;i++) {int x = i*i*i; x=x*x;} // pour T1L= 450ns + 150ns pour exe fonction
dbrousse 0:129e8567ddbd 131 }
dbrousse 0:129e8567ddbd 132 void writeBitCode0(int numMatriceLed)
dbrousse 0:129e8567ddbd 133 {
dbrousse 0:129e8567ddbd 134 if(numMatriceLed==2){panelLed2=1;}
dbrousse 0:129e8567ddbd 135 else{panelLed3=1;}
dbrousse 0:129e8567ddbd 136 for(int i=0;i<15;i++) {int x = i*i*i; x=x*x;} // pour T0H=350ns
dbrousse 0:129e8567ddbd 137 if(numMatriceLed==2){panelLed2=0;}
dbrousse 0:129e8567ddbd 138 else{panelLed3=0;}
dbrousse 0:129e8567ddbd 139 for(int i=0;i<32;i++) {int x = i*i*i; x=x*x;} // pour T0L=650ns+150ns pour exe fonction
dbrousse 0:129e8567ddbd 140 }
dbrousse 0:129e8567ddbd 141 //---------------------------------------------------------------------------------------------
dbrousse 0:129e8567ddbd 142 // fonction écriture matrice Led Neopixels
dbrousse 0:129e8567ddbd 143 void writeMatriceLed(int numMatriceLed, int N, int valRouge, int valVerte, int valBleu)
dbrousse 0:129e8567ddbd 144 {
dbrousse 0:129e8567ddbd 145 int valeurCouleurVRB = valVerte*65536+valRouge*256+valBleu;
dbrousse 0:129e8567ddbd 146 for(int i=0;i<N;i++) {
dbrousse 0:129e8567ddbd 147 int mask_1sur24Bits = 0x800000;
dbrousse 0:129e8567ddbd 148 for(int j=0;j<24;j++) {
dbrousse 0:129e8567ddbd 149 if(valeurCouleurVRB & mask_1sur24Bits) {
dbrousse 0:129e8567ddbd 150 writeBitCode1(numMatriceLed);
dbrousse 0:129e8567ddbd 151 }
dbrousse 0:129e8567ddbd 152 else {
dbrousse 0:129e8567ddbd 153 writeBitCode0(numMatriceLed);
dbrousse 0:129e8567ddbd 154 }
dbrousse 0:129e8567ddbd 155 mask_1sur24Bits = mask_1sur24Bits >> 1;
dbrousse 0:129e8567ddbd 156 }
dbrousse 0:129e8567ddbd 157 }
dbrousse 0:129e8567ddbd 158 }
dbrousse 0:129e8567ddbd 159
dbrousse 0:129e8567ddbd 160
dbrousse 0:129e8567ddbd 161 //---------------------------------------------------------------------------------------------
dbrousse 0:129e8567ddbd 162 // fonction appelée par interruption si réception sur serialPc
dbrousse 0:129e8567ddbd 163 void receptionPc()
dbrousse 0:129e8567ddbd 164 {
dbrousse 0:129e8567ddbd 165 led04 =1;
dbrousse 0:129e8567ddbd 166 octetRecu = serialPc.getc();
dbrousse 0:129e8567ddbd 167 if(octetRecu == '$') {
dbrousse 0:129e8567ddbd 168 numeroOctetRecu = 0;
dbrousse 0:129e8567ddbd 169 memset(&bufferRec[0], 0, sizeof(bufferRec));
dbrousse 0:129e8567ddbd 170 } else {
dbrousse 0:129e8567ddbd 171 bufferRec[numeroOctetRecu-1] = octetRecu;
dbrousse 0:129e8567ddbd 172 ///Debug serialPc.printf("%c",octetRecu); ////////
dbrousse 0:129e8567ddbd 173 }
dbrousse 0:129e8567ddbd 174 if(octetRecu == '/') {
dbrousse 0:129e8567ddbd 175 if ((bufferRec[0] == '0')&&(numeroOctetRecu == 8)) { // si c'est une commande de position MX28+MX106
dbrousse 0:129e8567ddbd 176 int b = bufferRec[1] - 0x30;
dbrousse 0:129e8567ddbd 177 int c = bufferRec[2] - 0x30;
dbrousse 0:129e8567ddbd 178 int d = bufferRec[3] - 0x30;
dbrousse 0:129e8567ddbd 179 int e = bufferRec[4] - 0x30;
dbrousse 0:129e8567ddbd 180 int f = bufferRec[5] - 0x30;
dbrousse 0:129e8567ddbd 181 int g = bufferRec[6] - 0x30;
dbrousse 0:129e8567ddbd 182 int anglePositionVerticale = (b * 100) + (c * 10) + d;
dbrousse 0:129e8567ddbd 183 int valeurPositionVerticale = anglePositionVerticale * 4095 / 360;
dbrousse 0:129e8567ddbd 184 setPosition(ID_SERVO_VERTICAL, valeurPositionVerticale);
dbrousse 0:129e8567ddbd 185 int anglePositionHorizontale = (e * 100) + (f * 10) + g;
dbrousse 0:129e8567ddbd 186 int valeurPositionHorizontale = anglePositionHorizontale * 4095 / 360;
dbrousse 0:129e8567ddbd 187 wait_us(2000); // Attendre fin de la trame de réponse du Servo Vertical
dbrousse 1:538b13cb6699 188 setPosition(ID_SERVO_HORIZONTALE, valeurPositionHorizontale);
dbrousse 0:129e8567ddbd 189 //Pour Debug
dbrousse 1:538b13cb6699 190 //serialPc.printf("idServ = %d \tvaleurPosition = %d\n",ID_SERVO_VERTICAL, valeurPositionVerticale);
dbrousse 1:538b13cb6699 191 //serialPc.printf("idServ = %d \tvaleurPosition = %d\n",ID_SERVO_HORIZONTALE, valeurPositionHorizontale);
dbrousse 2:43daa01ba06d 192
dbrousse 2:43daa01ba06d 193 //--Solution simple pour retourner la position mais sans tester "positions demandéess=atteintes"
dbrousse 2:43daa01ba06d 194 // test positions atteintes à faire
dbrousse 2:43daa01ba06d 195 wait(2); //pour laisser le temps au moteur de se déplacer,
dbrousse 2:43daa01ba06d 196 bufferRec[0] = '1'; //pour retourner la mesure de la position
dbrousse 2:43daa01ba06d 197 numeroOctetRecu = 2; //pour retourner la mesure de la position
dbrousse 0:129e8567ddbd 198 }
dbrousse 0:129e8567ddbd 199 if ((bufferRec[0] == '1')&&(numeroOctetRecu == 2)) { // si demande de lecture de la position
dbrousse 0:129e8567ddbd 200 led03 = 1; // indic
dbrousse 2:43daa01ba06d 201 int valeurLue = lirePositionServo(ID_SERVO_VERTICAL);
dbrousse 1:538b13cb6699 202 int valeurAngleVertCentiemeDegres = (valeurLue * 100) * 360/4096;
dbrousse 1:538b13cb6699 203 wait(0.2);
dbrousse 2:43daa01ba06d 204 valeurLue = lirePositionServo(ID_SERVO_HORIZONTALE);
dbrousse 1:538b13cb6699 205 int valeurAngleHorizontaleCentiemeDegres = (valeurLue * 100) * 360/4096;
dbrousse 2:43daa01ba06d 206
dbrousse 2:43daa01ba06d 207 serialPc.printf("$OK_moteurs_%0#5d_%0#5d/\n",valeurAngleVertCentiemeDegres, valeurAngleHorizontaleCentiemeDegres);
dbrousse 1:538b13cb6699 208
dbrousse 0:129e8567ddbd 209 led03 = 0; //
dbrousse 0:129e8567ddbd 210 }
dbrousse 0:129e8567ddbd 211 if ((bufferRec[0] == '2')&&(numeroOctetRecu == 3)) { // si c'est une commande Laser
dbrousse 0:129e8567ddbd 212 if (bufferRec[1] == '1') {
dbrousse 0:129e8567ddbd 213 //Laser on
dbrousse 0:129e8567ddbd 214 led02 = 1; // indic commande Laser on
dbrousse 0:129e8567ddbd 215 laser = 1;
dbrousse 2:43daa01ba06d 216 serialPc.printf("$OK_laser_1/\n");
dbrousse 0:129e8567ddbd 217 } else {
dbrousse 0:129e8567ddbd 218 //Laser off
dbrousse 0:129e8567ddbd 219 led02 = 0; // indic commande Laser off
dbrousse 0:129e8567ddbd 220 laser = 0;
dbrousse 2:43daa01ba06d 221 serialPc.printf("$OK_laser_0/\n");
dbrousse 0:129e8567ddbd 222 }
dbrousse 0:129e8567ddbd 223 }
dbrousse 0:129e8567ddbd 224 if ((bufferRec[0] == '3')&&(numeroOctetRecu == 11)) { // si commande panneau led supérieur
dbrousse 0:129e8567ddbd 225 led03 = 1; // indic commande panneau led supérieur
dbrousse 0:129e8567ddbd 226 // A terminer
dbrousse 0:129e8567ddbd 227 int b = bufferRec[1] - 0x30;
dbrousse 0:129e8567ddbd 228 int c = bufferRec[2] - 0x30;
dbrousse 0:129e8567ddbd 229 int d = bufferRec[3] - 0x30;
dbrousse 0:129e8567ddbd 230 int e = bufferRec[4] - 0x30;
dbrousse 0:129e8567ddbd 231 int f = bufferRec[5] - 0x30;
dbrousse 0:129e8567ddbd 232 int g = bufferRec[6] - 0x30;
dbrousse 0:129e8567ddbd 233 int h = bufferRec[7] - 0x30;
dbrousse 0:129e8567ddbd 234 int i = bufferRec[8] - 0x30;
dbrousse 0:129e8567ddbd 235 int j = bufferRec[9] - 0x30;
dbrousse 0:129e8567ddbd 236 int colorLed1 = (b*100+c*10+d)*65536+(e*100+f*10+g)*256+(h*100+i*10+j);
dbrousse 0:129e8567ddbd 237 panelLed1.clear();
dbrousse 0:129e8567ddbd 238 for(int n=0;n<N1;n++) {
dbrousse 0:129e8567ddbd 239 panelLed1.setPixel(n,colorLed1);
dbrousse 0:129e8567ddbd 240 }
dbrousse 0:129e8567ddbd 241 panelLed1.write();
dbrousse 0:129e8567ddbd 242
dbrousse 0:129e8567ddbd 243 wait(0.2);
dbrousse 2:43daa01ba06d 244 serialPc.printf("$OK_panneau_1_%c%c%c_%c%c%c_%c%c%c/\n",bufferRec[1],bufferRec[2],bufferRec[3],bufferRec[4],bufferRec[5],bufferRec[6],bufferRec[7],bufferRec[8],bufferRec[9]);
dbrousse 0:129e8567ddbd 245 led03 = 0; // indic commande panneau led supérieur
dbrousse 0:129e8567ddbd 246 }
dbrousse 0:129e8567ddbd 247 if ((bufferRec[0] == '4')&&(numeroOctetRecu == 11)) { // si commande panneau led latéral 1
dbrousse 0:129e8567ddbd 248 led03 = 1; // indic commande panneau led
dbrousse 0:129e8567ddbd 249 int b = bufferRec[1] - 0x30;
dbrousse 0:129e8567ddbd 250 int c = bufferRec[2] - 0x30;
dbrousse 0:129e8567ddbd 251 int d = bufferRec[3] - 0x30;
dbrousse 0:129e8567ddbd 252 int e = bufferRec[4] - 0x30;
dbrousse 0:129e8567ddbd 253 int f = bufferRec[5] - 0x30;
dbrousse 0:129e8567ddbd 254 int g = bufferRec[6] - 0x30;
dbrousse 0:129e8567ddbd 255 int h = bufferRec[7] - 0x30;
dbrousse 0:129e8567ddbd 256 int i = bufferRec[8] - 0x30;
dbrousse 0:129e8567ddbd 257 int j = bufferRec[9] - 0x30;
dbrousse 0:129e8567ddbd 258 int valeurRouge = (b*100+c*10+d);
dbrousse 0:129e8567ddbd 259 int valeurVerte = (e*100+f*10+g);
dbrousse 0:129e8567ddbd 260 int valeurBleu = (h*100+i*10+j);
dbrousse 0:129e8567ddbd 261 writeMatriceLed(2,N2,valeurRouge, valeurVerte, valeurBleu);
dbrousse 0:129e8567ddbd 262 wait(0.2);
dbrousse 2:43daa01ba06d 263 serialPc.printf("$OK_panneau_2_%c%c%c_%c%c%c_%c%c%c/\n",bufferRec[1],bufferRec[2],bufferRec[3],bufferRec[4],bufferRec[5],bufferRec[6],bufferRec[7],bufferRec[8],bufferRec[9]);
dbrousse 0:129e8567ddbd 264 led03 = 0; // indic commande panneau led
dbrousse 0:129e8567ddbd 265 }
dbrousse 0:129e8567ddbd 266 if ((bufferRec[0] == '5')&&(numeroOctetRecu == 11)) { // si commande panneau led latéral 2
dbrousse 0:129e8567ddbd 267 led03 = 1; // indic commande panneau led
dbrousse 0:129e8567ddbd 268 int b = bufferRec[1] - 0x30;
dbrousse 0:129e8567ddbd 269 int c = bufferRec[2] - 0x30;
dbrousse 0:129e8567ddbd 270 int d = bufferRec[3] - 0x30;
dbrousse 0:129e8567ddbd 271 int e = bufferRec[4] - 0x30;
dbrousse 0:129e8567ddbd 272 int f = bufferRec[5] - 0x30;
dbrousse 0:129e8567ddbd 273 int g = bufferRec[6] - 0x30;
dbrousse 0:129e8567ddbd 274 int h = bufferRec[7] - 0x30;
dbrousse 0:129e8567ddbd 275 int i = bufferRec[8] - 0x30;
dbrousse 0:129e8567ddbd 276 int j = bufferRec[9] - 0x30;
dbrousse 0:129e8567ddbd 277 int valeurRouge = (b*100+c*10+d);
dbrousse 0:129e8567ddbd 278 int valeurVerte = (e*100+f*10+g);
dbrousse 0:129e8567ddbd 279 int valeurBleu = (h*100+i*10+j);
dbrousse 0:129e8567ddbd 280 writeMatriceLed(3,N3,valeurRouge, valeurVerte, valeurBleu);
dbrousse 0:129e8567ddbd 281 wait(0.2);
dbrousse 2:43daa01ba06d 282 serialPc.printf("$OK_panneau_3_%c%c%c_%c%c%c_%c%c%c/\n",bufferRec[1],bufferRec[2],bufferRec[3],bufferRec[4],bufferRec[5],bufferRec[6],bufferRec[7],bufferRec[8],bufferRec[9]);
dbrousse 0:129e8567ddbd 283 led03 = 0; // indic commande panneau led
dbrousse 0:129e8567ddbd 284 }
dbrousse 0:129e8567ddbd 285 if ((bufferRec[0] == '6')&&(numeroOctetRecu == 2)) { // si c'est une demande mesure accéléromètre
dbrousse 2:43daa01ba06d 286 //LECTURE ET ENVOI des mesures d'accélérations
dbrousse 0:129e8567ddbd 287 // A Faire
dbrousse 0:129e8567ddbd 288 }
dbrousse 0:129e8567ddbd 289
dbrousse 0:129e8567ddbd 290 numeroOctetRecu = 0;
dbrousse 0:129e8567ddbd 291 } else {
dbrousse 0:129e8567ddbd 292 numeroOctetRecu++;
dbrousse 0:129e8567ddbd 293 }
dbrousse 0:129e8567ddbd 294 led04 =0;
dbrousse 0:129e8567ddbd 295 }
dbrousse 0:129e8567ddbd 296
dbrousse 0:129e8567ddbd 297 int main()
dbrousse 0:129e8567ddbd 298 {
dbrousse 0:129e8567ddbd 299 uartMX28.baud(57142); // débit standard pour les MX-28 et -106
dbrousse 0:129e8567ddbd 300 serialPc.baud(115200);
dbrousse 0:129e8567ddbd 301 serialPc.attach(&receptionPc); // defini la fonction interruption
dbrousse 0:129e8567ddbd 302 panelLed1.setBrightness(1); // par défaut à 50%
dbrousse 1:538b13cb6699 303 //serialPc.printf("Entrer une commande\n");
dbrousse 0:129e8567ddbd 304 led01 = 1;
dbrousse 0:129e8567ddbd 305 // Clear buffer
dbrousse 0:129e8567ddbd 306 memset(&bufferRec[0], 0, sizeof(bufferRec));
dbrousse 0:129e8567ddbd 307
dbrousse 0:129e8567ddbd 308 while(1) {
dbrousse 0:129e8567ddbd 309 led01 = 0;
dbrousse 0:129e8567ddbd 310 wait(0.1);
dbrousse 0:129e8567ddbd 311 led01 = 1;
dbrousse 0:129e8567ddbd 312 wait(0.1);
dbrousse 0:129e8567ddbd 313 }
dbrousse 0:129e8567ddbd 314 }