CRAC Team / Mbed 2 deprecated Capt_couleur_smart

Dependencies:   mbed APDS_9960

Committer:
guilhemMBED
Date:
Mon Jul 20 07:14:12 2020 +0000
Revision:
3:96e8e5affaad
Parent:
2:3bb4a324ecf7
Child:
4:6212d7723c16
com serie et can fonctionnelle

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