CRAC Team / Mbed 2 deprecated Capt_couleur_CAN

Dependencies:   mbed APDS_9960

Revision:
7:278339a9eeba
Parent:
6:9aeb18bebe85
Child:
8:190a86f06a07
diff -r 9aeb18bebe85 -r 278339a9eeba main.cpp
--- a/main.cpp	Fri Dec 13 16:06:03 2019 +0000
+++ b/main.cpp	Fri Dec 20 15:50:46 2019 +0000
@@ -1,16 +1,36 @@
 #include "mbed.h"
 #include "glibr.h"
 
-Serial USB_link(USBTX, USBRX);       // USB initialization
+// Adress
+#define adress_color_sensor 0x4B0
+#define data_adress_general 0xFE
+#define data_adress_sensor  0x00
+#define data_adress_return  0xFF
+
+// setup commands
+#define setup_LED 0x10
+#define setup_PROXIMITY_THRESHOLD 0x11
 
-//PwmOut LED(A2);                     // LED initialization
+// Requests
+#define send_RGB_value 0x00
+#define send_RED       0x01
+#define send_GREEN     0x02
+#define send_BLUE      0x03
+#define send_PROXIMITY 0x04
+#define send_COLOR     0x08
+
+Serial USB_link(USBTX, USBRX);     // USB initialization
+
+//PwmOut LED(A2);                  // LED initialization
 
 glibr capt1(D4,D5);                // I²C initialization : D4 = SDA ; D5 = SCL
 
-CAN can1(PA_11, PA_12);                  // CAN initialization
+CAN can1(PA_11, PA_12);            // CAN initialization : PA_11 =
 
 CANMessage msg;
 
+
+
 bool initialization(void)
 {
     //  USB initialization
@@ -24,7 +44,7 @@
     // LED.period_ms(10);
     // LED.write(0.5);
 
-    // sensor initalization
+    // Sensor initalization
     if( (capt1.ginit()) && (capt1.enableLightSensor(true)) && (capt1.enableProximitySensor(true)) ) {
         return true;
     } else {
@@ -34,10 +54,11 @@
 
 int main (void)
 {
-    uint16_t r,g,b;
+    uint16_t r,g,b ;
     uint8_t a ;
-    char color;
-
+    char proximity_tresh = 200, color, state, message[8];
+    message[0] = data_adress_return;
+    message[1] = data_adress_sensor;
     if (initialization())  USB_link.printf("Initialization complete \r\n");
     else USB_link.printf("Error during initialization\r\n");
 
@@ -47,26 +68,72 @@
         capt1.readBlueLight(b);
         capt1.readProximity(a);
 
-        //display of red, green and proximty variables
-        //USB_link.printf("r: %hu g : %hu  prox : %hu \r\n ",r,g,a);
+
 
-        if (a<200) {
+        if (a<proximity_tresh) {
             color = 0 ;  // 0 means no object being measured
         } else if (r > g ) {
             color = 1 ;  // 1 means red
         } else {
             color = 2 ;  // 2 means green
         }
+        //display of red, green and proximty variables
+        //USB_link.printf("r: %hu g : %hu  prox : %hu \r\n ",r,g,a);
+
+        //diplay of color value
         //USB_link.printf("color : %hu \r\n", color);
-        
-        // read of the CAN 
-        if (can1.read(msg)) {    
-            // verification of the ID ( 0x4B0 )
-            if (msg.id==1200) { 
-                can1.write(CANMessage(1200,&color,1)); // writing of the color value on the CAN bus
+
+        // reading of the CAN bus
+        if (can1.read(msg)) {
+            //verification of the ID ( 0x4B0 ) and soft ID
+            if ((msg.id==adress_color_sensor)&((msg.data[0]==data_adress_general)|(msg.data[0]==data_adress_sensor))) {
+                state=msg.data[1];
+                switch (state) {
+                    case send_RGB_value:    // send_RGB_value
+                        message[2]= (char)((r & 0xFF00)>>8);
+                        message[3]= (char) (r & 0x00FF);
+                        message[4]= (char)((g & 0xFF00)>>8);
+                        message[5]= (char) (g & 0x00FF);                       
+                        message[6]= (char)a ;
+                        can1.write(CANMessage(adress_color_sensor,message,7)); 
+                        break;
+
+                    case send_RED:    
+                        message[2]= (char)((r & 0xFF00)>>8);
+                        message[3]= (char) (r & 0x00FF);
+                        can1.write(CANMessage(adress_color_sensor,message,4));
+                        break;
+
+                    case send_GREEN:    
+                        message[2]= (char)((g & 0xFF00)>>8);
+                        message[3]= (char) (g & 0x00FF);
+                        can1.write(CANMessage(adress_color_sensor,message,4));
+                        break;
+
+                    case send_BLUE:    
+                        message[2]= (char)((b & 0xFF00)>>8);
+                        message[3]= (char) (b & 0x00FF);
+                        can1.write(CANMessage(adress_color_sensor,message,4));
+                        break;
+
+                    case send_PROXIMITY:    
+                        message[2] = a ;
+                        can1.write(CANMessage(adress_color_sensor,message,3));
+                        break;
+
+                    case send_COLOR:    
+                        message[2]=color;
+                        can1.write(CANMessage(adress_color_sensor,message,3));
+                        break;
+
+                    case setup_LED:  
+                        //LED.write(msg.data[2]/258);
+                        break;
+                    case setup_PROXIMITY_THRESHOLD :
+                        proximity_tresh = msg.data[2];
+                        break;
+                }
             }
         }
-
     }
-
 }
\ No newline at end of file