CRAC Team / Mbed 2 deprecated Capt_couleur_CAN

Dependencies:   mbed APDS_9960

main.cpp

Committer:
guilhemMBED
Date:
2019-12-20
Revision:
7:278339a9eeba
Parent:
6:9aeb18bebe85
Child:
8:190a86f06a07

File content as of revision 7:278339a9eeba:

#include "mbed.h"
#include "glibr.h"

// 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

// 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 : PA_11 =

CANMessage msg;



bool initialization(void)
{
    //  USB initialization
    USB_link.baud(115200);
    USB_link.printf("Debut prog\r\n");

    // CAN init
    can1.frequency(1000000);

    // LED initialization
    // LED.period_ms(10);
    // LED.write(0.5);

    // Sensor initalization
    if( (capt1.ginit()) && (capt1.enableLightSensor(true)) && (capt1.enableProximitySensor(true)) ) {
        return true;
    } else {
        return false;
    }
}

int main (void)
{
    uint16_t r,g,b ;
    uint8_t a ;
    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");

    while(1) {
        capt1.readRedLight(r);
        capt1.readGreenLight(g);
        capt1.readBlueLight(b);
        capt1.readProximity(a);



        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);

        // 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;
                }
            }
        }
    }
}