SHENG-HEN HSIEH
/
VDU_2021
Just a regular publish
main.cpp@4:f05bef255292, 2019-11-12 (annotated)
- Committer:
- open4416
- Date:
- Tue Nov 12 14:12:58 2019 +0000
- Revision:
- 4:f05bef255292
- Parent:
- 2:c7a3a8c1aeed
- Child:
- 5:8116016abee0
Initial release, change from 2018 CAN_Bridge
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
open4416 | 0:c4747ebbe0b4 | 1 | #include "mbed.h" |
open4416 | 2:c7a3a8c1aeed | 2 | #define dt 0.01f |
open4416 | 2:c7a3a8c1aeed | 3 | #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) |
open4416 | 2:c7a3a8c1aeed | 4 | |
open4416 | 2:c7a3a8c1aeed | 5 | DigitalOut Cool(PA_15,0); |
open4416 | 2:c7a3a8c1aeed | 6 | DigitalOut LED(D13, 0); //Internal LED output, general purpose |
open4416 | 4:f05bef255292 | 7 | CAN can1(PA_11, PA_12, 1000000); //1Mbps, contain critical torque command message |
open4416 | 2:c7a3a8c1aeed | 8 | Serial pc(USBTX, USBRX, 115200); |
open4416 | 2:c7a3a8c1aeed | 9 | Ticker ticker1; //General |
open4416 | 2:c7a3a8c1aeed | 10 | |
open4416 | 2:c7a3a8c1aeed | 11 | Ticker ticker2; //Logger |
open4416 | 0:c4747ebbe0b4 | 12 | |
open4416 | 2:c7a3a8c1aeed | 13 | CANMessage can_msg_1; |
open4416 | 2:c7a3a8c1aeed | 14 | CANMessage can_msg_2; |
open4416 | 2:c7a3a8c1aeed | 15 | CANMessage can_msg_send; |
open4416 | 2:c7a3a8c1aeed | 16 | char data_msg[8] = {0,0,0,0,0,0,0,0}; |
open4416 | 0:c4747ebbe0b4 | 17 | |
open4416 | 2:c7a3a8c1aeed | 18 | int16_t IGBT_Temp_A = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 19 | int16_t IGBT_Temp_B = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 20 | int16_t IGBT_Temp_C = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 21 | int16_t IGBT_Temp = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 22 | int16_t Motor_Temp = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 23 | int16_t DC_Current = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 24 | int16_t DC_Voltage = 0; // *0.1 to get float value |
open4416 | 2:c7a3a8c1aeed | 25 | int16_t Motor_Speed = 0; |
open4416 | 2:c7a3a8c1aeed | 26 | |
open4416 | 0:c4747ebbe0b4 | 27 | |
open4416 | 0:c4747ebbe0b4 | 28 | uint8_t CAN_flag_1 = 0; |
open4416 | 0:c4747ebbe0b4 | 29 | uint8_t CAN_flag_2 = 0; |
open4416 | 2:c7a3a8c1aeed | 30 | uint8_t timer_flag = 0; |
open4416 | 2:c7a3a8c1aeed | 31 | uint8_t RTD_State = 0; //use as bool |
open4416 | 2:c7a3a8c1aeed | 32 | uint8_t SD_OK = 0; //SD OK flag |
open4416 | 2:c7a3a8c1aeed | 33 | uint8_t Logging = 0; //Logging flag |
open4416 | 2:c7a3a8c1aeed | 34 | |
open4416 | 2:c7a3a8c1aeed | 35 | int16_t Max_temp_within_BMS1 = 0; //*0.01 to degC |
open4416 | 2:c7a3a8c1aeed | 36 | int16_t Max_temp_within_BMS2 = 0; //*0.01 to degC |
open4416 | 2:c7a3a8c1aeed | 37 | int16_t Max_temp = 0; //*0.01 to degC |
open4416 | 0:c4747ebbe0b4 | 38 | |
open4416 | 2:c7a3a8c1aeed | 39 | uint16_t Module_Total_BMS1 = 0; //*0.01 to Voltage ~ 120 V |
open4416 | 2:c7a3a8c1aeed | 40 | uint16_t Module_Total_BMS2 = 0; //*0.01 to Voltage ~ 120 V |
open4416 | 2:c7a3a8c1aeed | 41 | uint16_t Module_Total = 0; //*0.01 to Voltage ~ 240 V |
open4416 | 2:c7a3a8c1aeed | 42 | |
open4416 | 2:c7a3a8c1aeed | 43 | uint16_t Module_Min_BMS1 = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 44 | uint16_t Module_Min_BMS2 = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 45 | uint16_t Module_Min = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 46 | |
open4416 | 2:c7a3a8c1aeed | 47 | uint16_t Module_Max_BMS1 = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 48 | uint16_t Module_Max_BMS2 = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 49 | uint16_t Module_Max = 0; //*0.0001 to Voltage ~ 3.0 V |
open4416 | 2:c7a3a8c1aeed | 50 | |
open4416 | 2:c7a3a8c1aeed | 51 | void send(char ID); |
open4416 | 1:8a9ac822aab7 | 52 | void CAN_RX1(void); |
open4416 | 1:8a9ac822aab7 | 53 | void CAN_RX2(void); |
open4416 | 2:c7a3a8c1aeed | 54 | void Send2CAN1(void); |
open4416 | 2:c7a3a8c1aeed | 55 | |
open4416 | 2:c7a3a8c1aeed | 56 | void start_log(void); |
open4416 | 2:c7a3a8c1aeed | 57 | void stop_log(void); |
open4416 | 2:c7a3a8c1aeed | 58 | void autoname(void); |
open4416 | 2:c7a3a8c1aeed | 59 | int16_t max_val(int16_t i1, int16_t i2, int16_t i3); |
open4416 | 2:c7a3a8c1aeed | 60 | |
open4416 | 2:c7a3a8c1aeed | 61 | void timer1_interrupt(void) |
open4416 | 2:c7a3a8c1aeed | 62 | { |
open4416 | 2:c7a3a8c1aeed | 63 | timer_flag = 1; |
open4416 | 2:c7a3a8c1aeed | 64 | } |
open4416 | 2:c7a3a8c1aeed | 65 | void timer2_interrupt(void); |
open4416 | 0:c4747ebbe0b4 | 66 | |
open4416 | 0:c4747ebbe0b4 | 67 | int main() |
open4416 | 0:c4747ebbe0b4 | 68 | { |
open4416 | 0:c4747ebbe0b4 | 69 | CAN_flag_1 = 0; |
open4416 | 0:c4747ebbe0b4 | 70 | CAN_flag_2 = 0; |
open4416 | 1:8a9ac822aab7 | 71 | |
open4416 | 1:8a9ac822aab7 | 72 | can1.attach(&CAN_RX1, CAN::RxIrq); //CAN1 Recieve Irq |
open4416 | 2:c7a3a8c1aeed | 73 | ticker1.attach(&timer1_interrupt, 1); //1sec |
open4416 | 0:c4747ebbe0b4 | 74 | |
open4416 | 2:c7a3a8c1aeed | 75 | //General task |
open4416 | 0:c4747ebbe0b4 | 76 | while(1) { |
open4416 | 2:c7a3a8c1aeed | 77 | if(timer_flag == 1) { |
open4416 | 2:c7a3a8c1aeed | 78 | |
open4416 | 2:c7a3a8c1aeed | 79 | if(CAN_flag_1) { |
open4416 | 2:c7a3a8c1aeed | 80 | if(RTD_State) { |
open4416 | 2:c7a3a8c1aeed | 81 | Cool = 1; |
open4416 | 2:c7a3a8c1aeed | 82 | if(!Logging) { |
open4416 | 2:c7a3a8c1aeed | 83 | autoname(); //GENERATE NEW FILE EACH call fp ready or stuck |
open4416 | 2:c7a3a8c1aeed | 84 | if(SD_OK) { |
open4416 | 2:c7a3a8c1aeed | 85 | Logging = 1; |
open4416 | 2:c7a3a8c1aeed | 86 | start_log(); |
open4416 | 2:c7a3a8c1aeed | 87 | } |
open4416 | 2:c7a3a8c1aeed | 88 | } |
open4416 | 2:c7a3a8c1aeed | 89 | } else { |
open4416 | 2:c7a3a8c1aeed | 90 | Cool = 0; |
open4416 | 2:c7a3a8c1aeed | 91 | if(Logging) { |
open4416 | 2:c7a3a8c1aeed | 92 | Logging = 0; |
open4416 | 2:c7a3a8c1aeed | 93 | stop_log(); |
open4416 | 2:c7a3a8c1aeed | 94 | } |
open4416 | 2:c7a3a8c1aeed | 95 | } |
open4416 | 2:c7a3a8c1aeed | 96 | CAN_flag_1 = 0; |
open4416 | 2:c7a3a8c1aeed | 97 | } |
open4416 | 2:c7a3a8c1aeed | 98 | |
open4416 | 2:c7a3a8c1aeed | 99 | if(CAN_flag_2) { |
open4416 | 2:c7a3a8c1aeed | 100 | //Total |
open4416 | 2:c7a3a8c1aeed | 101 | Module_Total = Module_Total_BMS1 + Module_Total_BMS2; |
open4416 | 2:c7a3a8c1aeed | 102 | |
open4416 | 2:c7a3a8c1aeed | 103 | //Min |
open4416 | 2:c7a3a8c1aeed | 104 | if(Module_Min_BMS1 < Module_Min_BMS2) { |
open4416 | 2:c7a3a8c1aeed | 105 | Module_Min = Module_Min_BMS1; |
open4416 | 2:c7a3a8c1aeed | 106 | } else { |
open4416 | 2:c7a3a8c1aeed | 107 | Module_Min = Module_Min_BMS2; |
open4416 | 2:c7a3a8c1aeed | 108 | } |
open4416 | 2:c7a3a8c1aeed | 109 | |
open4416 | 2:c7a3a8c1aeed | 110 | //Max |
open4416 | 2:c7a3a8c1aeed | 111 | if(Module_Max_BMS1 < Module_Max_BMS2) { |
open4416 | 2:c7a3a8c1aeed | 112 | Module_Max = Module_Max_BMS2; |
open4416 | 2:c7a3a8c1aeed | 113 | } else { |
open4416 | 2:c7a3a8c1aeed | 114 | Module_Max = Module_Max_BMS1; |
open4416 | 2:c7a3a8c1aeed | 115 | } |
open4416 | 2:c7a3a8c1aeed | 116 | |
open4416 | 2:c7a3a8c1aeed | 117 | //Temp |
open4416 | 2:c7a3a8c1aeed | 118 | if(Max_temp_within_BMS1 < Max_temp_within_BMS2) { |
open4416 | 2:c7a3a8c1aeed | 119 | Max_temp = Max_temp_within_BMS2; |
open4416 | 2:c7a3a8c1aeed | 120 | } else { |
open4416 | 2:c7a3a8c1aeed | 121 | Max_temp = Max_temp_within_BMS1; |
open4416 | 2:c7a3a8c1aeed | 122 | } |
open4416 | 2:c7a3a8c1aeed | 123 | |
open4416 | 2:c7a3a8c1aeed | 124 | CAN_flag_2 = 0; |
open4416 | 2:c7a3a8c1aeed | 125 | Send2CAN1(); |
open4416 | 2:c7a3a8c1aeed | 126 | } |
open4416 | 2:c7a3a8c1aeed | 127 | |
open4416 | 2:c7a3a8c1aeed | 128 | // pc.printf("SOC: %.2f\n", Module_Total*0.01f); |
open4416 | 2:c7a3a8c1aeed | 129 | // pc.printf("Min: %.3f\n", Module_Min*0.0001f); |
open4416 | 2:c7a3a8c1aeed | 130 | // pc.printf("Max: %.3f\n", Module_Max*0.0001f); |
open4416 | 2:c7a3a8c1aeed | 131 | // pc.printf("Max1: %.3f\n", Module_Max_BMS1*0.0001f); |
open4416 | 2:c7a3a8c1aeed | 132 | // pc.printf("Max2: %.3f\n", Module_Max_BMS2*0.0001f); |
open4416 | 2:c7a3a8c1aeed | 133 | // pc.printf("Temp: %.1f\n", Max_temp*0.01f); |
open4416 | 2:c7a3a8c1aeed | 134 | timer_flag = 0; |
open4416 | 0:c4747ebbe0b4 | 135 | } |
open4416 | 0:c4747ebbe0b4 | 136 | } |
open4416 | 0:c4747ebbe0b4 | 137 | } |
open4416 | 0:c4747ebbe0b4 | 138 | |
open4416 | 2:c7a3a8c1aeed | 139 | void timer2_interrupt(void) |
open4416 | 2:c7a3a8c1aeed | 140 | { |
open4416 | 2:c7a3a8c1aeed | 141 | } |
open4416 | 2:c7a3a8c1aeed | 142 | |
open4416 | 2:c7a3a8c1aeed | 143 | void start_log(void) |
open4416 | 2:c7a3a8c1aeed | 144 | { |
open4416 | 4:f05bef255292 | 145 | |
open4416 | 2:c7a3a8c1aeed | 146 | } |
open4416 | 2:c7a3a8c1aeed | 147 | |
open4416 | 2:c7a3a8c1aeed | 148 | void stop_log(void) |
open4416 | 2:c7a3a8c1aeed | 149 | { |
open4416 | 4:f05bef255292 | 150 | |
open4416 | 2:c7a3a8c1aeed | 151 | } |
open4416 | 2:c7a3a8c1aeed | 152 | |
open4416 | 2:c7a3a8c1aeed | 153 | void autoname(void) |
open4416 | 2:c7a3a8c1aeed | 154 | { |
open4416 | 2:c7a3a8c1aeed | 155 | |
open4416 | 2:c7a3a8c1aeed | 156 | } |
open4416 | 2:c7a3a8c1aeed | 157 | |
open4416 | 1:8a9ac822aab7 | 158 | void CAN_RX1(void) |
open4416 | 0:c4747ebbe0b4 | 159 | { |
open4416 | 0:c4747ebbe0b4 | 160 | if(can1.read(can_msg_1)) { |
open4416 | 1:8a9ac822aab7 | 161 | switch(can_msg_1.id) { //Filtered the input message and do corresponding action |
open4416 | 2:c7a3a8c1aeed | 162 | case 0xF0: |
open4416 | 1:8a9ac822aab7 | 163 | //Internal state address |
open4416 | 2:c7a3a8c1aeed | 164 | RTD_State = can_msg_1.data[7] & 0x01; //get bit "0", result ( 1 = RTD, 0 = OFF ) |
open4416 | 2:c7a3a8c1aeed | 165 | CAN_flag_1 = 1; |
open4416 | 2:c7a3a8c1aeed | 166 | break; |
open4416 | 2:c7a3a8c1aeed | 167 | |
open4416 | 2:c7a3a8c1aeed | 168 | case 0xA0 : |
open4416 | 2:c7a3a8c1aeed | 169 | //Temperature infrom address 1 |
open4416 | 2:c7a3a8c1aeed | 170 | IGBT_Temp_A = can_msg_1.data[1] << 8 | can_msg_1.data[0]; |
open4416 | 2:c7a3a8c1aeed | 171 | IGBT_Temp_B = can_msg_1.data[3] << 8 | can_msg_1.data[2]; |
open4416 | 2:c7a3a8c1aeed | 172 | IGBT_Temp_C = can_msg_1.data[5] << 8 | can_msg_1.data[4]; |
open4416 | 2:c7a3a8c1aeed | 173 | IGBT_Temp = max_val(IGBT_Temp_A,IGBT_Temp_B,IGBT_Temp_C); |
open4416 | 2:c7a3a8c1aeed | 174 | CAN_flag_1 = 1; |
open4416 | 2:c7a3a8c1aeed | 175 | break; |
open4416 | 2:c7a3a8c1aeed | 176 | |
open4416 | 2:c7a3a8c1aeed | 177 | case 0xA2 : |
open4416 | 2:c7a3a8c1aeed | 178 | //Temperature infrom address 3 |
open4416 | 2:c7a3a8c1aeed | 179 | Motor_Temp = can_msg_1.data[5] << 8 | can_msg_1.data[4]; |
open4416 | 2:c7a3a8c1aeed | 180 | CAN_flag_1 = 1; |
open4416 | 2:c7a3a8c1aeed | 181 | break; |
open4416 | 2:c7a3a8c1aeed | 182 | |
open4416 | 2:c7a3a8c1aeed | 183 | case 0xA5: |
open4416 | 2:c7a3a8c1aeed | 184 | Motor_Speed = can_msg_1.data[3] << 8 | can_msg_1.data[2]; |
open4416 | 2:c7a3a8c1aeed | 185 | break; |
open4416 | 2:c7a3a8c1aeed | 186 | |
open4416 | 2:c7a3a8c1aeed | 187 | case 0xA6 : |
open4416 | 2:c7a3a8c1aeed | 188 | //Current infrom address |
open4416 | 2:c7a3a8c1aeed | 189 | DC_Current = can_msg_1.data[7] << 8 | can_msg_1.data[6]; |
open4416 | 2:c7a3a8c1aeed | 190 | CAN_flag_1 = 1; |
open4416 | 2:c7a3a8c1aeed | 191 | break; |
open4416 | 2:c7a3a8c1aeed | 192 | |
open4416 | 2:c7a3a8c1aeed | 193 | case 0xA7 : |
open4416 | 2:c7a3a8c1aeed | 194 | //Voltage infrom address |
open4416 | 2:c7a3a8c1aeed | 195 | DC_Voltage = can_msg_1.data[1] << 8 | can_msg_1.data[0]; |
open4416 | 1:8a9ac822aab7 | 196 | CAN_flag_1 = 1; |
open4416 | 1:8a9ac822aab7 | 197 | break; |
open4416 | 1:8a9ac822aab7 | 198 | } |
open4416 | 0:c4747ebbe0b4 | 199 | } |
open4416 | 0:c4747ebbe0b4 | 200 | } |
open4416 | 1:8a9ac822aab7 | 201 | |
open4416 | 4:f05bef255292 | 202 | //void CAN_RX2(void) |
open4416 | 4:f05bef255292 | 203 | //{ |
open4416 | 4:f05bef255292 | 204 | // if(can2.read(can_msg_2)) { |
open4416 | 4:f05bef255292 | 205 | // switch(can_msg_2.id) { |
open4416 | 4:f05bef255292 | 206 | //// case 0xD1: |
open4416 | 4:f05bef255292 | 207 | //// //BMS1 soc |
open4416 | 4:f05bef255292 | 208 | //// Module_Total_BMS1 = can_msg_2.data[1] << 8 | can_msg_2.data[0]; |
open4416 | 4:f05bef255292 | 209 | //// Module_Total_BMS1 += can_msg_2.data[3] << 8 | can_msg_2.data[2]; |
open4416 | 4:f05bef255292 | 210 | //// Module_Total_BMS1 += can_msg_2.data[5] << 8 | can_msg_2.data[4]; |
open4416 | 4:f05bef255292 | 211 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 212 | //// break; |
open4416 | 4:f05bef255292 | 213 | //// case 0xD2: |
open4416 | 4:f05bef255292 | 214 | //// //BMS1 min Volt |
open4416 | 4:f05bef255292 | 215 | //// Module_Min_BMS1 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 216 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 217 | //// break; |
open4416 | 4:f05bef255292 | 218 | //// case 0xD3: |
open4416 | 4:f05bef255292 | 219 | //// //BMS1 max Volt |
open4416 | 4:f05bef255292 | 220 | //// Module_Max_BMS1 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 221 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 222 | //// break; |
open4416 | 4:f05bef255292 | 223 | // case 0xD4: |
open4416 | 4:f05bef255292 | 224 | // //BMS1 max temperature |
open4416 | 4:f05bef255292 | 225 | // Max_temp_within_BMS1 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 226 | // CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 227 | // break; |
open4416 | 4:f05bef255292 | 228 | // |
open4416 | 4:f05bef255292 | 229 | //// case 0xE1: |
open4416 | 4:f05bef255292 | 230 | //// //BMS2 soc |
open4416 | 4:f05bef255292 | 231 | //// Module_Total_BMS2 = can_msg_2.data[1] << 8 | can_msg_2.data[0]; |
open4416 | 4:f05bef255292 | 232 | //// Module_Total_BMS2 += can_msg_2.data[3] << 8 | can_msg_2.data[2]; |
open4416 | 4:f05bef255292 | 233 | //// Module_Total_BMS2 += can_msg_2.data[5] << 8 | can_msg_2.data[4]; |
open4416 | 4:f05bef255292 | 234 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 235 | //// break; |
open4416 | 4:f05bef255292 | 236 | //// case 0xE2: |
open4416 | 4:f05bef255292 | 237 | //// //BMS2 min Volt |
open4416 | 4:f05bef255292 | 238 | //// Module_Min_BMS2 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 239 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 240 | //// break; |
open4416 | 4:f05bef255292 | 241 | //// case 0xE3: |
open4416 | 4:f05bef255292 | 242 | //// //BMS2 max Volt |
open4416 | 4:f05bef255292 | 243 | //// Module_Max_BMS2 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 244 | //// CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 245 | //// break; |
open4416 | 4:f05bef255292 | 246 | // case 0xE4: |
open4416 | 4:f05bef255292 | 247 | // //BMS2 max temperature |
open4416 | 4:f05bef255292 | 248 | // Max_temp_within_BMS2 = can_msg_2.data[7] << 8 | can_msg_2.data[6]; |
open4416 | 4:f05bef255292 | 249 | // CAN_flag_2 = 1; |
open4416 | 4:f05bef255292 | 250 | // break; |
open4416 | 4:f05bef255292 | 251 | // } |
open4416 | 4:f05bef255292 | 252 | // } |
open4416 | 4:f05bef255292 | 253 | //} |
open4416 | 2:c7a3a8c1aeed | 254 | |
open4416 | 2:c7a3a8c1aeed | 255 | void Send2CAN1(void) |
open4416 | 2:c7a3a8c1aeed | 256 | { |
open4416 | 2:c7a3a8c1aeed | 257 | data_msg[0] = Module_Total; |
open4416 | 2:c7a3a8c1aeed | 258 | data_msg[1] = Module_Total >> 8; |
open4416 | 2:c7a3a8c1aeed | 259 | data_msg[2] = Module_Min; |
open4416 | 2:c7a3a8c1aeed | 260 | data_msg[3] = Module_Min >> 8; |
open4416 | 2:c7a3a8c1aeed | 261 | data_msg[4] = Module_Max; |
open4416 | 2:c7a3a8c1aeed | 262 | data_msg[5] = Module_Max >> 8; |
open4416 | 2:c7a3a8c1aeed | 263 | data_msg[6] = Max_temp; |
open4416 | 2:c7a3a8c1aeed | 264 | data_msg[7] = Max_temp >> 8; |
open4416 | 2:c7a3a8c1aeed | 265 | send(0xF1); |
open4416 | 2:c7a3a8c1aeed | 266 | } |
open4416 | 2:c7a3a8c1aeed | 267 | |
open4416 | 2:c7a3a8c1aeed | 268 | void send(char ID) |
open4416 | 2:c7a3a8c1aeed | 269 | { |
open4416 | 2:c7a3a8c1aeed | 270 | can_msg_send = CANMessage(ID,data_msg,8,CANData,CANStandard); |
open4416 | 2:c7a3a8c1aeed | 271 | can1.write(can_msg_send); |
open4416 | 2:c7a3a8c1aeed | 272 | } |
open4416 | 2:c7a3a8c1aeed | 273 | |
open4416 | 2:c7a3a8c1aeed | 274 | int16_t max_val(int16_t i1, int16_t i2, int16_t i3) |
open4416 | 2:c7a3a8c1aeed | 275 | { |
open4416 | 2:c7a3a8c1aeed | 276 | int16_t max = i1; |
open4416 | 2:c7a3a8c1aeed | 277 | if(i2 > max) max = i2; |
open4416 | 2:c7a3a8c1aeed | 278 | if(i3 > max) max = i3; |
open4416 | 2:c7a3a8c1aeed | 279 | return max; |
open4416 | 0:c4747ebbe0b4 | 280 | } |