CRAC Team / Mbed 2 deprecated Capt_couleur_smart

Dependencies:   mbed APDS_9960

Revision:
4:6212d7723c16
Parent:
3:96e8e5affaad
Child:
5:b91bf2db2ea8
diff -r 96e8e5affaad -r 6212d7723c16 main.cpp
--- a/main.cpp	Mon Jul 20 07:14:12 2020 +0000
+++ b/main.cpp	Fri Jan 14 17:26:21 2022 +0000
@@ -1,10 +1,9 @@
 #include "mbed.h"
 #include "glibr.h"
-#include <RawSerial.h>
 
 #define SR 1   // 0 = CAN | 1 = serie
-#define DEBUG_COM  1     // 0 = pas de debug | 1 = print de toutes les tramme serie recue et envoyées
-#define DEBUG_SENS 0    // 0 = pas de debug | 1 = print de la couleur (fait pour tester le capteur en lui même)
+#define DEBUG_COM  0     // 0 = pas de debug | 1 = print de toutes les tramme serie recue et envoyées
+#define DEBUG_SENS 0     // 0 = pas de debug | 1 = print de la couleur (fait pour tester le capteur en lui même)
 
 #if ((DEBUG_COM==1)||(DEBUG_SENS==1))
 #define DEBUG_GENERAL 1
@@ -19,7 +18,7 @@
 #endif 
 
 // Adress
-#define data_adress_sensor  0x00    // pID specifique a chaque capteur (between 0x00 and 0xFD)
+#define data_adress_sensor  0x20    // pID specifique a chaque capteur (between 0x00 and 0xFD)
 #define data_adress_general 0xFF    // pID génerale pour communiquer avec tout les capteurs
 #define adress_color_sensor 0x4B0   // CAN ID pareil pour tout les capteur (seulement pour le CAN)
 
@@ -48,6 +47,7 @@
 glibr capt1(PB_7,PB_6);      // I²C initialization : PB_7 = SDA ; PB_6 = SCL
 CAN can(PA_11, PA_12);      
 PwmOut LED(D9);              
+DigitalIn srTx(PA_9, PullUp);
 
 // Buffer CAN
 CANMessage canBuffer[CAN_MAX];
@@ -103,6 +103,9 @@
 
 
 
+
+
+
 bool initialization(void)
 {
 #if DEBUG_GENERAL
@@ -125,6 +128,93 @@
     }
 }
 
+
+int main()
+{
+#if DEBUG_GENERAL
+    if (initialization()) USB_link.printf("Init finie\r\n");
+    else USB_link.printf("Erreur pendant l'init\r\n");
+#else 
+    initialization();
+#endif
+
+    if(SR==0) { // liaison CAN selectionné
+#if DEBUG_COM
+        int adColor = adress_color_sensor;
+        int adSensor = data_adress_sensor;
+        USB_link.printf("type de com : CAN\r\n");
+        USB_link.printf("ID can : %03X\r\ndata ID : %02X\r\n", adColor, adSensor);
+#endif        
+        can.attach(canRead);
+        // le premier octet est toujours pareil 
+        message[0] = data_adress_sensor;
+
+    }
+    else if (SR==1) { // liaison Serie selectionnée
+#if DEBUG_COM
+        USB_link.printf("type de com : Serie\r\n");
+        USB_link.printf("Id : %x\r\n",data_adress_sensor);
+#endif
+        sr.attach(&srRead); 
+        // octets toujours pareil :
+        message[0]=0xff; // Start of packet
+        message[1]=0xff;
+        message[3]= data_adress_sensor; // pID
+    }
+
+    while(1) {
+
+        // acquisition capteurs //
+        capt1.readRedLight(r);
+        capt1.readGreenLight(g);
+        capt1.readBlueLight(b);
+        capt1.readProximity(a);
+
+        // calcul couleur //
+        if (a<proximity_tresh) {
+            color = 0 ;  // 0 Rien
+        }
+        else if ((r > g )&&(r > b )) {
+            color = 1 ;  // 1 rouge
+        }
+        else if ((g > r )&&(g > b )) {
+            color = 2 ;  // 2 vert
+        }
+        else if ((b > r )&&(b > g )) {
+            color = 3 ;  // 3 bleu
+        }
+        else {
+            color = 4 ;  // 4 noir ou blanc
+        }
+#if DEBUG_SENS
+        USB_link.printf("rouge : %x, vert : %x, bleu : %x    ",r, g, b);
+        USB_link.printf("color : %x \r\n", color);
+        USB_link.printf("color : %hu \r\n", color);
+        wait(0.5);
+#endif    
+        
+        
+        // liaison CAN //
+        if (canRempli != canVide) { // si le buffer CAN n'est pas vide
+            canVide++;
+            if (canVide == CAN_MAX) canVide = 0;
+            if ((canBuffer[canRempli-1].id==adress_color_sensor)&((canBuffer[canRempli-1].data[0]==data_adress_general)|(canBuffer[canRempli-1].data[0]==data_adress_sensor))) {
+                if (canBuffer[canRempli-1].len==3){
+                    envoi(canBuffer[canRempli-1].data[1],canBuffer[canRempli-1].data[2]);
+                } else { 
+                    envoi(canBuffer[canRempli-1].data[1],0);
+                }
+            }
+        }
+
+        // liaison serie //
+        if (srRempli != srVide) { // si le buffer serie n'est pas vide
+            srTraitement();          // traitement de la tramme sr
+        }
+    }
+}
+
+
 void srRead()
 {
     srBuffer[srRempli++] = sr.getc();       //stockage nouvel octet dans le buffer
@@ -148,13 +238,12 @@
 #endif
     switch (etatSR) {
         case 0: // Verification premier octet header (FF)
-            calc_checksumSR1 = c;
             if (c==0xFF) {
                 etatSR = 1;
             }
             break;
         case 1: // Verification dexième octet header (FF)
-            calc_checksumSR1 ^= c;    //update checksum
+            calc_checksumSR1 = 0;
             if (c==0xFF) {
                 etatSR = 2;
             } else {
@@ -199,7 +288,7 @@
     }
     if (etatSR==8){// verification des checksum et envoi
         calc_checksumSR1 &=0xFE ;
-        calc_checksumSR2 = (~calc_checksumSR1 & 0xFE);
+        calc_checksumSR2 = (~calc_checksumSR1) & 0xFE;
         etatSR = 0;
         if ((checksumSR1 == calc_checksumSR1) && (checksumSR2 == calc_checksumSR2)) {  // Verification validité de la tramme
             envoi(cmdSR,dataSR);// dataSR ne sera utilise que dans les cas de setup 
@@ -222,9 +311,10 @@
 
 void envoi(char commande, char data)
 {
-    int j;
-    message[4]=commande+0x40; // CMD (doc) 
-    
+#if SR==0 // mode CAN    
+    message[1]=commande+0x40; // CMD (doc) 
+#endif
+
     // Preparation des datas //
     switch (commande) {
         case send_RGB:
@@ -232,8 +322,9 @@
             message[OFFSET_DATA+1] = (char) (r & LOW);
             message[OFFSET_DATA+2] = (char)((g & HIGH)>>8);
             message[OFFSET_DATA+3] = (char) (g & LOW);
-            message[OFFSET_DATA+4] = (char) a ;
-            DataLen=5;    
+            message[OFFSET_DATA+4] = (char)((b & HIGH)>>8);
+            message[OFFSET_DATA+5] = (char) (b & LOW);
+            DataLen=6;    
             break;
 
         case send_RED:
@@ -260,12 +351,12 @@
             break;
 
         case send_COLOR:
-            message[OFFSET_DATA+0]=color;
+            message[OFFSET_DATA+0] = color;
             DataLen=1;
             break;
 
         case setup_LED:
-            LED.write(data/258.0); // a modifier : ON/OFF seulement 
+            LED.write(data/255.0); // a modifier : ON/OFF seulement 
             DataLen=0;
             break;
 
@@ -280,14 +371,15 @@
     
 #if SR==1 // format SR //
     message[2]= Len;
-        
+    message[4]=commande+0x40; // CMD (doc)
+    int j;
     // calcul des checksums //
-    message[5]=0xFF;    // checksum1
-    for(j=1; j<message[2]; j++) {
+    message[5]=0;    // checksum1
+    for(j=2; j<message[2]; j++) {
         if ((j!=5)&&(j!=6)) message[5] ^= message[j];
     }
     message[5] &= 0xFE;   // checksum1
-    message[6] = (~message[5] & 0xFE);//checksum2
+    message[6] = (~message[5]) & 0xFE;//checksum2
 
     // envoi //
     //sr.enable_output(true);
@@ -299,81 +391,9 @@
         USB_link.printf("envoi : %x\r\n",message[j]); 
     #endif
     }
-       // sr.diasable_output(true)
+       // sr.disable_output(true)
 
 #else // format CAN //
     can.write(CANMessage(adress_color_sensor,message,Len));
 #endif   
 }
-
-int main()
-{
-#if DEBUG_GENERAL
-    if (initialization()) USB_link.printf("Init finie\r\n");
-    else USB_link.printf("Erreur pendant l'init\r\n");
-#else 
-    initialization();
-#endif
-
-    if(SR==0) { // liaison CAN selectionné
-#if DEBUG_COM
-        USB_link.printf("type de com : CAN\r\n");
-        USB_link.printf("ID can : %h\r\ndata ID : %h\r\n",adress_color_sensor,data_adress_sensor);
-#endif        
-        can.attach(canRead);
-        // le premier octet est toujours pareil 
-        message[0] = data_adress_sensor;
-
-    } else if (SR==1) { // liaison Serie selectionnée
-#if DEBUG_COM
-        USB_link.printf("type de com : Serie\r\n");
-        USB_link.printf("Id : %x\r\n",data_adress_sensor);
-#endif
-        sr.attach(&srRead); 
-        // octets toujours pareil :
-        message[0]=0xff; // Start of packet
-        message[1]=0xff;
-        message[3]= data_adress_sensor; // pID
-    }
-
-    while(1) {
-
-        // acquisition capteurs //
-        capt1.readRedLight(r);
-        capt1.readGreenLight(g);
-        capt1.readBlueLight(b);
-        capt1.readProximity(a);
-
-        // calcul couleur //
-        if (a<proximity_tresh) {
-            color = 0 ;  // 0 Rien
-        } else if (r > g ) {
-            color = 1 ;  // 1 rouge
-        } else {
-            color = 2 ;  // 2 vert
-        }
-#if DEBUG_SENS
-        USB_link.printf("color : %hu \r\n", color);
-        wait(0.5);
-#endif    
-        
-        
-        // liaison CAN //
-        if (canRempli != canVide) { // si le buffer CAN n'est pas vide
-            canVide++;
-            if (canVide == CAN_MAX) canVide = 0;
-            if ((canBuffer[canRempli-1].id==adress_color_sensor)&((canBuffer[canRempli-1].data[0]==data_adress_general)|(canBuffer[canRempli-1].data[0]==data_adress_sensor))) {
-                if (canBuffer[canRempli-1].len==3){
-                    envoi(canBuffer[canRempli-1].data[1],canBuffer[canRempli-1].data[2]);
-                } else { 
-                    envoi(canBuffer[canRempli-1].data[1],0);
-                }
-            }
-        }
-
-        // liaison serie //
-        if (srRempli != srVide) { // si le buffer serie n'est pas vide
-            srTraitement();          // traitement de la tramme sr
-        }
-    }
-}