olivier flayols
/
SCANIA_PGRT_V1_2
.
main.cpp@0:359dfe20eb14, 2019-10-16 (annotated)
- Committer:
- arcannae
- Date:
- Wed Oct 16 20:47:12 2019 +0000
- Revision:
- 0:359dfe20eb14
.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
arcannae | 0:359dfe20eb14 | 1 | /*---------------------------------------------------------------------------------------* |
arcannae | 0:359dfe20eb14 | 2 | *Script pour Tableau de bord Scania PGRT * |
arcannae | 0:359dfe20eb14 | 3 | * ________________ * |
arcannae | 0:359dfe20eb14 | 4 | * / Olivier Flayols\_____________________________________________________________________* |
arcannae | 0:359dfe20eb14 | 5 | * V 1.2 * |
arcannae | 0:359dfe20eb14 | 6 | * Version de test * |
arcannae | 0:359dfe20eb14 | 7 | *----------------------------------------------------------------------------------------* |
arcannae | 0:359dfe20eb14 | 8 | */ |
arcannae | 0:359dfe20eb14 | 9 | |
arcannae | 0:359dfe20eb14 | 10 | #include "mbed.h" |
arcannae | 0:359dfe20eb14 | 11 | #include "FastPWM.h" |
arcannae | 0:359dfe20eb14 | 12 | |
arcannae | 0:359dfe20eb14 | 13 | //---------- Declaration des Variables et constantes et assigation des broches ----------- |
arcannae | 0:359dfe20eb14 | 14 | |
arcannae | 0:359dfe20eb14 | 15 | DigitalOut led2 (LED2); |
arcannae | 0:359dfe20eb14 | 16 | DigitalOut led1 (D12); |
arcannae | 0:359dfe20eb14 | 17 | |
arcannae | 0:359dfe20eb14 | 18 | CAN can1 (D15, D14); |
arcannae | 0:359dfe20eb14 | 19 | CAN can2 (D4, D10); |
arcannae | 0:359dfe20eb14 | 20 | |
arcannae | 0:359dfe20eb14 | 21 | Serial COM (USBTX, USBRX); |
arcannae | 0:359dfe20eb14 | 22 | Serial COM_AR (PA_0, PA_1); |
arcannae | 0:359dfe20eb14 | 23 | |
arcannae | 0:359dfe20eb14 | 24 | Ticker CANTransmit; |
arcannae | 0:359dfe20eb14 | 25 | Ticker CAN0Receive; |
arcannae | 0:359dfe20eb14 | 26 | Ticker CAN1Receive; |
arcannae | 0:359dfe20eb14 | 27 | CANMessage BUFRx; |
arcannae | 0:359dfe20eb14 | 28 | Ticker Send_data; |
arcannae | 0:359dfe20eb14 | 29 | |
arcannae | 0:359dfe20eb14 | 30 | FastPWM speed_pulse (D9); |
arcannae | 0:359dfe20eb14 | 31 | |
arcannae | 0:359dfe20eb14 | 32 | DigitalIn input (PA_15); |
arcannae | 0:359dfe20eb14 | 33 | |
arcannae | 0:359dfe20eb14 | 34 | int Serial_data[54]; |
arcannae | 0:359dfe20eb14 | 35 | int serial_byte; |
arcannae | 0:359dfe20eb14 | 36 | bool OCTET0[8]; |
arcannae | 0:359dfe20eb14 | 37 | bool OCTET1[8]; |
arcannae | 0:359dfe20eb14 | 38 | bool OCTET2[8]; |
arcannae | 0:359dfe20eb14 | 39 | bool OCTET3[8]; |
arcannae | 0:359dfe20eb14 | 40 | bool OCTET4[8]; |
arcannae | 0:359dfe20eb14 | 41 | int counter; |
arcannae | 0:359dfe20eb14 | 42 | char DATA[8]; |
arcannae | 0:359dfe20eb14 | 43 | float Period; |
arcannae | 0:359dfe20eb14 | 44 | int truck_speed; |
arcannae | 0:359dfe20eb14 | 45 | |
arcannae | 0:359dfe20eb14 | 46 | //information du CAN rouge |
arcannae | 0:359dfe20eb14 | 47 | |
arcannae | 0:359dfe20eb14 | 48 | int MainBeamIntended; |
arcannae | 0:359dfe20eb14 | 49 | int DirectionIndicator; |
arcannae | 0:359dfe20eb14 | 50 | int OpticruiseLever; |
arcannae | 0:359dfe20eb14 | 51 | int Retarder = 0xFF; |
arcannae | 0:359dfe20eb14 | 52 | int CUV_Information[8]; |
arcannae | 0:359dfe20eb14 | 53 | int Tachograph[8]; |
arcannae | 0:359dfe20eb14 | 54 | int CCVS_information; |
arcannae | 0:359dfe20eb14 | 55 | int speed_mem = 0; |
arcannae | 0:359dfe20eb14 | 56 | int DLN5[8]; |
arcannae | 0:359dfe20eb14 | 57 | int CruiseControl_VehicleSpeed[8]; |
arcannae | 0:359dfe20eb14 | 58 | int HiVeDi[8]; |
arcannae | 0:359dfe20eb14 | 59 | int DATE[8]; |
arcannae | 0:359dfe20eb14 | 60 | |
arcannae | 0:359dfe20eb14 | 61 | enum OCTET0 {brake_air_press_warning, park_brake, high_beam, low_beam, right_blinker, left_blinker, light_parking}; |
arcannae | 0:359dfe20eb14 | 62 | enum OCTET1 {water_temperature_warning, oil_pressure_warning, batterie_voltage_warning, fuel_warning, brake_air_emergency, motor_brake, wipers}; |
arcannae | 0:359dfe20eb14 | 63 | enum OCTET2 {engine_enabled, electric_enabled, left_blinker_state, right_blinker_state, adblue_warning, light_brake, trailer_connected}; |
arcannae | 0:359dfe20eb14 | 64 | enum OCTET3 {wheel_lift_0, wheel_lift_1, wheel_lift_2, wheel_lift_3, wheel_lift_4, wheel_lift_5, wheel_lift_6, wheel_lift_7}; |
arcannae | 0:359dfe20eb14 | 65 | enum OCTET4 {trailer_wheel_lift_0, trailer_wheel_lift_1, trailer_wheel_lift_2, trailer_wheel_lift_3, trailer_wheel_lift_4, trailer_wheel_lift_5, trailer_wheel_lift_6, trailer_wheel_lift_7}; |
arcannae | 0:359dfe20eb14 | 66 | enum Serial_data { speed_ms, LSB_rpm, MSB_rpm, brake_air_pressure_int, fuel_int, oil_pressure_int, oil_temperature_int, water_temperature_int, batterie_voltage_int, average_cosumption_int, adblue, displayed_gear, engine_gear, effective_throttle, effective_brake, effective_clutch, LSB_Fuel_liters, MSB_Fuel_liters, |
arcannae | 0:359dfe20eb14 | 67 | odometer_split_1, odometer_split_2, odometer_split_3, odometer_split_4, game_time_split_1, game_time_split_2, game_time_split_3, game_time_split_4, next_rest_stop_split_1, next_rest_stop_split_2, next_rest_stop_split_3, next_rest_stop_split_4, cruise_control, retarder_steps, |
arcannae | 0:359dfe20eb14 | 68 | decimal_oil_pressure, decimal_battery_voltage, decimal_average_consumption, speed_ms_decimal, decimal_fuel_liters, decimal_odometer, decimal_water_temperature, decimal_fuel, decimal_engine_rpm, decimal_brake_air_pressure, wear_engine, wear_transmission, wear_chassis, wear_wheels, |
arcannae | 0:359dfe20eb14 | 69 | wear_cabin, forward_gear_count, reverse_gear_count, OCTET_0, OCTET_1, OCTET_2, OCTET_3, OCTET_4}; |
arcannae | 0:359dfe20eb14 | 70 | |
arcannae | 0:359dfe20eb14 | 71 | // |------------------------------------------------DMI DIAGNOSTIC--------------------------------------------| ASP1 ASC1-K CC/VS CUV DashDisp EEC1 EngFLuid TC01 HiRes EBC1 ETC1 20 par ligne |
arcannae | 0:359dfe20eb14 | 72 | const int PGN[33] = {0x18FECA0B, 0x18FECA27, 0x18FECA10, 0x18FECA03, 0x18FECA2F, 0x18FECA00, 0x18FECA30, 0x18FECA1E, 0x18FECA3D, 0x18FEAE30, 0x0CFE5A27, 0x18FEF100, 0x18FFB11E, 0x18FEFC27, 0x0CF00400, 0x18FEEF27, 0x0CFE6CEE, 0x18FEC1EE, 0x18F0010B, 0x0CF00203, |
arcannae | 0:359dfe20eb14 | 73 | // ETC2 TP2 EngTemp IEC FuelEco DLN7 Weight ERC1 Cruise DLN2 EAC1-K EBS5 DATE |
arcannae | 0:359dfe20eb14 | 74 | 0x18F00503, 0x18FFA103, 0x18FEEE00, 0x18FEF600, 0x18FEF200, 0x18FF8700, 0x18FEEA2F, 0x18F00010, 0x10FF8E11, 0x0CFF8100, 0x18F00627, 0x1CFEAC0B, 0x18FEE6EE}; |
arcannae | 0:359dfe20eb14 | 75 | |
arcannae | 0:359dfe20eb14 | 76 | |
arcannae | 0:359dfe20eb14 | 77 | //-------------Mappage des données-------------- |
arcannae | 0:359dfe20eb14 | 78 | |
arcannae | 0:359dfe20eb14 | 79 | int map(int x, int in_min, int in_max, int out_min, int out_max) |
arcannae | 0:359dfe20eb14 | 80 | { |
arcannae | 0:359dfe20eb14 | 81 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
arcannae | 0:359dfe20eb14 | 82 | } |
arcannae | 0:359dfe20eb14 | 83 | |
arcannae | 0:359dfe20eb14 | 84 | float mapf(float x, float in_min, float in_max, float out_min, float out_max) |
arcannae | 0:359dfe20eb14 | 85 | { |
arcannae | 0:359dfe20eb14 | 86 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
arcannae | 0:359dfe20eb14 | 87 | } |
arcannae | 0:359dfe20eb14 | 88 | |
arcannae | 0:359dfe20eb14 | 89 | |
arcannae | 0:359dfe20eb14 | 90 | void data_roll() |
arcannae | 0:359dfe20eb14 | 91 | { |
arcannae | 0:359dfe20eb14 | 92 | if (counter < 9) |
arcannae | 0:359dfe20eb14 | 93 | { |
arcannae | 0:359dfe20eb14 | 94 | |
arcannae | 0:359dfe20eb14 | 95 | // brake, APS, AWD, Engine, SMS, COO, 53, Transmission, WTA |
arcannae | 0:359dfe20eb14 | 96 | |
arcannae | 0:359dfe20eb14 | 97 | bool engine_malfunction = Serial_data[wear_engine] / 10; |
arcannae | 0:359dfe20eb14 | 98 | bool transmission_malfunction = Serial_data[wear_transmission] / 10; |
arcannae | 0:359dfe20eb14 | 99 | |
arcannae | 0:359dfe20eb14 | 100 | bool DM1_amber [9] = {0, 0, 0, transmission_malfunction, 0, engine_malfunction , 0, 0}; |
arcannae | 0:359dfe20eb14 | 101 | bool DM1_red [9] = {0, 0, 0, transmission_malfunction, 0, engine_malfunction , 0, 0}; |
arcannae | 0:359dfe20eb14 | 102 | |
arcannae | 0:359dfe20eb14 | 103 | DATA[0] = DM1_amber[counter]*4 + DM1_red[counter]*16;; |
arcannae | 0:359dfe20eb14 | 104 | DATA[1] = 0xFF; |
arcannae | 0:359dfe20eb14 | 105 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 106 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 107 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 108 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 109 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 110 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 111 | } |
arcannae | 0:359dfe20eb14 | 112 | |
arcannae | 0:359dfe20eb14 | 113 | switch(counter) |
arcannae | 0:359dfe20eb14 | 114 | { |
arcannae | 0:359dfe20eb14 | 115 | |
arcannae | 0:359dfe20eb14 | 116 | // AIR1 - Air Supply Pressure |
arcannae | 0:359dfe20eb14 | 117 | case(9): |
arcannae | 0:359dfe20eb14 | 118 | |
arcannae | 0:359dfe20eb14 | 119 | int FrontRearCircuitPressure = map((Serial_data[brake_air_pressure_int]*10) + (Serial_data[decimal_brake_air_pressure]/10), 0, 1450, 0, 150); //1030 |
arcannae | 0:359dfe20eb14 | 120 | int ParkBrakePressure = (FrontRearCircuitPressure < 0) ? 0 : ((FrontRearCircuitPressure > 106) ? 106 : FrontRearCircuitPressure); |
arcannae | 0:359dfe20eb14 | 121 | |
arcannae | 0:359dfe20eb14 | 122 | DATA[0] = 0x02; |
arcannae | 0:359dfe20eb14 | 123 | DATA[1] = ParkBrakePressure; //106 = 8.5 bar park |
arcannae | 0:359dfe20eb14 | 124 | DATA[2] = FrontRearCircuitPressure; |
arcannae | 0:359dfe20eb14 | 125 | DATA[3] = FrontRearCircuitPressure; |
arcannae | 0:359dfe20eb14 | 126 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 127 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 128 | DATA[6] = 0xFD; |
arcannae | 0:359dfe20eb14 | 129 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 130 | break; |
arcannae | 0:359dfe20eb14 | 131 | |
arcannae | 0:359dfe20eb14 | 132 | // ASC1 - Air Suspension Control 1 |
arcannae | 0:359dfe20eb14 | 133 | case(10): |
arcannae | 0:359dfe20eb14 | 134 | |
arcannae | 0:359dfe20eb14 | 135 | bool truck_axle_lifted = (Serial_data[OCTET_3] < 0) ? 0 : ((Serial_data[OCTET_3] > 1) ? 1 : Serial_data[OCTET_3]); |
arcannae | 0:359dfe20eb14 | 136 | bool trailer_axle_lifted = (Serial_data[OCTET_4] < 0) ? 0 : ((Serial_data[OCTET_4] > 1) ? 1 : Serial_data[OCTET_4]); |
arcannae | 0:359dfe20eb14 | 137 | |
arcannae | 0:359dfe20eb14 | 138 | DATA[0] = 0xFF; |
arcannae | 0:359dfe20eb14 | 139 | DATA[1] = 0xFF; |
arcannae | 0:359dfe20eb14 | 140 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 141 | DATA[3] = (trailer_axle_lifted*2) * 16; |
arcannae | 0:359dfe20eb14 | 142 | DATA[4] = truck_axle_lifted * 64; |
arcannae | 0:359dfe20eb14 | 143 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 144 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 145 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 146 | break; |
arcannae | 0:359dfe20eb14 | 147 | |
arcannae | 0:359dfe20eb14 | 148 | // CC/VS - Cruise Control / Vehicle Speed |
arcannae | 0:359dfe20eb14 | 149 | case(11): |
arcannae | 0:359dfe20eb14 | 150 | DATA[0] = (OCTET0[park_brake]*4); |
arcannae | 0:359dfe20eb14 | 151 | DATA[1] = CruiseControl_VehicleSpeed[1]; |
arcannae | 0:359dfe20eb14 | 152 | DATA[2] = CruiseControl_VehicleSpeed[2]; |
arcannae | 0:359dfe20eb14 | 153 | DATA[3] = CruiseControl_VehicleSpeed[3]; |
arcannae | 0:359dfe20eb14 | 154 | DATA[4] = CruiseControl_VehicleSpeed[4]; |
arcannae | 0:359dfe20eb14 | 155 | DATA[5] = Serial_data[cruise_control]; |
arcannae | 0:359dfe20eb14 | 156 | DATA[6] = CruiseControl_VehicleSpeed[6]; |
arcannae | 0:359dfe20eb14 | 157 | DATA[7] = CruiseControl_VehicleSpeed[7]; |
arcannae | 0:359dfe20eb14 | 158 | break; |
arcannae | 0:359dfe20eb14 | 159 | |
arcannae | 0:359dfe20eb14 | 160 | // CUV - CUV Information |
arcannae | 0:359dfe20eb14 | 161 | case(12): |
arcannae | 0:359dfe20eb14 | 162 | |
arcannae | 0:359dfe20eb14 | 163 | DATA[0] = (OCTET0[left_blinker]*64) + (OCTET0[right_blinker]*16) + (OCTET0[low_beam]*4) + (OCTET0[high_beam] && OCTET0[low_beam]) ; |
arcannae | 0:359dfe20eb14 | 164 | DATA[1] = CUV_Information[1]; |
arcannae | 0:359dfe20eb14 | 165 | DATA[2] = (OCTET0[right_blinker]*64)+(OCTET0[left_blinker]*16); |
arcannae | 0:359dfe20eb14 | 166 | DATA[3] = ((OCTET2[trailer_connected] & OCTET0[right_blinker]) *4) + (OCTET0[left_blinker] & OCTET2[trailer_connected]); |
arcannae | 0:359dfe20eb14 | 167 | DATA[4] = CUV_Information[4]; |
arcannae | 0:359dfe20eb14 | 168 | DATA[5] = CUV_Information[5]; |
arcannae | 0:359dfe20eb14 | 169 | DATA[6] = CUV_Information[6]; |
arcannae | 0:359dfe20eb14 | 170 | DATA[7] = CUV_Information[7]; |
arcannae | 0:359dfe20eb14 | 171 | break; |
arcannae | 0:359dfe20eb14 | 172 | |
arcannae | 0:359dfe20eb14 | 173 | //DASH - Dash Display |
arcannae | 0:359dfe20eb14 | 174 | case(13): |
arcannae | 0:359dfe20eb14 | 175 | DATA[0] = 0xFF; |
arcannae | 0:359dfe20eb14 | 176 | DATA[1] = map((Serial_data[fuel_int]*10) + (Serial_data[decimal_fuel]/10), 0, 1000, 0, 250); |
arcannae | 0:359dfe20eb14 | 177 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 178 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 179 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 180 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 181 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 182 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 183 | break; |
arcannae | 0:359dfe20eb14 | 184 | |
arcannae | 0:359dfe20eb14 | 185 | //EEC1 - Electronic Engine Controler |
arcannae | 0:359dfe20eb14 | 186 | case(14): |
arcannae | 0:359dfe20eb14 | 187 | DATA[0] = 0x02; |
arcannae | 0:359dfe20eb14 | 188 | DATA[1] = 0x00; |
arcannae | 0:359dfe20eb14 | 189 | DATA[2] = 0x00; |
arcannae | 0:359dfe20eb14 | 190 | DATA[3] = map((((Serial_data[MSB_rpm] << 8) + Serial_data[LSB_rpm])*10) + (Serial_data[decimal_engine_rpm]/10), 0, 25000, 0, 20000) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 191 | DATA[4] = (map((((Serial_data[MSB_rpm] << 8) + Serial_data[LSB_rpm])*10) + (Serial_data[decimal_engine_rpm]/10), 0, 25000, 0, 20000) & 0xFF00)>> 8; |
arcannae | 0:359dfe20eb14 | 192 | DATA[5] = 0x11; |
arcannae | 0:359dfe20eb14 | 193 | DATA[6] = 0x00; |
arcannae | 0:359dfe20eb14 | 194 | DATA[7] = 0x00; |
arcannae | 0:359dfe20eb14 | 195 | break; |
arcannae | 0:359dfe20eb14 | 196 | |
arcannae | 0:359dfe20eb14 | 197 | //ENGfLVL - Engine Fluid Level Pressure 1 |
arcannae | 0:359dfe20eb14 | 198 | case(15): |
arcannae | 0:359dfe20eb14 | 199 | DATA[0] = 0x09; |
arcannae | 0:359dfe20eb14 | 200 | DATA[1] = 0xFF; |
arcannae | 0:359dfe20eb14 | 201 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 202 | DATA[3] = map((Serial_data[oil_pressure_int]*10) + (Serial_data[decimal_oil_pressure]/10), 0, 810, 0, 175); |
arcannae | 0:359dfe20eb14 | 203 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 204 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 205 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 206 | DATA[7] = 0x00; |
arcannae | 0:359dfe20eb14 | 207 | break; |
arcannae | 0:359dfe20eb14 | 208 | |
arcannae | 0:359dfe20eb14 | 209 | |
arcannae | 0:359dfe20eb14 | 210 | //TCO1 |
arcannae | 0:359dfe20eb14 | 211 | case(16): |
arcannae | 0:359dfe20eb14 | 212 | |
arcannae | 0:359dfe20eb14 | 213 | float speed_kmh = 127.0f; |
arcannae | 0:359dfe20eb14 | 214 | //float speed_kmh = mapf((float(Serial_data[speed_ms]) + (float(Serial_data[speed_ms_decimal]) / 100.0f)) * 3.6f, 0.0f, 125.0f, 1.0f,265.0f); //127 = 60kmh |
arcannae | 0:359dfe20eb14 | 215 | truck_speed = mapf (((Serial_data[speed_ms]*100) + Serial_data[speed_ms_decimal]) *3.6f, 0, 25000, 0, 65023); |
arcannae | 0:359dfe20eb14 | 216 | Period = 1.0f / speed_kmh; |
arcannae | 0:359dfe20eb14 | 217 | speed_pulse.period (Period); |
arcannae | 0:359dfe20eb14 | 218 | /* |
arcannae | 0:359dfe20eb14 | 219 | if (Serial_data[speed_ms] == 0 && Serial_data[speed_ms_decimal] == 0) |
arcannae | 0:359dfe20eb14 | 220 | { |
arcannae | 0:359dfe20eb14 | 221 | speed_pulse.write (1.0f); |
arcannae | 0:359dfe20eb14 | 222 | }else{ |
arcannae | 0:359dfe20eb14 | 223 | speed_pulse.write (0.5f); |
arcannae | 0:359dfe20eb14 | 224 | } |
arcannae | 0:359dfe20eb14 | 225 | |
arcannae | 0:359dfe20eb14 | 226 | */ |
arcannae | 0:359dfe20eb14 | 227 | |
arcannae | 0:359dfe20eb14 | 228 | DATA[0] = Tachograph[0]; |
arcannae | 0:359dfe20eb14 | 229 | DATA[1] = Tachograph[1]; |
arcannae | 0:359dfe20eb14 | 230 | DATA[2] = Tachograph[2]; |
arcannae | 0:359dfe20eb14 | 231 | DATA[3] = 0x00; |
arcannae | 0:359dfe20eb14 | 232 | DATA[4] = Tachograph[4]; |
arcannae | 0:359dfe20eb14 | 233 | DATA[5] = Tachograph[5]; |
arcannae | 0:359dfe20eb14 | 234 | DATA[6] = truck_speed & 0x00FF; |
arcannae | 0:359dfe20eb14 | 235 | DATA[7] = (truck_speed >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 236 | break; |
arcannae | 0:359dfe20eb14 | 237 | |
arcannae | 0:359dfe20eb14 | 238 | //HiResVDist - Hi Resolution Vehicle Distance |
arcannae | 0:359dfe20eb14 | 239 | case(17): |
arcannae | 0:359dfe20eb14 | 240 | |
arcannae | 0:359dfe20eb14 | 241 | int odometer = (((((Serial_data[odometer_split_4]) << 24) + ((Serial_data[odometer_split_3]) << 16) + ((Serial_data[odometer_split_2]) << 8) + (Serial_data[odometer_split_1])) *10) + Serial_data[decimal_odometer]) *20; |
arcannae | 0:359dfe20eb14 | 242 | |
arcannae | 0:359dfe20eb14 | 243 | DATA[0] = (odometer & 0x000000FF); |
arcannae | 0:359dfe20eb14 | 244 | DATA[1] = (odometer & 0x0000FF00) >> 8; |
arcannae | 0:359dfe20eb14 | 245 | DATA[2] = (odometer & 0x00FF0000) >> 16; |
arcannae | 0:359dfe20eb14 | 246 | DATA[3] = (odometer & 0xFF000000) >> 24; |
arcannae | 0:359dfe20eb14 | 247 | DATA[4] = HiVeDi[4]; |
arcannae | 0:359dfe20eb14 | 248 | DATA[5] = HiVeDi[5]; |
arcannae | 0:359dfe20eb14 | 249 | DATA[6] = HiVeDi[6]; |
arcannae | 0:359dfe20eb14 | 250 | DATA[7] = HiVeDi[7]; |
arcannae | 0:359dfe20eb14 | 251 | break; |
arcannae | 0:359dfe20eb14 | 252 | |
arcannae | 0:359dfe20eb14 | 253 | //EBC1 |
arcannae | 0:359dfe20eb14 | 254 | case(18): |
arcannae | 0:359dfe20eb14 | 255 | DATA[0] = 0x00; |
arcannae | 0:359dfe20eb14 | 256 | DATA[1] = 0x00; |
arcannae | 0:359dfe20eb14 | 257 | DATA[2] = 0xF3; |
arcannae | 0:359dfe20eb14 | 258 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 259 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 260 | DATA[5] = 0x01; |
arcannae | 0:359dfe20eb14 | 261 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 262 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 263 | break; |
arcannae | 0:359dfe20eb14 | 264 | |
arcannae | 0:359dfe20eb14 | 265 | //ETC1 |
arcannae | 0:359dfe20eb14 | 266 | case(19): |
arcannae | 0:359dfe20eb14 | 267 | DATA[0] = 0xCC; |
arcannae | 0:359dfe20eb14 | 268 | DATA[1] = 0x00; |
arcannae | 0:359dfe20eb14 | 269 | DATA[2] = 0x00; |
arcannae | 0:359dfe20eb14 | 270 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 271 | DATA[4] = 0xFC; |
arcannae | 0:359dfe20eb14 | 272 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 273 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 274 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 275 | break; |
arcannae | 0:359dfe20eb14 | 276 | |
arcannae | 0:359dfe20eb14 | 277 | //ETC2 |
arcannae | 0:359dfe20eb14 | 278 | case(20): |
arcannae | 0:359dfe20eb14 | 279 | // N C1 C2 1 2 3 4 5 6 7 8 9 10 11 12 R1 R2 |
arcannae | 0:359dfe20eb14 | 280 | int gear_14[17] = {0x204E, 0x4331, 0x4332, 0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x3130, 0x3131, 0x3132, 0x5231, 0x5232}; |
arcannae | 0:359dfe20eb14 | 281 | |
arcannae | 0:359dfe20eb14 | 282 | // N 1 2 3 4 5 6 7 8 9 10 11 12 R1 R2 |
arcannae | 0:359dfe20eb14 | 283 | int gear_12[15] = {0x204E, 0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037, 0x2038, 0x2039, 0x3130, 0x3131, 0x3132, 0x5231, 0x5232}; |
arcannae | 0:359dfe20eb14 | 284 | |
arcannae | 0:359dfe20eb14 | 285 | DATA[0] = Serial_data[displayed_gear] + 0x7D; |
arcannae | 0:359dfe20eb14 | 286 | DATA[1] = 0x00; |
arcannae | 0:359dfe20eb14 | 287 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 288 | DATA[3] = Serial_data[engine_gear] + 0x7D; |
arcannae | 0:359dfe20eb14 | 289 | |
arcannae | 0:359dfe20eb14 | 290 | if(Serial_data[forward_gear_count] == 12) |
arcannae | 0:359dfe20eb14 | 291 | { |
arcannae | 0:359dfe20eb14 | 292 | DATA[4] = (gear_12[Serial_data[displayed_gear]] >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 293 | DATA[5] = (gear_12[Serial_data[displayed_gear]]) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 294 | DATA[6] = (gear_12[Serial_data[engine_gear]] >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 295 | DATA[7] = (gear_12[Serial_data[engine_gear]]) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 296 | } |
arcannae | 0:359dfe20eb14 | 297 | |
arcannae | 0:359dfe20eb14 | 298 | if(Serial_data[forward_gear_count] == 14) |
arcannae | 0:359dfe20eb14 | 299 | { |
arcannae | 0:359dfe20eb14 | 300 | DATA[4] = (gear_14[Serial_data[displayed_gear]] >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 301 | DATA[5] = (gear_14[Serial_data[displayed_gear]]) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 302 | DATA[6] = (gear_14[Serial_data[engine_gear]] >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 303 | DATA[7] = (gear_14[Serial_data[engine_gear]]) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 304 | } |
arcannae | 0:359dfe20eb14 | 305 | |
arcannae | 0:359dfe20eb14 | 306 | break; |
arcannae | 0:359dfe20eb14 | 307 | |
arcannae | 0:359dfe20eb14 | 308 | //TP2 |
arcannae | 0:359dfe20eb14 | 309 | case(21): |
arcannae | 0:359dfe20eb14 | 310 | // R RL RC RH R0 RP RM RE N NL NC NH NO NP NM NE A AL AC AH AO AP AM AE M ML MC MH MO MP MM ME blank Blank |
arcannae | 0:359dfe20eb14 | 311 | // int GbMode[34] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21}; |
arcannae | 0:359dfe20eb14 | 312 | |
arcannae | 0:359dfe20eb14 | 313 | int GbMode; |
arcannae | 0:359dfe20eb14 | 314 | |
arcannae | 0:359dfe20eb14 | 315 | if (Serial_data[displayed_gear] == 0) |
arcannae | 0:359dfe20eb14 | 316 | { |
arcannae | 0:359dfe20eb14 | 317 | GbMode = 0x08; |
arcannae | 0:359dfe20eb14 | 318 | } |
arcannae | 0:359dfe20eb14 | 319 | |
arcannae | 0:359dfe20eb14 | 320 | |
arcannae | 0:359dfe20eb14 | 321 | if (Serial_data[displayed_gear] > 0 && Serial_data[displayed_gear] < 15) |
arcannae | 0:359dfe20eb14 | 322 | { |
arcannae | 0:359dfe20eb14 | 323 | if(OpticruiseLever == 0x12) |
arcannae | 0:359dfe20eb14 | 324 | { |
arcannae | 0:359dfe20eb14 | 325 | GbMode = 0x10; |
arcannae | 0:359dfe20eb14 | 326 | } |
arcannae | 0:359dfe20eb14 | 327 | if(OpticruiseLever == 0x1A){ |
arcannae | 0:359dfe20eb14 | 328 | GbMode = 0x18; |
arcannae | 0:359dfe20eb14 | 329 | } |
arcannae | 0:359dfe20eb14 | 330 | } |
arcannae | 0:359dfe20eb14 | 331 | |
arcannae | 0:359dfe20eb14 | 332 | |
arcannae | 0:359dfe20eb14 | 333 | if ((Serial_data[displayed_gear] > 12 && Serial_data[forward_gear_count] == 12) || (Serial_data[displayed_gear] > 14 && Serial_data[forward_gear_count] == 14)) |
arcannae | 0:359dfe20eb14 | 334 | { |
arcannae | 0:359dfe20eb14 | 335 | GbMode = 0x00; |
arcannae | 0:359dfe20eb14 | 336 | } |
arcannae | 0:359dfe20eb14 | 337 | /* |
arcannae | 0:359dfe20eb14 | 338 | |
arcannae | 0:359dfe20eb14 | 339 | if (Serial_data[displayed_gear] > 14 && Serial_data[forward_gear_count] == 14) |
arcannae | 0:359dfe20eb14 | 340 | { |
arcannae | 0:359dfe20eb14 | 341 | GbMode = 0x00; |
arcannae | 0:359dfe20eb14 | 342 | } |
arcannae | 0:359dfe20eb14 | 343 | |
arcannae | 0:359dfe20eb14 | 344 | |
arcannae | 0:359dfe20eb14 | 345 | }else{ |
arcannae | 0:359dfe20eb14 | 346 | GbMode = 0x20; |
arcannae | 0:359dfe20eb14 | 347 | } |
arcannae | 0:359dfe20eb14 | 348 | */ |
arcannae | 0:359dfe20eb14 | 349 | DATA[0] = 0xD0; |
arcannae | 0:359dfe20eb14 | 350 | DATA[1] = 0xFF; |
arcannae | 0:359dfe20eb14 | 351 | DATA[2] = 0x1F; |
arcannae | 0:359dfe20eb14 | 352 | DATA[3] = 0xFE; |
arcannae | 0:359dfe20eb14 | 353 | DATA[4] = GbMode; |
arcannae | 0:359dfe20eb14 | 354 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 355 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 356 | DATA[7] = 0xFE; |
arcannae | 0:359dfe20eb14 | 357 | break; |
arcannae | 0:359dfe20eb14 | 358 | |
arcannae | 0:359dfe20eb14 | 359 | //EngTemp |
arcannae | 0:359dfe20eb14 | 360 | case(22): |
arcannae | 0:359dfe20eb14 | 361 | DATA[0] = map((Serial_data[water_temperature_int]*10) + (Serial_data[decimal_water_temperature]/10), -400, 2100, 0, 250); |
arcannae | 0:359dfe20eb14 | 362 | DATA[1] = 0x00; |
arcannae | 0:359dfe20eb14 | 363 | DATA[2] = 0x00; |
arcannae | 0:359dfe20eb14 | 364 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 365 | DATA[4] = 0xFC; |
arcannae | 0:359dfe20eb14 | 366 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 367 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 368 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 369 | break; |
arcannae | 0:359dfe20eb14 | 370 | |
arcannae | 0:359dfe20eb14 | 371 | //IEC |
arcannae | 0:359dfe20eb14 | 372 | case(23): |
arcannae | 0:359dfe20eb14 | 373 | DATA[0] = 0xFF; |
arcannae | 0:359dfe20eb14 | 374 | DATA[1] = map(Serial_data[effective_throttle], 0, 100, 0, 75); |
arcannae | 0:359dfe20eb14 | 375 | DATA[2] = 0x3F; |
arcannae | 0:359dfe20eb14 | 376 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 377 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 378 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 379 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 380 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 381 | break; |
arcannae | 0:359dfe20eb14 | 382 | |
arcannae | 0:359dfe20eb14 | 383 | //FuelEco |
arcannae | 0:359dfe20eb14 | 384 | case(24): |
arcannae | 0:359dfe20eb14 | 385 | |
arcannae | 0:359dfe20eb14 | 386 | int FuelRate = map(Serial_data[effective_throttle], 0, 100, 0, 1920); |
arcannae | 0:359dfe20eb14 | 387 | int InstFuelEco = map(Serial_data[effective_throttle], 0, 100, 64254, 425); |
arcannae | 0:359dfe20eb14 | 388 | int derivation = map(Serial_data[effective_throttle], 0, 100, 55000, 0); |
arcannae | 0:359dfe20eb14 | 389 | |
arcannae | 0:359dfe20eb14 | 390 | if(Serial_data[effective_throttle] > 5){ |
arcannae | 0:359dfe20eb14 | 391 | InstFuelEco = InstFuelEco - derivation; |
arcannae | 0:359dfe20eb14 | 392 | } |
arcannae | 0:359dfe20eb14 | 393 | |
arcannae | 0:359dfe20eb14 | 394 | if(OCTET2[engine_enabled] == 1){ |
arcannae | 0:359dfe20eb14 | 395 | FuelRate = FuelRate + 40; |
arcannae | 0:359dfe20eb14 | 396 | } |
arcannae | 0:359dfe20eb14 | 397 | |
arcannae | 0:359dfe20eb14 | 398 | |
arcannae | 0:359dfe20eb14 | 399 | DATA[0] = FuelRate & 0x00FF; |
arcannae | 0:359dfe20eb14 | 400 | DATA[1] = (FuelRate >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 401 | DATA[2] = InstFuelEco & 0x00FF; |
arcannae | 0:359dfe20eb14 | 402 | DATA[3] = (InstFuelEco >> 8) & 0x00FF; |
arcannae | 0:359dfe20eb14 | 403 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 404 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 405 | DATA[6] = map(Serial_data[effective_throttle], 0, 100, 0, 250); |
arcannae | 0:359dfe20eb14 | 406 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 407 | break; |
arcannae | 0:359dfe20eb14 | 408 | |
arcannae | 0:359dfe20eb14 | 409 | |
arcannae | 0:359dfe20eb14 | 410 | //DLN7 |
arcannae | 0:359dfe20eb14 | 411 | case(25): |
arcannae | 0:359dfe20eb14 | 412 | |
arcannae | 0:359dfe20eb14 | 413 | int EmptyAdBlue; |
arcannae | 0:359dfe20eb14 | 414 | if(Serial_data[adblue] == 0){ |
arcannae | 0:359dfe20eb14 | 415 | EmptyAdBlue = 0x02; |
arcannae | 0:359dfe20eb14 | 416 | }else{ |
arcannae | 0:359dfe20eb14 | 417 | EmptyAdBlue = 0x00; |
arcannae | 0:359dfe20eb14 | 418 | } |
arcannae | 0:359dfe20eb14 | 419 | |
arcannae | 0:359dfe20eb14 | 420 | |
arcannae | 0:359dfe20eb14 | 421 | DATA[0] = map(Serial_data[adblue], 0, 100, 0, 250); |
arcannae | 0:359dfe20eb14 | 422 | DATA[1] = EmptyAdBlue; |
arcannae | 0:359dfe20eb14 | 423 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 424 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 425 | DATA[4] = map((Serial_data[fuel_int]*10) + (Serial_data[decimal_fuel]/10), 0, 1000, 0, 250); |
arcannae | 0:359dfe20eb14 | 426 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 427 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 428 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 429 | break; |
arcannae | 0:359dfe20eb14 | 430 | |
arcannae | 0:359dfe20eb14 | 431 | |
arcannae | 0:359dfe20eb14 | 432 | //Wheight |
arcannae | 0:359dfe20eb14 | 433 | case(26): |
arcannae | 0:359dfe20eb14 | 434 | DATA[0] = rand() % 255; |
arcannae | 0:359dfe20eb14 | 435 | DATA[1] = 0xF8; |
arcannae | 0:359dfe20eb14 | 436 | DATA[2] = 0x11; |
arcannae | 0:359dfe20eb14 | 437 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 438 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 439 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 440 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 441 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 442 | break; |
arcannae | 0:359dfe20eb14 | 443 | |
arcannae | 0:359dfe20eb14 | 444 | //ERC1 |
arcannae | 0:359dfe20eb14 | 445 | case(27): |
arcannae | 0:359dfe20eb14 | 446 | DATA[0] = 0xC0; |
arcannae | 0:359dfe20eb14 | 447 | DATA[1] = 0x7D - ((Serial_data[retarder_steps] < 0) ? 0 : ((Serial_data[retarder_steps] > 1) ? 1 : Serial_data[retarder_steps])); |
arcannae | 0:359dfe20eb14 | 448 | DATA[2] = 0x7D - ((Serial_data[retarder_steps] < 0) ? 0 : ((Serial_data[retarder_steps] > 1) ? 1 : Serial_data[retarder_steps])); |
arcannae | 0:359dfe20eb14 | 449 | DATA[3] = 0xF3; |
arcannae | 0:359dfe20eb14 | 450 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 451 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 452 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 453 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 454 | break; |
arcannae | 0:359dfe20eb14 | 455 | |
arcannae | 0:359dfe20eb14 | 456 | //Cruise |
arcannae | 0:359dfe20eb14 | 457 | case(28): |
arcannae | 0:359dfe20eb14 | 458 | |
arcannae | 0:359dfe20eb14 | 459 | bool CC_active; |
arcannae | 0:359dfe20eb14 | 460 | |
arcannae | 0:359dfe20eb14 | 461 | if(Serial_data[cruise_control] > 0) |
arcannae | 0:359dfe20eb14 | 462 | { |
arcannae | 0:359dfe20eb14 | 463 | CC_active = 1; |
arcannae | 0:359dfe20eb14 | 464 | speed_mem = Serial_data[cruise_control]; |
arcannae | 0:359dfe20eb14 | 465 | }else{ |
arcannae | 0:359dfe20eb14 | 466 | CC_active = 0; |
arcannae | 0:359dfe20eb14 | 467 | } |
arcannae | 0:359dfe20eb14 | 468 | |
arcannae | 0:359dfe20eb14 | 469 | if(OCTET2[engine_enabled] == 0) |
arcannae | 0:359dfe20eb14 | 470 | { |
arcannae | 0:359dfe20eb14 | 471 | speed_mem = 0; |
arcannae | 0:359dfe20eb14 | 472 | } |
arcannae | 0:359dfe20eb14 | 473 | |
arcannae | 0:359dfe20eb14 | 474 | DATA[0] = 0x00; |
arcannae | 0:359dfe20eb14 | 475 | DATA[1] = speed_mem; |
arcannae | 0:359dfe20eb14 | 476 | DATA[2] = 0xFF; |
arcannae | 0:359dfe20eb14 | 477 | DATA[3] = 0xFF; |
arcannae | 0:359dfe20eb14 | 478 | DATA[4] = CC_active *2; |
arcannae | 0:359dfe20eb14 | 479 | DATA[5] = CC_active; |
arcannae | 0:359dfe20eb14 | 480 | DATA[6] = 0xFF; |
arcannae | 0:359dfe20eb14 | 481 | DATA[7] = 0xFF; |
arcannae | 0:359dfe20eb14 | 482 | break; |
arcannae | 0:359dfe20eb14 | 483 | |
arcannae | 0:359dfe20eb14 | 484 | //DLN2 |
arcannae | 0:359dfe20eb14 | 485 | |
arcannae | 0:359dfe20eb14 | 486 | case(29): |
arcannae | 0:359dfe20eb14 | 487 | |
arcannae | 0:359dfe20eb14 | 488 | bool adblue_low; |
arcannae | 0:359dfe20eb14 | 489 | |
arcannae | 0:359dfe20eb14 | 490 | if(Serial_data[adblue] < 11) |
arcannae | 0:359dfe20eb14 | 491 | { |
arcannae | 0:359dfe20eb14 | 492 | adblue_low = 1; |
arcannae | 0:359dfe20eb14 | 493 | }else{ |
arcannae | 0:359dfe20eb14 | 494 | adblue_low = 0; |
arcannae | 0:359dfe20eb14 | 495 | } |
arcannae | 0:359dfe20eb14 | 496 | |
arcannae | 0:359dfe20eb14 | 497 | DATA[0] = 0xA1; |
arcannae | 0:359dfe20eb14 | 498 | DATA[1] = 0xFF; |
arcannae | 0:359dfe20eb14 | 499 | DATA[2] = ((OCTET1[oil_pressure_warning] && OCTET2[engine_enabled]) * 16); |
arcannae | 0:359dfe20eb14 | 500 | DATA[3] = OCTET1[water_temperature_warning] + (adblue_low*16); |
arcannae | 0:359dfe20eb14 | 501 | DATA[4] = 0xFF; |
arcannae | 0:359dfe20eb14 | 502 | DATA[5] = 0xFF; |
arcannae | 0:359dfe20eb14 | 503 | DATA[6] = 0x00; // champ economie |
arcannae | 0:359dfe20eb14 | 504 | DATA[7] = 0x00; // champ economie |
arcannae | 0:359dfe20eb14 | 505 | break; |
arcannae | 0:359dfe20eb14 | 506 | |
arcannae | 0:359dfe20eb14 | 507 | |
arcannae | 0:359dfe20eb14 | 508 | //EAC1 - K |
arcannae | 0:359dfe20eb14 | 509 | |
arcannae | 0:359dfe20eb14 | 510 | case(30): |
arcannae | 0:359dfe20eb14 | 511 | DATA[0] = 0; |
arcannae | 0:359dfe20eb14 | 512 | DATA[1] = 0; |
arcannae | 0:359dfe20eb14 | 513 | DATA[2] = 0; |
arcannae | 0:359dfe20eb14 | 514 | DATA[3] = 0; |
arcannae | 0:359dfe20eb14 | 515 | DATA[4] = 0; |
arcannae | 0:359dfe20eb14 | 516 | DATA[5] = 0; |
arcannae | 0:359dfe20eb14 | 517 | DATA[6] = 0; |
arcannae | 0:359dfe20eb14 | 518 | DATA[7] = 0; |
arcannae | 0:359dfe20eb14 | 519 | break; |
arcannae | 0:359dfe20eb14 | 520 | |
arcannae | 0:359dfe20eb14 | 521 | |
arcannae | 0:359dfe20eb14 | 522 | //EBS5 |
arcannae | 0:359dfe20eb14 | 523 | |
arcannae | 0:359dfe20eb14 | 524 | case(31): |
arcannae | 0:359dfe20eb14 | 525 | DATA[0] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 526 | DATA[1] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 527 | DATA[2] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 528 | DATA[3] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 529 | DATA[4] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 530 | DATA[5] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 531 | DATA[6] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 532 | DATA[7] = map(Serial_data[wear_wheels], 100, 0, 0, 250); |
arcannae | 0:359dfe20eb14 | 533 | break; |
arcannae | 0:359dfe20eb14 | 534 | |
arcannae | 0:359dfe20eb14 | 535 | |
arcannae | 0:359dfe20eb14 | 536 | case(32): |
arcannae | 0:359dfe20eb14 | 537 | |
arcannae | 0:359dfe20eb14 | 538 | |
arcannae | 0:359dfe20eb14 | 539 | DATA[0] = DATE[0]; |
arcannae | 0:359dfe20eb14 | 540 | DATA[1] = DATE[1]; |
arcannae | 0:359dfe20eb14 | 541 | DATA[2] = DATE[2]; |
arcannae | 0:359dfe20eb14 | 542 | DATA[3] = DATE[3]; |
arcannae | 0:359dfe20eb14 | 543 | DATA[4] = DATE[4]; |
arcannae | 0:359dfe20eb14 | 544 | DATA[5] = DATE[5]; |
arcannae | 0:359dfe20eb14 | 545 | DATA[6] = DATE[6]; |
arcannae | 0:359dfe20eb14 | 546 | DATA[7] = DATE[7]; |
arcannae | 0:359dfe20eb14 | 547 | break; |
arcannae | 0:359dfe20eb14 | 548 | |
arcannae | 0:359dfe20eb14 | 549 | } |
arcannae | 0:359dfe20eb14 | 550 | } |
arcannae | 0:359dfe20eb14 | 551 | //------------ envoi des données ------------------- |
arcannae | 0:359dfe20eb14 | 552 | |
arcannae | 0:359dfe20eb14 | 553 | void send() |
arcannae | 0:359dfe20eb14 | 554 | { |
arcannae | 0:359dfe20eb14 | 555 | data_roll(); |
arcannae | 0:359dfe20eb14 | 556 | |
arcannae | 0:359dfe20eb14 | 557 | if(can1.write(CANMessage(PGN[counter], DATA, 8, CANData, CANExtended))); |
arcannae | 0:359dfe20eb14 | 558 | { |
arcannae | 0:359dfe20eb14 | 559 | counter++; |
arcannae | 0:359dfe20eb14 | 560 | |
arcannae | 0:359dfe20eb14 | 561 | if (counter > 32) |
arcannae | 0:359dfe20eb14 | 562 | { |
arcannae | 0:359dfe20eb14 | 563 | counter = 0; |
arcannae | 0:359dfe20eb14 | 564 | } |
arcannae | 0:359dfe20eb14 | 565 | } |
arcannae | 0:359dfe20eb14 | 566 | } |
arcannae | 0:359dfe20eb14 | 567 | |
arcannae | 0:359dfe20eb14 | 568 | |
arcannae | 0:359dfe20eb14 | 569 | void CAN0receive() |
arcannae | 0:359dfe20eb14 | 570 | { |
arcannae | 0:359dfe20eb14 | 571 | if(can1.read(BUFRx)) |
arcannae | 0:359dfe20eb14 | 572 | { |
arcannae | 0:359dfe20eb14 | 573 | int RX_PGN_0 = BUFRx.id; |
arcannae | 0:359dfe20eb14 | 574 | |
arcannae | 0:359dfe20eb14 | 575 | char SPN[8]; |
arcannae | 0:359dfe20eb14 | 576 | |
arcannae | 0:359dfe20eb14 | 577 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 578 | { |
arcannae | 0:359dfe20eb14 | 579 | SPN[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 580 | } |
arcannae | 0:359dfe20eb14 | 581 | |
arcannae | 0:359dfe20eb14 | 582 | |
arcannae | 0:359dfe20eb14 | 583 | int filter = RX_PGN_0 & 0x00FFFFFF; |
arcannae | 0:359dfe20eb14 | 584 | |
arcannae | 0:359dfe20eb14 | 585 | if(filter == 0x00FEE617) |
arcannae | 0:359dfe20eb14 | 586 | { |
arcannae | 0:359dfe20eb14 | 587 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 588 | { |
arcannae | 0:359dfe20eb14 | 589 | DATE[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 590 | } |
arcannae | 0:359dfe20eb14 | 591 | |
arcannae | 0:359dfe20eb14 | 592 | //printf("Message recu de : %x \n", BUFRx.id); |
arcannae | 0:359dfe20eb14 | 593 | //printf("%x, %x, %x, %x, %x, %x, %x, %x \n", DATE[0],DATE[1],DATE[2],DATE[3],DATE[4],DATE[5],DATE[6],DATE[7]); |
arcannae | 0:359dfe20eb14 | 594 | //printf("----------------------------------- \n"); |
arcannae | 0:359dfe20eb14 | 595 | } |
arcannae | 0:359dfe20eb14 | 596 | } |
arcannae | 0:359dfe20eb14 | 597 | } |
arcannae | 0:359dfe20eb14 | 598 | |
arcannae | 0:359dfe20eb14 | 599 | void CAN1receive() |
arcannae | 0:359dfe20eb14 | 600 | { |
arcannae | 0:359dfe20eb14 | 601 | if(can2.read(BUFRx)) |
arcannae | 0:359dfe20eb14 | 602 | { |
arcannae | 0:359dfe20eb14 | 603 | int RX_PGN = BUFRx.id; |
arcannae | 0:359dfe20eb14 | 604 | char SPN[8]; |
arcannae | 0:359dfe20eb14 | 605 | |
arcannae | 0:359dfe20eb14 | 606 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 607 | { |
arcannae | 0:359dfe20eb14 | 608 | SPN[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 609 | } |
arcannae | 0:359dfe20eb14 | 610 | |
arcannae | 0:359dfe20eb14 | 611 | |
arcannae | 0:359dfe20eb14 | 612 | |
arcannae | 0:359dfe20eb14 | 613 | if(RX_PGN == 0x18FFB11E) |
arcannae | 0:359dfe20eb14 | 614 | { |
arcannae | 0:359dfe20eb14 | 615 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 616 | { |
arcannae | 0:359dfe20eb14 | 617 | CUV_Information[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 618 | } |
arcannae | 0:359dfe20eb14 | 619 | } |
arcannae | 0:359dfe20eb14 | 620 | |
arcannae | 0:359dfe20eb14 | 621 | if(RX_PGN == 0x18FFA103) //infos du levier opticruise (boite de vitesse) RED CAN |
arcannae | 0:359dfe20eb14 | 622 | { |
arcannae | 0:359dfe20eb14 | 623 | OpticruiseLever = SPN[4]; |
arcannae | 0:359dfe20eb14 | 624 | } |
arcannae | 0:359dfe20eb14 | 625 | |
arcannae | 0:359dfe20eb14 | 626 | if(RX_PGN == 0x0C001027) //infos du retarder RED CAN |
arcannae | 0:359dfe20eb14 | 627 | { |
arcannae | 0:359dfe20eb14 | 628 | Retarder = SPN[3]; |
arcannae | 0:359dfe20eb14 | 629 | |
arcannae | 0:359dfe20eb14 | 630 | } |
arcannae | 0:359dfe20eb14 | 631 | |
arcannae | 0:359dfe20eb14 | 632 | if(RX_PGN == 0x18FEF127) //CC/VS RED CAN |
arcannae | 0:359dfe20eb14 | 633 | { |
arcannae | 0:359dfe20eb14 | 634 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 635 | { |
arcannae | 0:359dfe20eb14 | 636 | CruiseControl_VehicleSpeed[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 637 | } |
arcannae | 0:359dfe20eb14 | 638 | CCVS_information = SPN[4] & 0x54; // mask: 0b01010100 bouton du cruise control |
arcannae | 0:359dfe20eb14 | 639 | CCVS_information = CCVS_information + ((SPN[3] & 0x04) >> 2); // bouton du cruise control |
arcannae | 0:359dfe20eb14 | 640 | CCVS_information = CCVS_information + ((SPN[0] & 0x04) << 5); // information du frein de park |
arcannae | 0:359dfe20eb14 | 641 | } |
arcannae | 0:359dfe20eb14 | 642 | |
arcannae | 0:359dfe20eb14 | 643 | if(RX_PGN == 0x0CFE6CEE) //infos du TCO |
arcannae | 0:359dfe20eb14 | 644 | { |
arcannae | 0:359dfe20eb14 | 645 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 646 | { |
arcannae | 0:359dfe20eb14 | 647 | Tachograph[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 648 | } |
arcannae | 0:359dfe20eb14 | 649 | } |
arcannae | 0:359dfe20eb14 | 650 | |
arcannae | 0:359dfe20eb14 | 651 | if(RX_PGN == 0x18FFA027) //accelerateur, rapport haut/bas manuel, retarder auto, selecteur de vitesse (toutes commandes levier opticruise) |
arcannae | 0:359dfe20eb14 | 652 | { |
arcannae | 0:359dfe20eb14 | 653 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 654 | { |
arcannae | 0:359dfe20eb14 | 655 | DLN5[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 656 | } |
arcannae | 0:359dfe20eb14 | 657 | } |
arcannae | 0:359dfe20eb14 | 658 | |
arcannae | 0:359dfe20eb14 | 659 | if(RX_PGN == 0x18FEC1EE) // HiVehicle distance |
arcannae | 0:359dfe20eb14 | 660 | { |
arcannae | 0:359dfe20eb14 | 661 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 662 | { |
arcannae | 0:359dfe20eb14 | 663 | HiVeDi[i] = char(BUFRx.data[i]); |
arcannae | 0:359dfe20eb14 | 664 | } |
arcannae | 0:359dfe20eb14 | 665 | } |
arcannae | 0:359dfe20eb14 | 666 | } |
arcannae | 0:359dfe20eb14 | 667 | } |
arcannae | 0:359dfe20eb14 | 668 | //-------------------------------------------------------------------------------------------------------Initialisation LOOP --------------------------------------------------------------------------------------------------- |
arcannae | 0:359dfe20eb14 | 669 | |
arcannae | 0:359dfe20eb14 | 670 | int main() |
arcannae | 0:359dfe20eb14 | 671 | { |
arcannae | 0:359dfe20eb14 | 672 | |
arcannae | 0:359dfe20eb14 | 673 | |
arcannae | 0:359dfe20eb14 | 674 | COM.baud (115200); |
arcannae | 0:359dfe20eb14 | 675 | COM_AR.baud (115200); |
arcannae | 0:359dfe20eb14 | 676 | can1.frequency (250000); |
arcannae | 0:359dfe20eb14 | 677 | can2.frequency (250000); |
arcannae | 0:359dfe20eb14 | 678 | CANTransmit.attach (&send, 0.001); |
arcannae | 0:359dfe20eb14 | 679 | CAN0Receive.attach (&CAN0receive, 0.05); |
arcannae | 0:359dfe20eb14 | 680 | CAN1Receive.attach (&CAN1receive, 0.0004); |
arcannae | 0:359dfe20eb14 | 681 | speed_pulse.write (0.5f); |
arcannae | 0:359dfe20eb14 | 682 | input.mode(PullUp); |
arcannae | 0:359dfe20eb14 | 683 | |
arcannae | 0:359dfe20eb14 | 684 | led1 = 1; |
arcannae | 0:359dfe20eb14 | 685 | wait(1.0); |
arcannae | 0:359dfe20eb14 | 686 | led1 = 0; |
arcannae | 0:359dfe20eb14 | 687 | |
arcannae | 0:359dfe20eb14 | 688 | while(1){ |
arcannae | 0:359dfe20eb14 | 689 | |
arcannae | 0:359dfe20eb14 | 690 | if(COM.readable()) { |
arcannae | 0:359dfe20eb14 | 691 | |
arcannae | 0:359dfe20eb14 | 692 | serial_byte = COM.getc(); |
arcannae | 0:359dfe20eb14 | 693 | |
arcannae | 0:359dfe20eb14 | 694 | if(serial_byte != 0xFF) { |
arcannae | 0:359dfe20eb14 | 695 | return; |
arcannae | 0:359dfe20eb14 | 696 | } |
arcannae | 0:359dfe20eb14 | 697 | |
arcannae | 0:359dfe20eb14 | 698 | __disable_irq(); |
arcannae | 0:359dfe20eb14 | 699 | |
arcannae | 0:359dfe20eb14 | 700 | serial_byte = COM.getc(); |
arcannae | 0:359dfe20eb14 | 701 | |
arcannae | 0:359dfe20eb14 | 702 | if(serial_byte != 0x02) { |
arcannae | 0:359dfe20eb14 | 703 | return; |
arcannae | 0:359dfe20eb14 | 704 | } |
arcannae | 0:359dfe20eb14 | 705 | |
arcannae | 0:359dfe20eb14 | 706 | for (int i = 0; i<54; i++) |
arcannae | 0:359dfe20eb14 | 707 | { |
arcannae | 0:359dfe20eb14 | 708 | Serial_data[i] = COM.getc(); |
arcannae | 0:359dfe20eb14 | 709 | led1 = !led1; |
arcannae | 0:359dfe20eb14 | 710 | } |
arcannae | 0:359dfe20eb14 | 711 | |
arcannae | 0:359dfe20eb14 | 712 | COM_AR.putc(0xFE); |
arcannae | 0:359dfe20eb14 | 713 | COM_AR.putc(0xFD); |
arcannae | 0:359dfe20eb14 | 714 | |
arcannae | 0:359dfe20eb14 | 715 | COM_AR.putc(OpticruiseLever); |
arcannae | 0:359dfe20eb14 | 716 | COM_AR.putc(Serial_data[OCTET_0]); |
arcannae | 0:359dfe20eb14 | 717 | COM_AR.putc(Serial_data[OCTET_1]); |
arcannae | 0:359dfe20eb14 | 718 | COM_AR.putc(Serial_data[OCTET_2]); |
arcannae | 0:359dfe20eb14 | 719 | COM_AR.putc(Serial_data[OCTET_3]); |
arcannae | 0:359dfe20eb14 | 720 | COM_AR.putc(Serial_data[OCTET_4]); |
arcannae | 0:359dfe20eb14 | 721 | COM_AR.putc(Serial_data[engine_gear]); |
arcannae | 0:359dfe20eb14 | 722 | COM_AR.putc(Serial_data[displayed_gear]); |
arcannae | 0:359dfe20eb14 | 723 | COM_AR.putc(Retarder); |
arcannae | 0:359dfe20eb14 | 724 | COM_AR.putc(Serial_data[retarder_steps]); |
arcannae | 0:359dfe20eb14 | 725 | COM_AR.putc(CUV_Information[0]); |
arcannae | 0:359dfe20eb14 | 726 | COM_AR.putc(CUV_Information[2]); |
arcannae | 0:359dfe20eb14 | 727 | COM_AR.putc(CUV_Information[3]); |
arcannae | 0:359dfe20eb14 | 728 | COM_AR.putc(CUV_Information[7]); |
arcannae | 0:359dfe20eb14 | 729 | COM_AR.putc(CCVS_information); |
arcannae | 0:359dfe20eb14 | 730 | COM_AR.putc(Serial_data[cruise_control]); |
arcannae | 0:359dfe20eb14 | 731 | COM_AR.putc(DLN5[2]); |
arcannae | 0:359dfe20eb14 | 732 | COM_AR.putc(DLN5[5]); |
arcannae | 0:359dfe20eb14 | 733 | |
arcannae | 0:359dfe20eb14 | 734 | |
arcannae | 0:359dfe20eb14 | 735 | for(int i = 0; i < 8; i ++) |
arcannae | 0:359dfe20eb14 | 736 | { |
arcannae | 0:359dfe20eb14 | 737 | OCTET0[i] = ((int (Serial_data[OCTET_0]) >> i) & 0x01); |
arcannae | 0:359dfe20eb14 | 738 | OCTET1[i] = ((int (Serial_data[OCTET_1]) >> i) & 0x01); |
arcannae | 0:359dfe20eb14 | 739 | OCTET2[i] = ((int (Serial_data[OCTET_2]) >> i) & 0x01); |
arcannae | 0:359dfe20eb14 | 740 | OCTET3[i] = ((int (Serial_data[OCTET_3]) >> i) & 0x01); |
arcannae | 0:359dfe20eb14 | 741 | OCTET4[i] = ((int (Serial_data[OCTET_4]) >> i) & 0x01); |
arcannae | 0:359dfe20eb14 | 742 | } |
arcannae | 0:359dfe20eb14 | 743 | __enable_irq(); |
arcannae | 0:359dfe20eb14 | 744 | } |
arcannae | 0:359dfe20eb14 | 745 | } |
arcannae | 0:359dfe20eb14 | 746 | } |
arcannae | 0:359dfe20eb14 | 747 | //****************************************************************************************************************************************************************************************************************************** |
arcannae | 0:359dfe20eb14 | 748 | //******************************************************************************************************** END PROGRAM ********************************************************************************************************* |
arcannae | 0:359dfe20eb14 | 749 | //****************************************************************************************************************************************************************************************************************************** |
arcannae | 0:359dfe20eb14 | 750 |