CRAC Team / Mbed 2 deprecated Capt_couleur_smart

Dependencies:   mbed APDS_9960

Committer:
guilhemMBED
Date:
Fri Apr 03 19:20:02 2020 +0000
Revision:
0:37ba45bb0099
Child:
1:93f012c817ba
capteur couleur en liaison CAN final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guilhemMBED 0:37ba45bb0099 1 #include "mbed.h"
guilhemMBED 0:37ba45bb0099 2 #include "glibr.h"
guilhemMBED 0:37ba45bb0099 3
guilhemMBED 0:37ba45bb0099 4 #define SR 0 // 0 = CAN | 1 = serie
guilhemMBED 0:37ba45bb0099 5
guilhemMBED 0:37ba45bb0099 6 // Adress
guilhemMBED 0:37ba45bb0099 7 #define data_adress_sensor 0x00 // Specific to each sensor (between 0x00 and 0xFD)
guilhemMBED 0:37ba45bb0099 8 #define data_adress_general 0xFF // will talk to every sensor
guilhemMBED 0:37ba45bb0099 9 #define adress_color_sensor 0x4B0 // CAN ID same for every sensor (only for CAN)
guilhemMBED 0:37ba45bb0099 10
guilhemMBED 0:37ba45bb0099 11 // Request commands
guilhemMBED 0:37ba45bb0099 12 #define send_RGB 0x00
guilhemMBED 0:37ba45bb0099 13 #define send_RED 0x01
guilhemMBED 0:37ba45bb0099 14 #define send_GREEN 0x02
guilhemMBED 0:37ba45bb0099 15 #define send_BLUE 0x03
guilhemMBED 0:37ba45bb0099 16 #define send_PROXIMITY 0x04
guilhemMBED 0:37ba45bb0099 17 #define send_COLOR 0x05
guilhemMBED 0:37ba45bb0099 18
guilhemMBED 0:37ba45bb0099 19 // Setup commands
guilhemMBED 0:37ba45bb0099 20 #define setup_LED 0x08
guilhemMBED 0:37ba45bb0099 21 #define setup_PROXIMITY_THRESHOLD 0x09
guilhemMBED 0:37ba45bb0099 22
guilhemMBED 0:37ba45bb0099 23 // Masks
guilhemMBED 0:37ba45bb0099 24 #define HIGH 0xFF00
guilhemMBED 0:37ba45bb0099 25 #define LOW 0x00FF
guilhemMBED 0:37ba45bb0099 26
guilhemMBED 0:37ba45bb0099 27 // Buffer
guilhemMBED 0:37ba45bb0099 28 #define CAN_MAX 256
guilhemMBED 0:37ba45bb0099 29 #define SR_MAX 1024
guilhemMBED 0:37ba45bb0099 30
guilhemMBED 0:37ba45bb0099 31 Serial USB_link(USBTX, USBRX); // USB initialization
guilhemMBED 0:37ba45bb0099 32 RawSerial tx(PA_9, NC);
guilhemMBED 0:37ba45bb0099 33 RawSerial rx(NC, PA_10);
guilhemMBED 0:37ba45bb0099 34 glibr capt1(D4,D5);// I²C initialization : D4 = SDA ; D5 = SCL
guilhemMBED 0:37ba45bb0099 35 CAN can(PA_11, PA_12);
guilhemMBED 0:37ba45bb0099 36
guilhemMBED 0:37ba45bb0099 37 // Buffer CAN
guilhemMBED 0:37ba45bb0099 38 CANMessage canBuffer[CAN_MAX];
guilhemMBED 0:37ba45bb0099 39 int canRempli = 0;
guilhemMBED 0:37ba45bb0099 40 int canVide = 0;
guilhemMBED 0:37ba45bb0099 41 int canPerdu = 0;
guilhemMBED 0:37ba45bb0099 42
guilhemMBED 0:37ba45bb0099 43 //Buffer SR
guilhemMBED 0:37ba45bb0099 44 uint8_t srBuffer[SR_MAX];
guilhemMBED 0:37ba45bb0099 45 int srRempli = 0;
guilhemMBED 0:37ba45bb0099 46 int srVide = 0;
guilhemMBED 0:37ba45bb0099 47 int srPerdu = 0;
guilhemMBED 0:37ba45bb0099 48
guilhemMBED 0:37ba45bb0099 49 // traitement tramme SR
guilhemMBED 0:37ba45bb0099 50 int etatSR = 0;
guilhemMBED 0:37ba45bb0099 51 uint8_t checksumSR1 = 0,checksumSR2 = 0,calc_checksumSR1=0,calc_checksumSR2=0;
guilhemMBED 0:37ba45bb0099 52 uint8_t lenSR = 0, idSR,cmdSR, dataSR=0;
guilhemMBED 0:37ba45bb0099 53
guilhemMBED 0:37ba45bb0099 54 // tramme retour
guilhemMBED 0:37ba45bb0099 55 char messageSR[15], messageCAN[8];
guilhemMBED 0:37ba45bb0099 56 int lenRetour = 0;
guilhemMBED 0:37ba45bb0099 57
guilhemMBED 0:37ba45bb0099 58 // capteur et traitement
guilhemMBED 0:37ba45bb0099 59 uint16_t r,g,b ; // RGB values in 2 bytes
guilhemMBED 0:37ba45bb0099 60 uint8_t a ; // proximity value in 1 byte
guilhemMBED 0:37ba45bb0099 61 char proximity_tresh = 250, color;
guilhemMBED 0:37ba45bb0099 62 char state;
guilhemMBED 0:37ba45bb0099 63
guilhemMBED 0:37ba45bb0099 64 void srRead();
guilhemMBED 0:37ba45bb0099 65 /* Fonction récéptionnant la tramme serie
guilhemMBED 0:37ba45bb0099 66 et la stockant dans un buffer en attendant traitement */
guilhemMBED 0:37ba45bb0099 67
guilhemMBED 0:37ba45bb0099 68 void srTraitement();
guilhemMBED 0:37ba45bb0099 69 /* Fonction decryptant la tramme serie recue dans le buffer */
guilhemMBED 0:37ba45bb0099 70
guilhemMBED 0:37ba45bb0099 71 void envoiSR(char commande, char data);
guilhemMBED 0:37ba45bb0099 72 /* Fonction envoyant une tramme serie au format herkulex */
guilhemMBED 0:37ba45bb0099 73
guilhemMBED 0:37ba45bb0099 74 void canRead();
guilhemMBED 0:37ba45bb0099 75 /* Fonction receptionnant les messaages CAN dans un Buffer */
guilhemMBED 0:37ba45bb0099 76
guilhemMBED 0:37ba45bb0099 77 void canTraitement(const CANMessage &msg);
guilhemMBED 0:37ba45bb0099 78 /* Fonction traitant le message CAN reçu et repondant si besoin */
guilhemMBED 0:37ba45bb0099 79
guilhemMBED 0:37ba45bb0099 80
guilhemMBED 0:37ba45bb0099 81 void srRead()
guilhemMBED 0:37ba45bb0099 82 {
guilhemMBED 0:37ba45bb0099 83 srBuffer[srRempli++] = rx.getc(); //stockage nouvel octet dans le buffer
guilhemMBED 0:37ba45bb0099 84 if (srRempli==SR_MAX) srRempli = 0; // on recommence au debut du tableau si le max est atteint
guilhemMBED 0:37ba45bb0099 85
guilhemMBED 0:37ba45bb0099 86
guilhemMBED 0:37ba45bb0099 87 if (srRempli == srVide) { // buffer plein on perd un caractère (le premier recu)
guilhemMBED 0:37ba45bb0099 88 srVide++; // le message commence donc un octet plus tard
guilhemMBED 0:37ba45bb0099 89 if (srVide == SR_MAX) srVide = 0; // on recommence au debut du tableau si le max est atteint
guilhemMBED 0:37ba45bb0099 90
guilhemMBED 0:37ba45bb0099 91 srPerdu++; // mise en memoire : un message perdu
guilhemMBED 0:37ba45bb0099 92 }
guilhemMBED 0:37ba45bb0099 93 }
guilhemMBED 0:37ba45bb0099 94
guilhemMBED 0:37ba45bb0099 95 void srTraitement()
guilhemMBED 0:37ba45bb0099 96 {
guilhemMBED 0:37ba45bb0099 97 uint8_t c = srBuffer[srVide++]; // c prends la valeur d'un octet de la tramme
guilhemMBED 0:37ba45bb0099 98 if (srVide == SR_MAX) srVide = 0; // on recommence au debut du tableau si le max est atteint
guilhemMBED 0:37ba45bb0099 99
guilhemMBED 0:37ba45bb0099 100 switch (etatSR) {
guilhemMBED 0:37ba45bb0099 101 case 0: // Verification premier octet header (FF)
guilhemMBED 0:37ba45bb0099 102 calc_checksumSR1 = c;
guilhemMBED 0:37ba45bb0099 103 if (c==0xFF) {
guilhemMBED 0:37ba45bb0099 104 etatSR = 1;
guilhemMBED 0:37ba45bb0099 105 }
guilhemMBED 0:37ba45bb0099 106 break;
guilhemMBED 0:37ba45bb0099 107 case 1: // Verification dexième octet header (FF)
guilhemMBED 0:37ba45bb0099 108 calc_checksumSR1 += c; //update checksum
guilhemMBED 0:37ba45bb0099 109 if (c==0xFF) {
guilhemMBED 0:37ba45bb0099 110 etatSR = 2;
guilhemMBED 0:37ba45bb0099 111 } else {
guilhemMBED 0:37ba45bb0099 112 etatSR = 0;
guilhemMBED 0:37ba45bb0099 113 }
guilhemMBED 0:37ba45bb0099 114 break;
guilhemMBED 0:37ba45bb0099 115 case 2: // traitement octet Packet Size
guilhemMBED 0:37ba45bb0099 116 calc_checksumSR1 += c;
guilhemMBED 0:37ba45bb0099 117 lenSR=c;
guilhemMBED 0:37ba45bb0099 118 if (lenSR<7) etatSR =0; //impossible
guilhemMBED 0:37ba45bb0099 119 else etatSR = 3;
guilhemMBED 0:37ba45bb0099 120 break;
guilhemMBED 0:37ba45bb0099 121 case 3: // traitement octet ID
guilhemMBED 0:37ba45bb0099 122 calc_checksumSR1 += c;
guilhemMBED 0:37ba45bb0099 123 idSR = c;
guilhemMBED 0:37ba45bb0099 124 if (idSR!= data_adress_sensor) etatSR =0; //le capteur n'est pas concerné
guilhemMBED 0:37ba45bb0099 125 else etatSR = 4;
guilhemMBED 0:37ba45bb0099 126 break;
guilhemMBED 0:37ba45bb0099 127 case 4: // traitement octet CMD
guilhemMBED 0:37ba45bb0099 128 calc_checksumSR1 += c;
guilhemMBED 0:37ba45bb0099 129 cmdSR = c;
guilhemMBED 0:37ba45bb0099 130 etatSR = 5;
guilhemMBED 0:37ba45bb0099 131 break;
guilhemMBED 0:37ba45bb0099 132 case 5: // traitement octet checkSum1
guilhemMBED 0:37ba45bb0099 133 checksumSR1 = c;
guilhemMBED 0:37ba45bb0099 134 etatSR = 6;
guilhemMBED 0:37ba45bb0099 135 break;
guilhemMBED 0:37ba45bb0099 136 case 6: // traitement octet checkSum2
guilhemMBED 0:37ba45bb0099 137 checksumSR2 = c;
guilhemMBED 0:37ba45bb0099 138 if (lenSR>7) {
guilhemMBED 0:37ba45bb0099 139 etatSR =7;// si le message comporte des datas
guilhemMBED 0:37ba45bb0099 140 } else {
guilhemMBED 0:37ba45bb0099 141 dataSR = 0x00;
guilhemMBED 0:37ba45bb0099 142 etatSR=8;
guilhemMBED 0:37ba45bb0099 143 }
guilhemMBED 0:37ba45bb0099 144 break;
guilhemMBED 0:37ba45bb0099 145 case 7: // octet data (un seul octet dans notre cas)
guilhemMBED 0:37ba45bb0099 146 calc_checksumSR1 += c;
guilhemMBED 0:37ba45bb0099 147 dataSR=c;
guilhemMBED 0:37ba45bb0099 148 etatSR =8;
guilhemMBED 0:37ba45bb0099 149 break;
guilhemMBED 0:37ba45bb0099 150 case 8: // verification des checksum et envoi
guilhemMBED 0:37ba45bb0099 151 calc_checksumSR1 &=0xFE ;
guilhemMBED 0:37ba45bb0099 152 calc_checksumSR2 = (~calc_checksumSR1 & 0xFE);
guilhemMBED 0:37ba45bb0099 153 etatSR = 0;
guilhemMBED 0:37ba45bb0099 154 if ((checksumSR1 == calc_checksumSR1) && (checksumSR2 == calc_checksumSR2)) { // Verification validité de la tramme
guilhemMBED 0:37ba45bb0099 155 envoiSR(cmdSR,dataSR);// dataSR ne sera utilise que dans les cas de setup
guilhemMBED 0:37ba45bb0099 156 }
guilhemMBED 0:37ba45bb0099 157 break;
guilhemMBED 0:37ba45bb0099 158 }
guilhemMBED 0:37ba45bb0099 159
guilhemMBED 0:37ba45bb0099 160 }
guilhemMBED 0:37ba45bb0099 161
guilhemMBED 0:37ba45bb0099 162 void envoiSR(char commande, char data)
guilhemMBED 0:37ba45bb0099 163 {
guilhemMBED 0:37ba45bb0099 164 int j;
guilhemMBED 0:37ba45bb0099 165 messageSR[4]=commande+0x40; // CMD (doc)
guilhemMBED 0:37ba45bb0099 166
guilhemMBED 0:37ba45bb0099 167 switch (commande) {
guilhemMBED 0:37ba45bb0099 168 case send_RGB:
guilhemMBED 0:37ba45bb0099 169 messageSR[7] = (char)((r & HIGH)>>8); // data
guilhemMBED 0:37ba45bb0099 170 messageSR[8] = (char) (r & LOW);
guilhemMBED 0:37ba45bb0099 171 messageSR[9] = (char)((g & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 172 messageSR[10]= (char) (g & LOW);
guilhemMBED 0:37ba45bb0099 173 messageSR[11]= (char)a ;
guilhemMBED 0:37ba45bb0099 174 messageSR[2]=12; // Packet size
guilhemMBED 0:37ba45bb0099 175 break;
guilhemMBED 0:37ba45bb0099 176
guilhemMBED 0:37ba45bb0099 177 case send_RED:
guilhemMBED 0:37ba45bb0099 178 messageSR[7]= (char)((r & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 179 messageSR[8]= (char) (r & LOW);
guilhemMBED 0:37ba45bb0099 180 messageSR[2]=9;
guilhemMBED 0:37ba45bb0099 181 break;
guilhemMBED 0:37ba45bb0099 182
guilhemMBED 0:37ba45bb0099 183 case send_GREEN:
guilhemMBED 0:37ba45bb0099 184 messageSR[7]= (char)((g & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 185 messageSR[8]= (char) (g & LOW);
guilhemMBED 0:37ba45bb0099 186 messageSR[2]=9;
guilhemMBED 0:37ba45bb0099 187 break;
guilhemMBED 0:37ba45bb0099 188
guilhemMBED 0:37ba45bb0099 189 case send_BLUE:
guilhemMBED 0:37ba45bb0099 190 messageSR[7]= (char)((b & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 191 messageSR[8]= (char) (b & LOW);
guilhemMBED 0:37ba45bb0099 192 messageSR[2]=9;
guilhemMBED 0:37ba45bb0099 193 break;
guilhemMBED 0:37ba45bb0099 194
guilhemMBED 0:37ba45bb0099 195 case send_PROXIMITY:
guilhemMBED 0:37ba45bb0099 196 messageSR[7] = a ;
guilhemMBED 0:37ba45bb0099 197 messageSR[2]=8;
guilhemMBED 0:37ba45bb0099 198 break;
guilhemMBED 0:37ba45bb0099 199
guilhemMBED 0:37ba45bb0099 200 case send_COLOR:
guilhemMBED 0:37ba45bb0099 201 messageSR[7]=color;
guilhemMBED 0:37ba45bb0099 202 messageSR[2]=8;
guilhemMBED 0:37ba45bb0099 203 break;
guilhemMBED 0:37ba45bb0099 204
guilhemMBED 0:37ba45bb0099 205 case setup_LED:
guilhemMBED 0:37ba45bb0099 206 //LED.write(data/258.0);
guilhemMBED 0:37ba45bb0099 207 messageSR[2]=7;
guilhemMBED 0:37ba45bb0099 208 break;
guilhemMBED 0:37ba45bb0099 209
guilhemMBED 0:37ba45bb0099 210 case setup_PROXIMITY_THRESHOLD :
guilhemMBED 0:37ba45bb0099 211 proximity_tresh = data;
guilhemMBED 0:37ba45bb0099 212 messageSR[2]=7;
guilhemMBED 0:37ba45bb0099 213 break;
guilhemMBED 0:37ba45bb0099 214 }
guilhemMBED 0:37ba45bb0099 215 messageSR[5]=0x00; // checksum1
guilhemMBED 0:37ba45bb0099 216 //calcul des checksums
guilhemMBED 0:37ba45bb0099 217 for(j=0; j<messageSR[2]; j++) {
guilhemMBED 0:37ba45bb0099 218 if ((j!=5)&&(j!=6)) messageSR[5] += messageSR[j];
guilhemMBED 0:37ba45bb0099 219 }
guilhemMBED 0:37ba45bb0099 220 messageSR[5] &= 0xFE; // checksum1
guilhemMBED 0:37ba45bb0099 221 messageSR[6] = (~messageSR[5] & 0xFE);//checksum2
guilhemMBED 0:37ba45bb0099 222
guilhemMBED 0:37ba45bb0099 223 // envoi
guilhemMBED 0:37ba45bb0099 224 for (j=0; j<messageSR[2]; j++) {
guilhemMBED 0:37ba45bb0099 225 while (!tx.writeable()); // attente bluetooth libre
guilhemMBED 0:37ba45bb0099 226 tx.putc(messageSR[j]); // ecriture octet par octet
guilhemMBED 0:37ba45bb0099 227 }
guilhemMBED 0:37ba45bb0099 228 }
guilhemMBED 0:37ba45bb0099 229
guilhemMBED 0:37ba45bb0099 230
guilhemMBED 0:37ba45bb0099 231 void canRead()
guilhemMBED 0:37ba45bb0099 232 {
guilhemMBED 0:37ba45bb0099 233 can.read(canBuffer[canRempli++]);
guilhemMBED 0:37ba45bb0099 234 if (canRempli==CAN_MAX) {
guilhemMBED 0:37ba45bb0099 235 canRempli = 0;
guilhemMBED 0:37ba45bb0099 236 }
guilhemMBED 0:37ba45bb0099 237 if (canRempli == canVide) { // buffer plein on perd un message
guilhemMBED 0:37ba45bb0099 238 canVide++;
guilhemMBED 0:37ba45bb0099 239 if (canVide == CAN_MAX) canVide = 0;
guilhemMBED 0:37ba45bb0099 240 canPerdu++;
guilhemMBED 0:37ba45bb0099 241 }
guilhemMBED 0:37ba45bb0099 242 }
guilhemMBED 0:37ba45bb0099 243
guilhemMBED 0:37ba45bb0099 244 void envoiCAN(const CANMessage &msg)
guilhemMBED 0:37ba45bb0099 245 {
guilhemMBED 0:37ba45bb0099 246
guilhemMBED 0:37ba45bb0099 247 state = msg.data[1];
guilhemMBED 0:37ba45bb0099 248 messageCAN[1]= state +0x40;// CMD return
guilhemMBED 0:37ba45bb0099 249 switch (state) {
guilhemMBED 0:37ba45bb0099 250 case send_RGB:
guilhemMBED 0:37ba45bb0099 251 messageCAN[2]= (char)((r & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 252 messageCAN[3]= (char) (r & LOW);
guilhemMBED 0:37ba45bb0099 253 messageCAN[4]= (char)((g & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 254 messageCAN[5]= (char) (g & LOW);
guilhemMBED 0:37ba45bb0099 255 messageCAN[6]= (char)a ;
guilhemMBED 0:37ba45bb0099 256 lenRetour=7;
guilhemMBED 0:37ba45bb0099 257 break;
guilhemMBED 0:37ba45bb0099 258
guilhemMBED 0:37ba45bb0099 259 case send_RED:
guilhemMBED 0:37ba45bb0099 260 messageCAN[2]= (char)((r & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 261 messageCAN[3]= (char) (r & LOW);
guilhemMBED 0:37ba45bb0099 262 lenRetour=4;
guilhemMBED 0:37ba45bb0099 263 break;
guilhemMBED 0:37ba45bb0099 264
guilhemMBED 0:37ba45bb0099 265 case send_GREEN:
guilhemMBED 0:37ba45bb0099 266 messageCAN[2]= (char)((g & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 267 messageCAN[3]= (char) (g & LOW);
guilhemMBED 0:37ba45bb0099 268 lenRetour=4;
guilhemMBED 0:37ba45bb0099 269 break;
guilhemMBED 0:37ba45bb0099 270
guilhemMBED 0:37ba45bb0099 271 case send_BLUE:
guilhemMBED 0:37ba45bb0099 272 messageCAN[2]= (char)((b & HIGH)>>8);
guilhemMBED 0:37ba45bb0099 273 messageCAN[3]= (char) (b & LOW);
guilhemMBED 0:37ba45bb0099 274 lenRetour=4;
guilhemMBED 0:37ba45bb0099 275 break;
guilhemMBED 0:37ba45bb0099 276
guilhemMBED 0:37ba45bb0099 277 case send_PROXIMITY:
guilhemMBED 0:37ba45bb0099 278 messageCAN[2] = a ;
guilhemMBED 0:37ba45bb0099 279 lenRetour=3;
guilhemMBED 0:37ba45bb0099 280 break;
guilhemMBED 0:37ba45bb0099 281
guilhemMBED 0:37ba45bb0099 282 case send_COLOR:
guilhemMBED 0:37ba45bb0099 283 messageCAN[2]=color;
guilhemMBED 0:37ba45bb0099 284 lenRetour=3;
guilhemMBED 0:37ba45bb0099 285 break;
guilhemMBED 0:37ba45bb0099 286
guilhemMBED 0:37ba45bb0099 287 case setup_LED:
guilhemMBED 0:37ba45bb0099 288 //LED.write(msg.data[2]/258.0);
guilhemMBED 0:37ba45bb0099 289 lenRetour=0;
guilhemMBED 0:37ba45bb0099 290 break;
guilhemMBED 0:37ba45bb0099 291
guilhemMBED 0:37ba45bb0099 292 case setup_PROXIMITY_THRESHOLD :
guilhemMBED 0:37ba45bb0099 293 proximity_tresh = msg.data[2];
guilhemMBED 0:37ba45bb0099 294 lenRetour=0;
guilhemMBED 0:37ba45bb0099 295 break;
guilhemMBED 0:37ba45bb0099 296 }
guilhemMBED 0:37ba45bb0099 297
guilhemMBED 0:37ba45bb0099 298 // envoi si besoin
guilhemMBED 0:37ba45bb0099 299 if (lenRetour>0) {
guilhemMBED 0:37ba45bb0099 300 can.write(CANMessage(adress_color_sensor,messageCAN,lenRetour));
guilhemMBED 0:37ba45bb0099 301 }
guilhemMBED 0:37ba45bb0099 302 }
guilhemMBED 0:37ba45bb0099 303
guilhemMBED 0:37ba45bb0099 304
guilhemMBED 0:37ba45bb0099 305 int main()
guilhemMBED 0:37ba45bb0099 306 {
guilhemMBED 0:37ba45bb0099 307 can.frequency(1000000);
guilhemMBED 0:37ba45bb0099 308 //rx.baud(115200);
guilhemMBED 0:37ba45bb0099 309 //tx.baud(115200);
guilhemMBED 0:37ba45bb0099 310
guilhemMBED 0:37ba45bb0099 311 if(SR==0) { // liaison CAN selectionné
guilhemMBED 0:37ba45bb0099 312 can.attach(canRead);
guilhemMBED 0:37ba45bb0099 313 // le premier octet est toujours pareil
guilhemMBED 0:37ba45bb0099 314 messageCAN[0] = data_adress_sensor;
guilhemMBED 0:37ba45bb0099 315
guilhemMBED 0:37ba45bb0099 316
guilhemMBED 0:37ba45bb0099 317 } else if (SR==1) { // liaison Serie selectionnée
guilhemMBED 0:37ba45bb0099 318 rx.attach(&srRead);
guilhemMBED 0:37ba45bb0099 319 // octets toujours pareil :
guilhemMBED 0:37ba45bb0099 320 messageSR[0]=0xff; // Start of packet
guilhemMBED 0:37ba45bb0099 321 messageSR[1]=0xff;
guilhemMBED 0:37ba45bb0099 322 messageSR[3]= data_adress_sensor; // pID
guilhemMBED 0:37ba45bb0099 323 }
guilhemMBED 0:37ba45bb0099 324
guilhemMBED 0:37ba45bb0099 325 while(1) {
guilhemMBED 0:37ba45bb0099 326
guilhemMBED 0:37ba45bb0099 327 /* acquisition capteurs */
guilhemMBED 0:37ba45bb0099 328 capt1.readRedLight(r);
guilhemMBED 0:37ba45bb0099 329 capt1.readGreenLight(g);
guilhemMBED 0:37ba45bb0099 330 capt1.readBlueLight(b);
guilhemMBED 0:37ba45bb0099 331 capt1.readProximity(a);
guilhemMBED 0:37ba45bb0099 332
guilhemMBED 0:37ba45bb0099 333 /* calcul couleur */
guilhemMBED 0:37ba45bb0099 334 if (a<proximity_tresh) {
guilhemMBED 0:37ba45bb0099 335 color = 0 ; // 0 Rien
guilhemMBED 0:37ba45bb0099 336 } else if (r > g ) {
guilhemMBED 0:37ba45bb0099 337 color = 1 ; // 1 rouge
guilhemMBED 0:37ba45bb0099 338 } else {
guilhemMBED 0:37ba45bb0099 339 color = 2 ; // 2 vert
guilhemMBED 0:37ba45bb0099 340 }
guilhemMBED 0:37ba45bb0099 341
guilhemMBED 0:37ba45bb0099 342 /* liaison CAN */
guilhemMBED 0:37ba45bb0099 343 if (canRempli != canVide) { // si le buffer CAN n'est pas vide
guilhemMBED 0:37ba45bb0099 344 canVide++;
guilhemMBED 0:37ba45bb0099 345 if (canVide == CAN_MAX) canVide = 0;
guilhemMBED 0:37ba45bb0099 346 envoiCAN(canBuffer[canRempli-1]);
guilhemMBED 0:37ba45bb0099 347 }
guilhemMBED 0:37ba45bb0099 348
guilhemMBED 0:37ba45bb0099 349 /* liaison serie */
guilhemMBED 0:37ba45bb0099 350 if (srRempli != srVide) { // si le buffer serie n'est pas vide
guilhemMBED 0:37ba45bb0099 351 srTraitement(); // traitement de la tramme sr
guilhemMBED 0:37ba45bb0099 352 }
guilhemMBED 0:37ba45bb0099 353 }
guilhemMBED 0:37ba45bb0099 354 }