Making a BMW E90 instrument cluster alive for demonstration purposes

Dependencies:   mbed

Revision:
0:830e074c92d5
Child:
1:a582aeb10c32
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 07 23:39:16 2017 +0000
@@ -0,0 +1,129 @@
+#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);
+            
+}