.

Dependencies:   mbed FastPWM

Committer:
arcannae
Date:
Wed Oct 16 20:47:12 2019 +0000
Revision:
0:359dfe20eb14
.

Who changed what in which revision?

UserRevisionLine numberNew 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