Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CANBuffer KS0108_fork mbed-rtos mbed CAN Addresses
Fork of REVO_Updated_Steering by
Steering.cpp.orig@44:80d821b5a0e7, 2015-05-14 (annotated)
- Committer:
- jayf
- Date:
- Thu May 14 18:49:05 2015 +0000
- Revision:
- 44:80d821b5a0e7
Fixed Merge Conflicts
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jayf | 44:80d821b5a0e7 | 1 | #include "Steering.h" |
| jayf | 44:80d821b5a0e7 | 2 | |
| jayf | 44:80d821b5a0e7 | 3 | // To-Do: |
| jayf | 44:80d821b5a0e7 | 4 | // Look at SYS management CAN translations: shutdown switches, DCDC status, & IMD (this is a resistance, in ohms) |
| jayf | 44:80d821b5a0e7 | 5 | // Figure out screen/variable updating options (hardware filter), NVIC_SetPriority(CAN_IRQn,####)LPC17xx.h |
| jayf | 44:80d821b5a0e7 | 6 | // Firgure out fault protocall |
| jayf | 44:80d821b5a0e7 | 7 | |
| jayf | 44:80d821b5a0e7 | 8 | void Init(); |
| jayf | 44:80d821b5a0e7 | 9 | void ProcessButtons(void const *args); |
| jayf | 44:80d821b5a0e7 | 10 | void RequestStatusChange(); |
| jayf | 44:80d821b5a0e7 | 11 | void ResetSteeringWheel(); |
| jayf | 44:80d821b5a0e7 | 12 | void ResetCar(); |
| jayf | 44:80d821b5a0e7 | 13 | void ProcessCANMsg(CANMessage& msg); |
| jayf | 44:80d821b5a0e7 | 14 | void UpdateDisplay(); |
| jayf | 44:80d821b5a0e7 | 15 | void ProcessButtons(void const *args); |
| jayf | 44:80d821b5a0e7 | 16 | void ConnectedStatusCANMsg(); |
| jayf | 44:80d821b5a0e7 | 17 | |
| jayf | 44:80d821b5a0e7 | 18 | float CANFloat; |
| jayf | 44:80d821b5a0e7 | 19 | float CANFloat2; |
| jayf | 44:80d821b5a0e7 | 20 | |
| jayf | 44:80d821b5a0e7 | 21 | Ticker StatusMsg; |
| jayf | 44:80d821b5a0e7 | 22 | |
| jayf | 44:80d821b5a0e7 | 23 | int main() |
| jayf | 44:80d821b5a0e7 | 24 | { |
| jayf | 44:80d821b5a0e7 | 25 | Init(); |
| jayf | 44:80d821b5a0e7 | 26 | |
| jayf | 44:80d821b5a0e7 | 27 | CANMessage Rxmsg; |
| jayf | 44:80d821b5a0e7 | 28 | |
| jayf | 44:80d821b5a0e7 | 29 | Thread Thread2(ProcessButtons); |
| jayf | 44:80d821b5a0e7 | 30 | Thread Thread1(DisplayCurrScreen); |
| jayf | 44:80d821b5a0e7 | 31 | |
| jayf | 44:80d821b5a0e7 | 32 | while(1) { |
| jayf | 44:80d821b5a0e7 | 33 | if (SteeringCANPort.rxRead(Rxmsg)) { |
| jayf | 44:80d821b5a0e7 | 34 | ProcessCANMsg(Rxmsg); |
| jayf | 44:80d821b5a0e7 | 35 | } |
| jayf | 44:80d821b5a0e7 | 36 | } |
| jayf | 44:80d821b5a0e7 | 37 | } |
| jayf | 44:80d821b5a0e7 | 38 | |
| jayf | 44:80d821b5a0e7 | 39 | |
| jayf | 44:80d821b5a0e7 | 40 | void Init() |
| jayf | 44:80d821b5a0e7 | 41 | { |
| jayf | 44:80d821b5a0e7 | 42 | StatusMsg.attach(&ConnectedStatusCANMsg,0.1); |
| jayf | 44:80d821b5a0e7 | 43 | pc.baud(921600); |
| jayf | 44:80d821b5a0e7 | 44 | BLButtonRed; |
| jayf | 44:80d821b5a0e7 | 45 | BRButtonGreen; |
| jayf | 44:80d821b5a0e7 | 46 | TLButtonGreen; |
| jayf | 44:80d821b5a0e7 | 47 | TRButtonGreen; |
| jayf | 44:80d821b5a0e7 | 48 | //initialize screen Startup Process |
| jayf | 44:80d821b5a0e7 | 49 | wait(2); |
| jayf | 44:80d821b5a0e7 | 50 | } |
| jayf | 44:80d821b5a0e7 | 51 | |
| jayf | 44:80d821b5a0e7 | 52 | |
| jayf | 44:80d821b5a0e7 | 53 | void ProcessButtons(void const *args) |
| jayf | 44:80d821b5a0e7 | 54 | { |
| jayf | 44:80d821b5a0e7 | 55 | while(1) { |
| jayf | 44:80d821b5a0e7 | 56 | Thread::wait(50); |
| jayf | 44:80d821b5a0e7 | 57 | if(biSWBR.read()) { |
| jayf | 44:80d821b5a0e7 | 58 | Thread::wait(750); |
| jayf | 44:80d821b5a0e7 | 59 | if (biSWBR.read()) { |
| jayf | 44:80d821b5a0e7 | 60 | ResetCar(); |
| jayf | 44:80d821b5a0e7 | 61 | } |
| jayf | 44:80d821b5a0e7 | 62 | NVIC_SystemReset(); |
| jayf | 44:80d821b5a0e7 | 63 | ResetSteeringWheel(); |
| jayf | 44:80d821b5a0e7 | 64 | } |
| jayf | 44:80d821b5a0e7 | 65 | |
| jayf | 44:80d821b5a0e7 | 66 | if(biSWBL.read()) { |
| jayf | 44:80d821b5a0e7 | 67 | Thread::wait(1000); |
| jayf | 44:80d821b5a0e7 | 68 | if (biSWBL.read()) { |
| jayf | 44:80d821b5a0e7 | 69 | RequestStatusChange(); |
| jayf | 44:80d821b5a0e7 | 70 | } |
| jayf | 44:80d821b5a0e7 | 71 | } |
| jayf | 44:80d821b5a0e7 | 72 | |
| jayf | 44:80d821b5a0e7 | 73 | if(biSWTR.read() && CurrScreen != 5) { |
| jayf | 44:80d821b5a0e7 | 74 | //If the toggle button is pressed and the screen isn't on Fault_Screen |
| jayf | 44:80d821b5a0e7 | 75 | ToggleScreen(); |
| jayf | 44:80d821b5a0e7 | 76 | Thread::wait(250); |
| jayf | 44:80d821b5a0e7 | 77 | } else if (biSWTR.read() && CurrScreen == 5) {// If the screen was on Fault, go to Home |
| jayf | 44:80d821b5a0e7 | 78 | CurrScreen = 0; |
| jayf | 44:80d821b5a0e7 | 79 | Thread::wait(250); |
| jayf | 44:80d821b5a0e7 | 80 | } |
| jayf | 44:80d821b5a0e7 | 81 | |
| jayf | 44:80d821b5a0e7 | 82 | if(biSWTL.read() && CurrScreen != 0) { |
| jayf | 44:80d821b5a0e7 | 83 | //If the Home button is pressed and the screen isn't on Fault_Screen |
| jayf | 44:80d821b5a0e7 | 84 | CurrScreen = 0; |
| jayf | 44:80d821b5a0e7 | 85 | Thread::wait(250); |
| jayf | 44:80d821b5a0e7 | 86 | } else if (biSWTL.read() && CurrScreen == 0) {// If the screen was on Fault, go to Home |
| jayf | 44:80d821b5a0e7 | 87 | CurrScreen = 5; |
| jayf | 44:80d821b5a0e7 | 88 | Thread::wait(250); |
| jayf | 44:80d821b5a0e7 | 89 | } |
| jayf | 44:80d821b5a0e7 | 90 | } |
| jayf | 44:80d821b5a0e7 | 91 | } |
| jayf | 44:80d821b5a0e7 | 92 | |
| jayf | 44:80d821b5a0e7 | 93 | |
| jayf | 44:80d821b5a0e7 | 94 | void UpdateDisplay() |
| jayf | 44:80d821b5a0e7 | 95 | { |
| jayf | 44:80d821b5a0e7 | 96 | } |
| jayf | 44:80d821b5a0e7 | 97 | |
| jayf | 44:80d821b5a0e7 | 98 | |
| jayf | 44:80d821b5a0e7 | 99 | void ProcessCANMsg(CANMessage& Rxmsg) |
| jayf | 44:80d821b5a0e7 | 100 | { |
| jayf | 44:80d821b5a0e7 | 101 | if (SteeringCANPort.rxRead(Rxmsg)) { |
| jayf | 44:80d821b5a0e7 | 102 | // Printing CAN message data: |
| jayf | 44:80d821b5a0e7 | 103 | // printf("Message ID: 0x%x len: %d hex: 0x%x float: %f\r\n", Rxmsg.id, Rxmsg.len, *((int*)((void*)(&Rxmsg.data[0]))), *((float*)((void*)(&Rxmsg.data[0])))); |
| jayf | 44:80d821b5a0e7 | 104 | // for (int i=0; i < Rxmsg.len; i++) printf("D[%d]: %x ", i, Rxmsg.data[i]); |
| jayf | 44:80d821b5a0e7 | 105 | if (Rxmsg.id == MODE_TX_ID) { |
| jayf | 44:80d821b5a0e7 | 106 | if(Rxmsg.data[0] != (1<<3)) |
| jayf | 44:80d821b5a0e7 | 107 | DriveStatusRequestBuffer=1; |
| jayf | 44:80d821b5a0e7 | 108 | else |
| jayf | 44:80d821b5a0e7 | 109 | DriveStatusRequestBuffer=0; |
| jayf | 44:80d821b5a0e7 | 110 | } |
| jayf | 44:80d821b5a0e7 | 111 | |
| jayf | 44:80d821b5a0e7 | 112 | if (Rxmsg.id == POWER_TX_ID) { |
| jayf | 44:80d821b5a0e7 | 113 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 114 | LEDBar = (CANFloat/85.0)*(2.6/3.3); |
| jayf | 44:80d821b5a0e7 | 115 | } |
| jayf | 44:80d821b5a0e7 | 116 | |
| jayf | 44:80d821b5a0e7 | 117 | switch (CurrScreen) { |
| jayf | 44:80d821b5a0e7 | 118 | case HOME_SCREEN: |
| jayf | 44:80d821b5a0e7 | 119 | switch (Rxmsg.id) { |
| jayf | 44:80d821b5a0e7 | 120 | |
| jayf | 44:80d821b5a0e7 | 121 | // HOME SCREEN ******************************************************************************************* |
| jayf | 44:80d821b5a0e7 | 122 | // Pedal Test |
| jayf | 44:80d821b5a0e7 | 123 | /*case PCM_PEDALS_ID: |
| jayf | 44:80d821b5a0e7 | 124 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 125 | if (abs(CANFloat*100 - float (*AccPedalBuffer)) >= 1) { |
| jayf | 44:80d821b5a0e7 | 126 | sprintf(AccPedalBuffer,"%3.2d", int(CANFloat*100)); |
| jayf | 44:80d821b5a0e7 | 127 | display.PutString(1,40,AccPedalBuffer); |
| jayf | 44:80d821b5a0e7 | 128 | } |
| jayf | 44:80d821b5a0e7 | 129 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 130 | if (abs(CANFloat2*100 - float (*BrkPedalBuffer)) >= 1) { |
| jayf | 44:80d821b5a0e7 | 131 | sprintf(BrkPedalBuffer,"%3.2d", int(CANFloat2*100)); |
| jayf | 44:80d821b5a0e7 | 132 | display.PutString(1,60,BrkPedalBuffer); |
| jayf | 44:80d821b5a0e7 | 133 | } |
| jayf | 44:80d821b5a0e7 | 134 | break;*/ |
| jayf | 44:80d821b5a0e7 | 135 | |
| jayf | 44:80d821b5a0e7 | 136 | case SOC_TX_ID: |
| jayf | 44:80d821b5a0e7 | 137 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 138 | if (abs(CANFloat*100 - *BigBatLifeBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 139 | sprintf(BigBatLifeBuffer,"%3.2d", int(CANFloat*100)); // Big battery life percentage |
| jayf | 44:80d821b5a0e7 | 140 | display.PutString(1,40,BigBatLifeBuffer); |
| jayf | 44:80d821b5a0e7 | 141 | } |
| jayf | 44:80d821b5a0e7 | 142 | break; |
| jayf | 44:80d821b5a0e7 | 143 | case SYS_GLV_SOC_ID: |
| jayf | 44:80d821b5a0e7 | 144 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 145 | if (abs(CANFloat*100 - *SmallBatLifeBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 146 | sprintf(SmallBatLifeBuffer,"%3.2d", int(CANFloat*100)); // Small battery life percentage |
| jayf | 44:80d821b5a0e7 | 147 | display.PutString(1,60,SmallBatLifeBuffer); |
| jayf | 44:80d821b5a0e7 | 148 | } |
| jayf | 44:80d821b5a0e7 | 149 | break; |
| jayf | 44:80d821b5a0e7 | 150 | case PCM_FRPM_ID: |
| jayf | 44:80d821b5a0e7 | 151 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 152 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 153 | if (abs((CANFloat+CANFloat2)*WheelCircumference*30 - *CarSpdBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 154 | sprintf(CarSpdBuffer,"%3.2d", int((CANFloat+CANFloat2)*WheelCircumference*30)); // Miles per hour |
| jayf | 44:80d821b5a0e7 | 155 | display.PutString(1,108,CarSpdBuffer); |
| jayf | 44:80d821b5a0e7 | 156 | } |
| jayf | 44:80d821b5a0e7 | 157 | break; |
| jayf | 44:80d821b5a0e7 | 158 | case TEMP_MMA_TX_ID_BASE2: |
| jayf | 44:80d821b5a0e7 | 159 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 160 | if (abs((CANFloat*9.0/5.0)+32 - *AvgBatTBuffer) >=1) { |
| jayf | 44:80d821b5a0e7 | 161 | sprintf(AvgBatTBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); // Degrees F |
| jayf | 44:80d821b5a0e7 | 162 | display.PutString(3,39,AvgBatTBuffer); |
| jayf | 44:80d821b5a0e7 | 163 | } |
| jayf | 44:80d821b5a0e7 | 164 | break; |
| jayf | 44:80d821b5a0e7 | 165 | case TEMP_MMA_TX_ID_BASE: |
| jayf | 44:80d821b5a0e7 | 166 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 167 | if (abs((CANFloat2*9.0/5.0)+32 - *MaxBatTBuffer) >=1) { |
| jayf | 44:80d821b5a0e7 | 168 | sprintf(MaxBatTBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 169 | display.PutString(3,103,MaxBatTBuffer); |
| jayf | 44:80d821b5a0e7 | 170 | } |
| jayf | 44:80d821b5a0e7 | 171 | break; |
| jayf | 44:80d821b5a0e7 | 172 | case MOC_MOTEMP_ID: |
| jayf | 44:80d821b5a0e7 | 173 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 174 | if (abs((CANFloat*9.0/5.0)+32 - *LMtrTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 175 | sprintf(LMtrTmpBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 176 | display.PutString(5,34,LMtrTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 177 | } |
| jayf | 44:80d821b5a0e7 | 178 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 179 | if (abs((CANFloat2*9.0/5.0)+32 - *RMtrTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 180 | sprintf(RMtrTmpBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 181 | display.PutString(5,34,RMtrTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 182 | } |
| jayf | 44:80d821b5a0e7 | 183 | break; |
| jayf | 44:80d821b5a0e7 | 184 | default: |
| jayf | 44:80d821b5a0e7 | 185 | break; |
| jayf | 44:80d821b5a0e7 | 186 | } |
| jayf | 44:80d821b5a0e7 | 187 | break; |
| jayf | 44:80d821b5a0e7 | 188 | // BATTERY SCREEN*********************************************************************************** |
| jayf | 44:80d821b5a0e7 | 189 | case BATTERY_SCREEN: |
| jayf | 44:80d821b5a0e7 | 190 | switch (Rxmsg.id) { |
| jayf | 44:80d821b5a0e7 | 191 | case VOLTAGE_TX_ID: |
| jayf | 44:80d821b5a0e7 | 192 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 193 | if (abs(CANFloat - *BigBatVoltBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 194 | sprintf(BigBatVoltBuffer,"%3.2d", int(CANFloat)); // Volts |
| jayf | 44:80d821b5a0e7 | 195 | display.PutString(1,10,BigBatVoltBuffer); |
| jayf | 44:80d821b5a0e7 | 196 | } |
| jayf | 44:80d821b5a0e7 | 197 | break; |
| jayf | 44:80d821b5a0e7 | 198 | case POWER_TX_ID: |
| jayf | 44:80d821b5a0e7 | 199 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 200 | LEDBar = (CANFloat/85.0)*(2.6/3.3); |
| jayf | 44:80d821b5a0e7 | 201 | if (abs(CANFloat - *BigBatPowerBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 202 | sprintf(BigBatPowerBuffer,"%3.2d", int(CANFloat)); // Watts |
| jayf | 44:80d821b5a0e7 | 203 | display.PutString(1,55,BigBatPowerBuffer); |
| jayf | 44:80d821b5a0e7 | 204 | } |
| jayf | 44:80d821b5a0e7 | 205 | break; |
| jayf | 44:80d821b5a0e7 | 206 | case CURRENT_TX_ID: |
| jayf | 44:80d821b5a0e7 | 207 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 208 | if (abs(CANFloat - *BigBatCurrentBuffer) >= 0.2) { |
| jayf | 44:80d821b5a0e7 | 209 | sprintf(BigBatCurrentBuffer,"%3.2d", int(CANFloat)); // Amps |
| jayf | 44:80d821b5a0e7 | 210 | display.PutString(1,100,BigBatCurrentBuffer); |
| jayf | 44:80d821b5a0e7 | 211 | } |
| jayf | 44:80d821b5a0e7 | 212 | break; |
| jayf | 44:80d821b5a0e7 | 213 | case CELLV_MMA_TX_ID_BASE: |
| jayf | 44:80d821b5a0e7 | 214 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 215 | if (abs(CANFloat2 - *VmaxBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 216 | sprintf(VmaxBuffer,"%3.2d", int(CANFloat2)); |
| jayf | 44:80d821b5a0e7 | 217 | display.PutString(3,20,VmaxBuffer); |
| jayf | 44:80d821b5a0e7 | 218 | } |
| jayf | 44:80d821b5a0e7 | 219 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 220 | if (abs(CANFloat - *VminBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 221 | sprintf(VminBuffer,"%3.2d", int(CANFloat)); |
| jayf | 44:80d821b5a0e7 | 222 | display.PutString(3,67,VminBuffer); |
| jayf | 44:80d821b5a0e7 | 223 | } |
| jayf | 44:80d821b5a0e7 | 224 | break; |
| jayf | 44:80d821b5a0e7 | 225 | case CELLV_MMA_TX_ID_BASE2: |
| jayf | 44:80d821b5a0e7 | 226 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 227 | if (abs(CANFloat - *VavgBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 228 | sprintf(VavgBuffer,"%3.2d", int(CANFloat)); // Volts |
| jayf | 44:80d821b5a0e7 | 229 | display.PutString(3,108,VavgBuffer); |
| jayf | 44:80d821b5a0e7 | 230 | } |
| jayf | 44:80d821b5a0e7 | 231 | break; |
| jayf | 44:80d821b5a0e7 | 232 | case TEMP_MMA_TX_ID_BASE: |
| jayf | 44:80d821b5a0e7 | 233 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 234 | if (abs((CANFloat*9.0/5.0)+32 - *MinBatTBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 235 | sprintf(MinBatTBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 236 | display.PutString(5,67,MinBatTBuffer); |
| jayf | 44:80d821b5a0e7 | 237 | } |
| jayf | 44:80d821b5a0e7 | 238 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 239 | if (abs((CANFloat2*9.0/5.0)+32 - *MaxBatTBuffer) >=1) { |
| jayf | 44:80d821b5a0e7 | 240 | sprintf(MaxBatTBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 241 | display.PutString(5,20,MaxBatTBuffer); |
| jayf | 44:80d821b5a0e7 | 242 | } |
| jayf | 44:80d821b5a0e7 | 243 | break; |
| jayf | 44:80d821b5a0e7 | 244 | case TEMP_MMA_TX_ID_BASE2: |
| jayf | 44:80d821b5a0e7 | 245 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 246 | if (abs((CANFloat*9.0/5.0)+32 - *AvgBatTBuffer) >=1) { |
| jayf | 44:80d821b5a0e7 | 247 | sprintf(AvgBatTBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); // Degrees F |
| jayf | 44:80d821b5a0e7 | 248 | display.PutString(5,108,AvgBatTBuffer); |
| jayf | 44:80d821b5a0e7 | 249 | } |
| jayf | 44:80d821b5a0e7 | 250 | break; |
| jayf | 44:80d821b5a0e7 | 251 | case BOARDTEMP_TX_ID: |
| jayf | 44:80d821b5a0e7 | 252 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 253 | if (abs((CANFloat*9.0/5.0)+32 - *BoardTempBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 254 | sprintf(BoardTempBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); // Degrees F |
| jayf | 44:80d821b5a0e7 | 255 | display.PutString(7,87,BoardTempBuffer); |
| jayf | 44:80d821b5a0e7 | 256 | } |
| jayf | 44:80d821b5a0e7 | 257 | break; |
| jayf | 44:80d821b5a0e7 | 258 | default: |
| jayf | 44:80d821b5a0e7 | 259 | break; |
| jayf | 44:80d821b5a0e7 | 260 | } |
| jayf | 44:80d821b5a0e7 | 261 | break; |
| jayf | 44:80d821b5a0e7 | 262 | // MOTOR SCREEN***************************************************************** |
| jayf | 44:80d821b5a0e7 | 263 | case MOTOR_SCREEN: |
| jayf | 44:80d821b5a0e7 | 264 | switch (Rxmsg.id) { |
| jayf | 44:80d821b5a0e7 | 265 | case MOC_MOTEMP_ID: |
| jayf | 44:80d821b5a0e7 | 266 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 267 | if (abs((CANFloat*9.0/5.0)+32 - *LMtrTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 268 | sprintf(LMtrTmpBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 269 | display.PutString(1,34,LMtrTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 270 | } |
| jayf | 44:80d821b5a0e7 | 271 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 272 | if (abs((CANFloat2*9.0/5.0)+32 - *RMtrTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 273 | sprintf(RMtrTmpBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 274 | display.PutString(1,98,LMtrTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 275 | } |
| jayf | 44:80d821b5a0e7 | 276 | break; |
| jayf | 44:80d821b5a0e7 | 277 | case MOC_AIRTEMP_ID: |
| jayf | 44:80d821b5a0e7 | 278 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 279 | if (abs((CANFloat*9.0/5.0)+32 - *LAirTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 280 | sprintf(LAirTmpBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 281 | display.PutString(2,34,LAirTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 282 | } |
| jayf | 44:80d821b5a0e7 | 283 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 284 | if (abs((CANFloat2*9.0/5.0)+32 - *RAirTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 285 | sprintf(RAirTmpBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); // Degrees F |
| jayf | 44:80d821b5a0e7 | 286 | display.PutString(2,98,RAirTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 287 | } |
| jayf | 44:80d821b5a0e7 | 288 | break; |
| jayf | 44:80d821b5a0e7 | 289 | case MOC_IGBTTEMP_ID: |
| jayf | 44:80d821b5a0e7 | 290 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 291 | if (abs((CANFloat*9.0/5.0)+32 - *LIGBTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 292 | sprintf(LIGBTmpBuffer,"%3.2d", int((CANFloat*9.0/5.0)+32)); |
| jayf | 44:80d821b5a0e7 | 293 | display.PutString(3,34,LIGBTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 294 | } |
| jayf | 44:80d821b5a0e7 | 295 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 296 | if (abs((CANFloat2*9.0/5.0)+32 - *RIGBTmpBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 297 | sprintf(RIGBTmpBuffer,"%3.2d", int((CANFloat2*9.0/5.0)+32)); // Degrees F |
| jayf | 44:80d821b5a0e7 | 298 | display.PutString(3,98,RIGBTmpBuffer); |
| jayf | 44:80d821b5a0e7 | 299 | } |
| jayf | 44:80d821b5a0e7 | 300 | break; |
| jayf | 44:80d821b5a0e7 | 301 | case MOC_RPM_ID: |
| jayf | 44:80d821b5a0e7 | 302 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 303 | if (abs(CANFloat - *Rpm_LBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 304 | sprintf(Rpm_LBuffer,"%3.2d", int(CANFloat)); |
| jayf | 44:80d821b5a0e7 | 305 | display.PutString(5,30,Rpm_LBuffer); |
| jayf | 44:80d821b5a0e7 | 306 | } |
| jayf | 44:80d821b5a0e7 | 307 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 308 | if (abs(CANFloat2 - *Rpm_RBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 309 | sprintf(Rpm_RBuffer,"%3.2d", int(CANFloat2)); |
| jayf | 44:80d821b5a0e7 | 310 | display.PutString(5,107,Rpm_RBuffer); |
| jayf | 44:80d821b5a0e7 | 311 | } |
| jayf | 44:80d821b5a0e7 | 312 | break; |
| jayf | 44:80d821b5a0e7 | 313 | case PCM_TORQUERQ_ID: |
| jayf | 44:80d821b5a0e7 | 314 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 315 | if (abs(CANFloat*100 - *TRequestBufferL) >= 1) { |
| jayf | 44:80d821b5a0e7 | 316 | sprintf(TRequestBufferL,"%3.2d", int(CANFloat*100)); // Percentage |
| jayf | 44:80d821b5a0e7 | 317 | display.PutString(7,89,TRequestBufferL); |
| jayf | 44:80d821b5a0e7 | 318 | } |
| jayf | 44:80d821b5a0e7 | 319 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 320 | if (abs(CANFloat2*100 - *TRequestBufferR) >= 1) { |
| jayf | 44:80d821b5a0e7 | 321 | sprintf(TRequestBufferR,"%3.2d", int(CANFloat2*100)); // Percentage |
| jayf | 44:80d821b5a0e7 | 322 | display.PutString(7,89,TRequestBufferR); |
| jayf | 44:80d821b5a0e7 | 323 | } |
| jayf | 44:80d821b5a0e7 | 324 | break; |
| jayf | 44:80d821b5a0e7 | 325 | default: |
| jayf | 44:80d821b5a0e7 | 326 | break; |
| jayf | 44:80d821b5a0e7 | 327 | } |
| jayf | 44:80d821b5a0e7 | 328 | break; |
| jayf | 44:80d821b5a0e7 | 329 | |
| jayf | 44:80d821b5a0e7 | 330 | // SYSTEM MANAGEMENT SCREEN*************************************************** |
| jayf | 44:80d821b5a0e7 | 331 | case SYS_MGMT_SCREEN: |
| jayf | 44:80d821b5a0e7 | 332 | switch (Rxmsg.id) { |
| jayf | 44:80d821b5a0e7 | 333 | case SYS_GLV_CURRENT_ID: |
| jayf | 44:80d821b5a0e7 | 334 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 335 | if (abs(CANFloat - *SmallBatCurrentBuffer) >= 0.2) { |
| jayf | 44:80d821b5a0e7 | 336 | sprintf(SmallBatCurrentBuffer,"%3.2d", int(CANFloat)); // Amps |
| jayf | 44:80d821b5a0e7 | 337 | display.PutString(1,30,SmallBatCurrentBuffer); |
| jayf | 44:80d821b5a0e7 | 338 | } |
| jayf | 44:80d821b5a0e7 | 339 | break; |
| jayf | 44:80d821b5a0e7 | 340 | case SYS_SWITCHES_ID: |
| jayf | 44:80d821b5a0e7 | 341 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 342 | sprintf(ShtdSwtchBuffer,"%3.2d", int(CANFloat)); // How the heck are we interpreting this data |
| jayf | 44:80d821b5a0e7 | 343 | display.PutString(1,108,ShtdSwtchBuffer); |
| jayf | 44:80d821b5a0e7 | 344 | break; |
| jayf | 44:80d821b5a0e7 | 345 | case SYS_PWM_FAN_ID: |
| jayf | 44:80d821b5a0e7 | 346 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 347 | if (abs(CANFloat*100 - *Fan1Buffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 348 | sprintf(Fan1Buffer,"%3.2d", int(CANFloat*100)); |
| jayf | 44:80d821b5a0e7 | 349 | display.PutString(3,30,Fan1Buffer); |
| jayf | 44:80d821b5a0e7 | 350 | } |
| jayf | 44:80d821b5a0e7 | 351 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 352 | if (abs(CANFloat2*100 - *Fan1Buffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 353 | sprintf(Fan2Buffer,"%3.2d", int(CANFloat2*100)); |
| jayf | 44:80d821b5a0e7 | 354 | display.PutString(3,107,Fan2Buffer); |
| jayf | 44:80d821b5a0e7 | 355 | } |
| jayf | 44:80d821b5a0e7 | 356 | break; |
| jayf | 44:80d821b5a0e7 | 357 | case SYS_PWM_PUMP_ID: |
| jayf | 44:80d821b5a0e7 | 358 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 359 | if (abs(CANFloat*100 - *Pump1Buffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 360 | sprintf(Pump1Buffer,"%3.2d", int(CANFloat*100)); |
| jayf | 44:80d821b5a0e7 | 361 | display.PutString(5,30,Pump1Buffer); |
| jayf | 44:80d821b5a0e7 | 362 | } |
| jayf | 44:80d821b5a0e7 | 363 | CANFloat2 = GetFloat4; |
| jayf | 44:80d821b5a0e7 | 364 | if (abs(CANFloat2*100 - *Pump2Buffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 365 | sprintf(Pump2Buffer,"%3.2d", int(CANFloat2*100)); |
| jayf | 44:80d821b5a0e7 | 366 | display.PutString(5,107,Pump2Buffer); |
| jayf | 44:80d821b5a0e7 | 367 | } |
| jayf | 44:80d821b5a0e7 | 368 | break; |
| jayf | 44:80d821b5a0e7 | 369 | case SYS_DCDC_STATUS_ID: |
| jayf | 44:80d821b5a0e7 | 370 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 371 | sprintf(DCDCBuffer,"%3.2d", int(CANFloat)); // How the heck are we interpreting this data |
| jayf | 44:80d821b5a0e7 | 372 | display.PutString(7,30,DCDCBuffer); |
| jayf | 44:80d821b5a0e7 | 373 | break; |
| jayf | 44:80d821b5a0e7 | 374 | case SYS_IMD_RESIST_ID: |
| jayf | 44:80d821b5a0e7 | 375 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 376 | if (abs(CANFloat - *IMDRBuffer) >= 1) { |
| jayf | 44:80d821b5a0e7 | 377 | sprintf(IMDRBuffer,"%3.2d", int(CANFloat)); |
| jayf | 44:80d821b5a0e7 | 378 | display.PutString(7,82,IMDRBuffer); |
| jayf | 44:80d821b5a0e7 | 379 | } |
| jayf | 44:80d821b5a0e7 | 380 | break; |
| jayf | 44:80d821b5a0e7 | 381 | default: |
| jayf | 44:80d821b5a0e7 | 382 | break; |
| jayf | 44:80d821b5a0e7 | 383 | } |
| jayf | 44:80d821b5a0e7 | 384 | break; |
| jayf | 44:80d821b5a0e7 | 385 | |
| jayf | 44:80d821b5a0e7 | 386 | // CHARGE SCREEN ************************************************************* |
| jayf | 44:80d821b5a0e7 | 387 | case CHARGE_SCREEN: |
| jayf | 44:80d821b5a0e7 | 388 | switch (Rxmsg.id) { |
| jayf | 44:80d821b5a0e7 | 389 | case CHARGECURR_TX_ID: |
| jayf | 44:80d821b5a0e7 | 390 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 391 | if (abs(CANFloat - *ChargeCurrBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 392 | sprintf(ChargeCurrBuffer,"%3.2d", int(CANFloat)); // Amps |
| jayf | 44:80d821b5a0e7 | 393 | display.PutString(3,94,ChargeCurrBuffer); |
| jayf | 44:80d821b5a0e7 | 394 | } |
| jayf | 44:80d821b5a0e7 | 395 | break; |
| jayf | 44:80d821b5a0e7 | 396 | case VOLTAGE_TX_ID: |
| jayf | 44:80d821b5a0e7 | 397 | CANFloat = GetFloat; |
| jayf | 44:80d821b5a0e7 | 398 | if (abs(CANFloat - *BigBatVoltBuffer) >= 0.1) { |
| jayf | 44:80d821b5a0e7 | 399 | sprintf(BigBatVoltBuffer,"%3.2d", int(CANFloat)); // Volts |
| jayf | 44:80d821b5a0e7 | 400 | display.PutString(3,94,BigBatVoltBuffer); |
| jayf | 44:80d821b5a0e7 | 401 | } |
| jayf | 44:80d821b5a0e7 | 402 | break; |
| jayf | 44:80d821b5a0e7 | 403 | default: |
| jayf | 44:80d821b5a0e7 | 404 | break; |
| jayf | 44:80d821b5a0e7 | 405 | } |
| jayf | 44:80d821b5a0e7 | 406 | break; |
| jayf | 44:80d821b5a0e7 | 407 | default: |
| jayf | 44:80d821b5a0e7 | 408 | break; |
| jayf | 44:80d821b5a0e7 | 409 | } |
| jayf | 44:80d821b5a0e7 | 410 | } |
| jayf | 44:80d821b5a0e7 | 411 | } |
| jayf | 44:80d821b5a0e7 | 412 | |
| jayf | 44:80d821b5a0e7 | 413 | void ConnectedStatusCANMsg() |
| jayf | 44:80d821b5a0e7 | 414 | { |
| jayf | 44:80d821b5a0e7 | 415 | CANMessage ConnectedStatus(0x600, &ConnectedStatusBuffer,1); |
| jayf | 44:80d821b5a0e7 | 416 | SteeringCANPort.txWrite(ConnectedStatus); |
| jayf | 44:80d821b5a0e7 | 417 | } |
| jayf | 44:80d821b5a0e7 | 418 | |
| jayf | 44:80d821b5a0e7 | 419 | |
| jayf | 44:80d821b5a0e7 | 420 | void RequestStatusChange() |
| jayf | 44:80d821b5a0e7 | 421 | { |
| jayf | 44:80d821b5a0e7 | 422 | CANMessage TxDriveStatusRequest(0x601, &DriveStatusRequestBuffer,1); |
| jayf | 44:80d821b5a0e7 | 423 | for (int j=0; j<10; j++) { |
| jayf | 44:80d821b5a0e7 | 424 | SteeringCANPort.txWrite(TxDriveStatusRequest); |
| jayf | 44:80d821b5a0e7 | 425 | } |
| jayf | 44:80d821b5a0e7 | 426 | display.PutString(7,0," DRIVE REQUEST SENT "); |
| jayf | 44:80d821b5a0e7 | 427 | Thread::wait(750); |
| jayf | 44:80d821b5a0e7 | 428 | PrevScreen = !CurrScreen; // To force a screen update |
| jayf | 44:80d821b5a0e7 | 429 | } |
| jayf | 44:80d821b5a0e7 | 430 | |
| jayf | 44:80d821b5a0e7 | 431 | |
| jayf | 44:80d821b5a0e7 | 432 | void ResetSteeringWheel() |
| jayf | 44:80d821b5a0e7 | 433 | { |
| jayf | 44:80d821b5a0e7 | 434 | NVIC_SystemReset(); |
| jayf | 44:80d821b5a0e7 | 435 | } |
| jayf | 44:80d821b5a0e7 | 436 | |
| jayf | 44:80d821b5a0e7 | 437 | |
| jayf | 44:80d821b5a0e7 | 438 | void ResetCar() |
| jayf | 44:80d821b5a0e7 | 439 | { |
| jayf | 44:80d821b5a0e7 | 440 | CANMessage TxCarReset(0x602,&TxResetBuffer,1); |
| jayf | 44:80d821b5a0e7 | 441 | for (int k=0; k<10; k++) { |
| jayf | 44:80d821b5a0e7 | 442 | SteeringCANPort.txWriteDirect(TxCarReset); |
| jayf | 44:80d821b5a0e7 | 443 | } |
| jayf | 44:80d821b5a0e7 | 444 | } |
