CRAC Team / Mbed 2 deprecated Capt_couleur_smart

Dependencies:   mbed APDS_9960

Committer:
guilhemMBED
Date:
Wed Jun 24 14:54:38 2020 +0000
Revision:
2:3bb4a324ecf7
Parent:
1:93f012c817ba
Child:
3:96e8e5affaad
derniere modif ; toujours pas test

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