Making a BMW E90 instrument cluster alive for demonstration purposes

Dependencies:   mbed

main.cpp

Committer:
gume
Date:
2017-03-07
Revision:
0:830e074c92d5
Child:
1:a582aeb10c32

File content as of revision 0:830e074c92d5:

#include "mbed.h"
#include "T15Msg.h"

Ticker ticker;

DigitalOut led1(PA_5);
CAN can1(PB_8, PB_9);  // rd, td Transmitter
T15Msg t15;

/*
 0x130 (CAS) T15 signal, 100 ms
 0x1B4 (Kombi) OUT? Speed status, 100 ms
*/

void sendT15() {
    if (t15.sendMessage(&can1)) {
        printf("T15 sent \n");
    }
    
    led1 = !led1;
/*
    char data_130 [] = { 0x45, 0x42, 0x8F, 0xE2, 0xFE };
    char data_130 [] = { 0x45, 0x40, 0x21, 0x8F, 0x00 };
*/
}

void sendLight(char mode) {

    /*
    // Light
    CAN ID-----DATA
    ===== ----====
    21A-------00 20 F7 OFF
    21A-------04 22 F7 Parking light / angel eyes
    21A-------05 22 F7 Light on
    */
    
    char *data;
    char data_21A_0 [] = { 0x00, 0x20, 0xF7 };
    char data_21A_1 [] = { 0x04, 0x22, 0xF7 };
    char data_21A_2 [] = { 0x05, 0x22, 0xF7 };

    switch (mode) {
        case 1:
            data = data_21A_1;
            break;
        case 2:
            data = data_21A_2;
            break;
        default:
            data = data_21A_0;
            break;
    }
    if (can1.write(CANMessage(0x21A, data, 3))) {
        printf("Light sent \n");
    }        
}

    //Ignition status
    /*
    0[7]: engine runinng
    1[7]: ignition || engine running
    2[7]: ignition || engine running
    2[654312]: 111111
    3: 0x50
    4-7: 0xff
    */
    
    /*
    // Ignition
    char data_26E [] = { 0x40, 0x40, 0x4F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF };
    if(can1.write(CANMessage(0x26E, data_26E, 8))) {
        printf("Ignition sent \n");
    }
    */
    
    /*
    // RPM
    char data_0A5 [] = { 0xCD, 0xD5, 0xEC, 0xC7, 0x7E, 0x34, 0x0C, 0xF1 };
    if(can1.write(CANMessage(0x0A5, data_0A5, 8))) {
        printf("RPM sent \n");
    }
    */
    
    /*
    // Speed
    char data_1A6 [] = { 0x13, 0x4D, 0x46, 0x4D, 0x33, 0x4D, 0xD0, 0xFF };
    if(can1.write(CANMessage(0x1A6, data_1A6, 8))) {
        printf("Speed sent \n");
    }
    */
    
    /*
    // Door
    char data_2FC [] = { 0x81, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
    if(can1.write(CANMessage(0x2FC, data_2FC, 7))) {
        printf("Door sent \n");
    }
    */
    
    /*
    // HB
    char data_34F [] = { 0xFE, 0xFF };
    //data_34F[0] = counter;
    if(can1.write(CANMessage(0x34F, data_34F, 2))) {
        printf("HB sent \n");
    }
    */
    
    /*
    //char data_349 [] = { 0x76, 0x0F, 0xBE, 0x1A, 0x00 };
    char data_349 [] = { 0x00, 0x00, 0xBE, 0x1A, 0x00 };
    //data_349[0] = timer14_v;
    //data_349[1] = timer14_v;
    // data_349[0] = counter;
    if(can1.write(CANMessage(0x349, data_349, 5))) {
        printf("Fuel sent \n");
    }    
    */

//**********The main program*********************
int main() {

    can1.frequency(100000);
    ticker.attach(&sendT15, 0.1); //Send every 100 msec
    
    wait_us(1000);
            
}