Making a BMW E90 instrument cluster alive for demonstration purposes

Dependencies:   mbed

Committer:
gume
Date:
Tue Mar 07 23:39:16 2017 +0000
Revision:
0:830e074c92d5
Child:
1:a582aeb10c32
New T15 messages

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gume 0:830e074c92d5 1 #include "mbed.h"
gume 0:830e074c92d5 2 #include "T15Msg.h"
gume 0:830e074c92d5 3
gume 0:830e074c92d5 4 Ticker ticker;
gume 0:830e074c92d5 5
gume 0:830e074c92d5 6 DigitalOut led1(PA_5);
gume 0:830e074c92d5 7 CAN can1(PB_8, PB_9); // rd, td Transmitter
gume 0:830e074c92d5 8 T15Msg t15;
gume 0:830e074c92d5 9
gume 0:830e074c92d5 10 /*
gume 0:830e074c92d5 11 0x130 (CAS) T15 signal, 100 ms
gume 0:830e074c92d5 12 0x1B4 (Kombi) OUT? Speed status, 100 ms
gume 0:830e074c92d5 13 */
gume 0:830e074c92d5 14
gume 0:830e074c92d5 15 void sendT15() {
gume 0:830e074c92d5 16 if (t15.sendMessage(&can1)) {
gume 0:830e074c92d5 17 printf("T15 sent \n");
gume 0:830e074c92d5 18 }
gume 0:830e074c92d5 19
gume 0:830e074c92d5 20 led1 = !led1;
gume 0:830e074c92d5 21 /*
gume 0:830e074c92d5 22 char data_130 [] = { 0x45, 0x42, 0x8F, 0xE2, 0xFE };
gume 0:830e074c92d5 23 char data_130 [] = { 0x45, 0x40, 0x21, 0x8F, 0x00 };
gume 0:830e074c92d5 24 */
gume 0:830e074c92d5 25 }
gume 0:830e074c92d5 26
gume 0:830e074c92d5 27 void sendLight(char mode) {
gume 0:830e074c92d5 28
gume 0:830e074c92d5 29 /*
gume 0:830e074c92d5 30 // Light
gume 0:830e074c92d5 31 CAN ID-----DATA
gume 0:830e074c92d5 32 ===== ----====
gume 0:830e074c92d5 33 21A-------00 20 F7 OFF
gume 0:830e074c92d5 34 21A-------04 22 F7 Parking light / angel eyes
gume 0:830e074c92d5 35 21A-------05 22 F7 Light on
gume 0:830e074c92d5 36 */
gume 0:830e074c92d5 37
gume 0:830e074c92d5 38 char *data;
gume 0:830e074c92d5 39 char data_21A_0 [] = { 0x00, 0x20, 0xF7 };
gume 0:830e074c92d5 40 char data_21A_1 [] = { 0x04, 0x22, 0xF7 };
gume 0:830e074c92d5 41 char data_21A_2 [] = { 0x05, 0x22, 0xF7 };
gume 0:830e074c92d5 42
gume 0:830e074c92d5 43 switch (mode) {
gume 0:830e074c92d5 44 case 1:
gume 0:830e074c92d5 45 data = data_21A_1;
gume 0:830e074c92d5 46 break;
gume 0:830e074c92d5 47 case 2:
gume 0:830e074c92d5 48 data = data_21A_2;
gume 0:830e074c92d5 49 break;
gume 0:830e074c92d5 50 default:
gume 0:830e074c92d5 51 data = data_21A_0;
gume 0:830e074c92d5 52 break;
gume 0:830e074c92d5 53 }
gume 0:830e074c92d5 54 if (can1.write(CANMessage(0x21A, data, 3))) {
gume 0:830e074c92d5 55 printf("Light sent \n");
gume 0:830e074c92d5 56 }
gume 0:830e074c92d5 57 }
gume 0:830e074c92d5 58
gume 0:830e074c92d5 59 //Ignition status
gume 0:830e074c92d5 60 /*
gume 0:830e074c92d5 61 0[7]: engine runinng
gume 0:830e074c92d5 62 1[7]: ignition || engine running
gume 0:830e074c92d5 63 2[7]: ignition || engine running
gume 0:830e074c92d5 64 2[654312]: 111111
gume 0:830e074c92d5 65 3: 0x50
gume 0:830e074c92d5 66 4-7: 0xff
gume 0:830e074c92d5 67 */
gume 0:830e074c92d5 68
gume 0:830e074c92d5 69 /*
gume 0:830e074c92d5 70 // Ignition
gume 0:830e074c92d5 71 char data_26E [] = { 0x40, 0x40, 0x4F, 0x50, 0xFF, 0xFF, 0xFF, 0xFF };
gume 0:830e074c92d5 72 if(can1.write(CANMessage(0x26E, data_26E, 8))) {
gume 0:830e074c92d5 73 printf("Ignition sent \n");
gume 0:830e074c92d5 74 }
gume 0:830e074c92d5 75 */
gume 0:830e074c92d5 76
gume 0:830e074c92d5 77 /*
gume 0:830e074c92d5 78 // RPM
gume 0:830e074c92d5 79 char data_0A5 [] = { 0xCD, 0xD5, 0xEC, 0xC7, 0x7E, 0x34, 0x0C, 0xF1 };
gume 0:830e074c92d5 80 if(can1.write(CANMessage(0x0A5, data_0A5, 8))) {
gume 0:830e074c92d5 81 printf("RPM sent \n");
gume 0:830e074c92d5 82 }
gume 0:830e074c92d5 83 */
gume 0:830e074c92d5 84
gume 0:830e074c92d5 85 /*
gume 0:830e074c92d5 86 // Speed
gume 0:830e074c92d5 87 char data_1A6 [] = { 0x13, 0x4D, 0x46, 0x4D, 0x33, 0x4D, 0xD0, 0xFF };
gume 0:830e074c92d5 88 if(can1.write(CANMessage(0x1A6, data_1A6, 8))) {
gume 0:830e074c92d5 89 printf("Speed sent \n");
gume 0:830e074c92d5 90 }
gume 0:830e074c92d5 91 */
gume 0:830e074c92d5 92
gume 0:830e074c92d5 93 /*
gume 0:830e074c92d5 94 // Door
gume 0:830e074c92d5 95 char data_2FC [] = { 0x81, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
gume 0:830e074c92d5 96 if(can1.write(CANMessage(0x2FC, data_2FC, 7))) {
gume 0:830e074c92d5 97 printf("Door sent \n");
gume 0:830e074c92d5 98 }
gume 0:830e074c92d5 99 */
gume 0:830e074c92d5 100
gume 0:830e074c92d5 101 /*
gume 0:830e074c92d5 102 // HB
gume 0:830e074c92d5 103 char data_34F [] = { 0xFE, 0xFF };
gume 0:830e074c92d5 104 //data_34F[0] = counter;
gume 0:830e074c92d5 105 if(can1.write(CANMessage(0x34F, data_34F, 2))) {
gume 0:830e074c92d5 106 printf("HB sent \n");
gume 0:830e074c92d5 107 }
gume 0:830e074c92d5 108 */
gume 0:830e074c92d5 109
gume 0:830e074c92d5 110 /*
gume 0:830e074c92d5 111 //char data_349 [] = { 0x76, 0x0F, 0xBE, 0x1A, 0x00 };
gume 0:830e074c92d5 112 char data_349 [] = { 0x00, 0x00, 0xBE, 0x1A, 0x00 };
gume 0:830e074c92d5 113 //data_349[0] = timer14_v;
gume 0:830e074c92d5 114 //data_349[1] = timer14_v;
gume 0:830e074c92d5 115 // data_349[0] = counter;
gume 0:830e074c92d5 116 if(can1.write(CANMessage(0x349, data_349, 5))) {
gume 0:830e074c92d5 117 printf("Fuel sent \n");
gume 0:830e074c92d5 118 }
gume 0:830e074c92d5 119 */
gume 0:830e074c92d5 120
gume 0:830e074c92d5 121 //**********The main program*********************
gume 0:830e074c92d5 122 int main() {
gume 0:830e074c92d5 123
gume 0:830e074c92d5 124 can1.frequency(100000);
gume 0:830e074c92d5 125 ticker.attach(&sendT15, 0.1); //Send every 100 msec
gume 0:830e074c92d5 126
gume 0:830e074c92d5 127 wait_us(1000);
gume 0:830e074c92d5 128
gume 0:830e074c92d5 129 }