pub

Dependencies:   CANnucleo mbed-dev

Fork of CANnucleo_Hello by Zoltan Hudak

Committer:
stefan92
Date:
Tue Mar 13 20:54:24 2018 +0000
Revision:
13:37c502ebc543
Parent:
12:e91e44924194
pub

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:c5e5d0df6f2a 1 #include "mbed.h"
hudakz 12:e91e44924194 2 #include "CANnucleo.h"
stefan92 13:37c502ebc543 3 #include "myCan.hpp"
stefan92 13:37c502ebc543 4 #include "lcd.hpp"
stefan92 13:37c502ebc543 5 #include "printGear.hpp"
stefan92 13:37c502ebc543 6 #include "printIntValue.hpp"
stefan92 13:37c502ebc543 7 #include "printFloatValue.hpp"
stefan92 13:37c502ebc543 8 #include "displaySettings.hpp"
hudakz 0:c5e5d0df6f2a 9
stefan92 13:37c502ebc543 10 //Temperatur definitionen
stefan92 13:37c502ebc543 11 #define tmot_max 95
stefan92 13:37c502ebc543 12 #define toil_max 150
stefan92 13:37c502ebc543 13 #define tfuel_max 40
stefan92 13:37c502ebc543 14 #define poil_min 1.0
stefan92 13:37c502ebc543 15 #define ubatt_min 14
stefan92 13:37c502ebc543 16
stefan92 13:37c502ebc543 17 #define tmot_max2 105
stefan92 13:37c502ebc543 18 #define toil_max2 155
stefan92 13:37c502ebc543 19 #define tfuel_max2 50
stefan92 13:37c502ebc543 20 #define poil_min2 0.8
stefan92 13:37c502ebc543 21 #define ubatt_min2 13.2
stefan92 13:37c502ebc543 22
stefan92 13:37c502ebc543 23
stefan92 13:37c502ebc543 24
stefan92 13:37c502ebc543 25 #define TARGET_NUCLEO_F303K8 1
stefan92 13:37c502ebc543 26
stefan92 13:37c502ebc543 27 #define LED_PIN LED1
hudakz 0:c5e5d0df6f2a 28
stefan92 13:37c502ebc543 29 const int OFF = 0;
stefan92 13:37c502ebc543 30 const int ON = 1;
stefan92 13:37c502ebc543 31
stefan92 13:37c502ebc543 32 const unsigned int TX_ID = 0x7AA;
stefan92 13:37c502ebc543 33
stefan92 13:37c502ebc543 34
stefan92 13:37c502ebc543 35 //Ein- und Ausgänge
stefan92 13:37c502ebc543 36 DigitalOut mil_ubatt(A0);
stefan92 13:37c502ebc543 37 DigitalOut mil_tmot(D13);
stefan92 13:37c502ebc543 38 DigitalOut mil_toil(D1);
stefan92 13:37c502ebc543 39 DigitalOut mil_poil(D0);
stefan92 13:37c502ebc543 40
stefan92 13:37c502ebc543 41 DigitalOut shift(D8);
hudakz 0:c5e5d0df6f2a 42
stefan92 13:37c502ebc543 43 DigitalOut backl_red(D9);
stefan92 13:37c502ebc543 44 DigitalOut backl_yellow(D11);
stefan92 13:37c502ebc543 45
stefan92 13:37c502ebc543 46 DigitalOut decoder_a(D3);
stefan92 13:37c502ebc543 47 DigitalOut decoder_b(D4);
stefan92 13:37c502ebc543 48 DigitalOut decoder_c(D5);
stefan92 13:37c502ebc543 49 DigitalOut decoder_d(D7);
hudakz 6:7ff95ce72f6d 50
stefan92 13:37c502ebc543 51 AnalogIn brightnes(D6);
stefan92 13:37c502ebc543 52 DigitalIn pageSelect(D12);
stefan92 13:37c502ebc543 53
stefan92 13:37c502ebc543 54
stefan92 13:37c502ebc543 55
hudakz 11:07d927da1a94 56 CAN can(PA_11, PA_12); // CAN Rx pin name, CAN Tx pin name
stefan92 13:37c502ebc543 57
hudakz 11:07d927da1a94 58 CANMessage rxMsg;
hudakz 11:07d927da1a94 59 CANMessage txMsg;
stefan92 13:37c502ebc543 60 //for debuging
stefan92 13:37c502ebc543 61 Serial pc(USBTX, USBRX); // tx, rx
stefan92 13:37c502ebc543 62
stefan92 13:37c502ebc543 63
hudakz 0:c5e5d0df6f2a 64 volatile bool msgAvailable = false;
hudakz 0:c5e5d0df6f2a 65
stefan92 13:37c502ebc543 66 void onMsgReceived()
stefan92 13:37c502ebc543 67 {
hudakz 0:c5e5d0df6f2a 68 msgAvailable = true;
hudakz 0:c5e5d0df6f2a 69 }
hudakz 0:c5e5d0df6f2a 70
stefan92 13:37c502ebc543 71 int main()
stefan92 13:37c502ebc543 72 {
stefan92 13:37c502ebc543 73 pc.baud(230400);
stefan92 13:37c502ebc543 74 pc.printf("Ready\n");
stefan92 13:37c502ebc543 75
stefan92 13:37c502ebc543 76 pageSelect.mode(PullUp); //button is an GND switch
stefan92 13:37c502ebc543 77 bool pageSelectOld = false; //because if button pressed since beginn
stefan92 13:37c502ebc543 78
stefan92 13:37c502ebc543 79 //Init Display
stefan92 13:37c502ebc543 80 initSpi();
stefan92 13:37c502ebc543 81 initDisplay();
stefan92 13:37c502ebc543 82
stefan92 13:37c502ebc543 83 backl_red = 1;
stefan92 13:37c502ebc543 84 backl_yellow = 0;
stefan92 13:37c502ebc543 85
stefan92 13:37c502ebc543 86 mil_ubatt = 0;
stefan92 13:37c502ebc543 87 mil_tmot = 0;
stefan92 13:37c502ebc543 88 mil_toil = 0;
stefan92 13:37c502ebc543 89 mil_poil = 0;
stefan92 13:37c502ebc543 90
stefan92 13:37c502ebc543 91 shift = 1;
stefan92 13:37c502ebc543 92
stefan92 13:37c502ebc543 93
stefan92 13:37c502ebc543 94 //init Variable
stefan92 13:37c502ebc543 95 char pageSelectCan = 0;
stefan92 13:37c502ebc543 96 int mappos = 10;
stefan92 13:37c502ebc543 97 int gear = 0;
stefan92 13:37c502ebc543 98 int tmot = 0;
stefan92 13:37c502ebc543 99 int toil = 0;
stefan92 13:37c502ebc543 100 int tfuel = 0;
stefan92 13:37c502ebc543 101 int rev = 0;
stefan92 13:37c502ebc543 102 float poil = 0;
stefan92 13:37c502ebc543 103 float ath = 0;
stefan92 13:37c502ebc543 104 float ubatt = 0;
stefan92 13:37c502ebc543 105 float lam = 0.0;
stefan92 13:37c502ebc543 106
stefan92 13:37c502ebc543 107 char currentPage = 0;
stefan92 13:37c502ebc543 108 int page=0;
stefan92 13:37c502ebc543 109 int windowNr=0;
stefan92 13:37c502ebc543 110 char x = 0;
stefan92 13:37c502ebc543 111
stefan92 13:37c502ebc543 112 Timer printTimer;
stefan92 13:37c502ebc543 113 printTimer.start();
stefan92 13:37c502ebc543 114
stefan92 13:37c502ebc543 115 Timer ledTimer;
stefan92 13:37c502ebc543 116 ledTimer.start();
stefan92 13:37c502ebc543 117 char ledCounter = 0;
stefan92 13:37c502ebc543 118 bool ledStatus = false;
stefan92 13:37c502ebc543 119
stefan92 13:37c502ebc543 120 decoder_a = 0;
stefan92 13:37c502ebc543 121 decoder_b = 0;
stefan92 13:37c502ebc543 122 decoder_c = 0;
stefan92 13:37c502ebc543 123 decoder_d = 0;
stefan92 13:37c502ebc543 124
stefan92 13:37c502ebc543 125
stefan92 13:37c502ebc543 126 can.frequency(1000000); // set bit rate to 1Mbps
stefan92 13:37c502ebc543 127 can.attach(&onMsgReceived);
hudakz 0:c5e5d0df6f2a 128
hudakz 0:c5e5d0df6f2a 129 while(1) {
stefan92 13:37c502ebc543 130 if(msgAvailable) {
stefan92 13:37c502ebc543 131 msgAvailable = false;
stefan92 13:37c502ebc543 132 can.read(rxMsg);
stefan92 13:37c502ebc543 133 switch(rxMsg.id) {
stefan92 13:37c502ebc543 134 case 0x100:
stefan92 13:37c502ebc543 135 pageSelectCan = rxMsg.data[2];
stefan92 13:37c502ebc543 136 break;
stefan92 13:37c502ebc543 137 case 0x777:
stefan92 13:37c502ebc543 138 gear = rxMsg.data[0];
stefan92 13:37c502ebc543 139 break;
stefan92 13:37c502ebc543 140 case 0x77A:
stefan92 13:37c502ebc543 141 switch(rxMsg.data[0]) {
stefan92 13:37c502ebc543 142 case 5:
stefan92 13:37c502ebc543 143 tmot = rxMsg.data[4] - 40;
stefan92 13:37c502ebc543 144 break;
stefan92 13:37c502ebc543 145 case 4:
stefan92 13:37c502ebc543 146 tfuel = rxMsg.data[4] - 40;
stefan92 13:37c502ebc543 147 toil = rxMsg.data[5] - 40;
stefan92 13:37c502ebc543 148 break;
stefan92 13:37c502ebc543 149 case 1:
stefan92 13:37c502ebc543 150 poil = rxMsg.data[5] * 0.0514;
stefan92 13:37c502ebc543 151 break;
stefan92 13:37c502ebc543 152 case 2:
stefan92 13:37c502ebc543 153 mappos = rxMsg.data[6];
stefan92 13:37c502ebc543 154 break;
stefan92 13:37c502ebc543 155 }
stefan92 13:37c502ebc543 156 break;
stefan92 13:37c502ebc543 157 case 0x779:
stefan92 13:37c502ebc543 158 ubatt = rxMsg.data[6] * 0.07041875;
stefan92 13:37c502ebc543 159 break;
stefan92 13:37c502ebc543 160 case 0x773:
stefan92 13:37c502ebc543 161 ath = rxMsg.data[5] * 0.390625;
stefan92 13:37c502ebc543 162 rev = (rxMsg.data[3] * 256 + rxMsg.data[4]) / 2;
stefan92 13:37c502ebc543 163 break;
stefan92 13:37c502ebc543 164 case 0x774:
stefan92 13:37c502ebc543 165 lam = rxMsg.data[4] * 0.0078431;
stefan92 13:37c502ebc543 166 break;
stefan92 13:37c502ebc543 167 }
hudakz 0:c5e5d0df6f2a 168 }
stefan92 13:37c502ebc543 169
stefan92 13:37c502ebc543 170 if(pageSelectCan == 0) { //Check if the button is not pressed
stefan92 13:37c502ebc543 171 pageSelectOld = false; //Sets the butten high status also to the pageSelectOld variable
stefan92 13:37c502ebc543 172 }
stefan92 13:37c502ebc543 173 if((pageSelectCan == 1) && (pageSelectOld == false)) { //Check if there is a rising edge
stefan92 13:37c502ebc543 174 pageSelectOld = true; //Set the Old Value also to false(0)
stefan92 13:37c502ebc543 175 if(currentPage >= (1)) { //Check if the current page is the last page, here 1
stefan92 13:37c502ebc543 176 currentPage = 0; //Set to first page
stefan92 13:37c502ebc543 177 } else {
stefan92 13:37c502ebc543 178 currentPage++; //else count one up
stefan92 13:37c502ebc543 179 }
stefan92 13:37c502ebc543 180 }
stefan92 13:37c502ebc543 181 if(ledTimer.read_ms() >= 75) {
stefan92 13:37c502ebc543 182 if(ledCounter >= 2) {
stefan92 13:37c502ebc543 183 ledCounter = 0;
stefan92 13:37c502ebc543 184 ledStatus = true;
stefan92 13:37c502ebc543 185 } else {
stefan92 13:37c502ebc543 186 ledCounter ++;
stefan92 13:37c502ebc543 187 ledStatus = false;
stefan92 13:37c502ebc543 188 }
stefan92 13:37c502ebc543 189 ledTimer.reset();
stefan92 13:37c502ebc543 190 }
stefan92 13:37c502ebc543 191
stefan92 13:37c502ebc543 192
stefan92 13:37c502ebc543 193 if(mappos == 2) {
stefan92 13:37c502ebc543 194 if( (gear == 1 && rev >= 11300) || (gear == 2 && rev >= 10800) || (gear == 3 && rev >= 10800) ) { //Default MAP = Endurance
stefan92 13:37c502ebc543 195 shift = ledStatus;
stefan92 13:37c502ebc543 196 } else {
stefan92 13:37c502ebc543 197 shift = 0;
stefan92 13:37c502ebc543 198 }
stefan92 13:37c502ebc543 199 } else {
stefan92 13:37c502ebc543 200 if( (gear == 1 && rev >= 11300) || (gear == 2 && rev >= 10800) || (gear == 3 && rev >= 10800) ) { //Rest
stefan92 13:37c502ebc543 201 shift = ledStatus;
stefan92 13:37c502ebc543 202 } else {
stefan92 13:37c502ebc543 203 shift = 0;
hudakz 0:c5e5d0df6f2a 204 }
hudakz 0:c5e5d0df6f2a 205 }
stefan92 13:37c502ebc543 206
stefan92 13:37c502ebc543 207 if(poil <= poil_min2) {
stefan92 13:37c502ebc543 208 mil_poil = ledStatus;
stefan92 13:37c502ebc543 209 } else if(poil <= poil_min) {
stefan92 13:37c502ebc543 210 mil_poil = 1;
stefan92 13:37c502ebc543 211 } else {
stefan92 13:37c502ebc543 212 mil_poil = 0;
stefan92 13:37c502ebc543 213 }
stefan92 13:37c502ebc543 214
stefan92 13:37c502ebc543 215 if(toil >= toil_max2) {
stefan92 13:37c502ebc543 216 mil_toil = ledStatus;
stefan92 13:37c502ebc543 217 } else if(toil >= toil_max) {
stefan92 13:37c502ebc543 218 mil_toil = 1;
stefan92 13:37c502ebc543 219 } else {
stefan92 13:37c502ebc543 220 mil_toil = 0;
stefan92 13:37c502ebc543 221 }
stefan92 13:37c502ebc543 222
stefan92 13:37c502ebc543 223 if(tmot >= tmot_max2) {
stefan92 13:37c502ebc543 224 mil_tmot = ledStatus;
stefan92 13:37c502ebc543 225 } else if(tmot >= tmot_max) {
stefan92 13:37c502ebc543 226 mil_tmot = 1;
stefan92 13:37c502ebc543 227 } else {
stefan92 13:37c502ebc543 228 mil_tmot = 0;
stefan92 13:37c502ebc543 229 }
stefan92 13:37c502ebc543 230
stefan92 13:37c502ebc543 231 if(ubatt <= ubatt_min2) {
stefan92 13:37c502ebc543 232 mil_ubatt = ledStatus;
stefan92 13:37c502ebc543 233 } else if(ubatt <= ubatt_min) {
stefan92 13:37c502ebc543 234 mil_ubatt = 1;
stefan92 13:37c502ebc543 235 } else {
stefan92 13:37c502ebc543 236 mil_ubatt = 0;
stefan92 13:37c502ebc543 237 }
stefan92 13:37c502ebc543 238 if(100 > printTimer.read_ms() >= 30) {
stefan92 13:37c502ebc543 239 decoder_a = 0;
stefan92 13:37c502ebc543 240 decoder_b = 0;
stefan92 13:37c502ebc543 241 decoder_c = 0;
stefan92 13:37c502ebc543 242 decoder_d = 0;
stefan92 13:37c502ebc543 243 }
stefan92 13:37c502ebc543 244 if(printTimer.read_ms() >= 100) {
stefan92 13:37c502ebc543 245 if(rev >= 14500) {
stefan92 13:37c502ebc543 246 decoder_a = 0;
stefan92 13:37c502ebc543 247 decoder_b = 1;
stefan92 13:37c502ebc543 248 decoder_c = 1;
stefan92 13:37c502ebc543 249 decoder_d = 1;
stefan92 13:37c502ebc543 250 } else if(rev >= 13500) {
stefan92 13:37c502ebc543 251 decoder_a = 1;
stefan92 13:37c502ebc543 252 decoder_b = 0;
stefan92 13:37c502ebc543 253 decoder_c = 1;
stefan92 13:37c502ebc543 254 decoder_d = 1;
stefan92 13:37c502ebc543 255 } else if(rev >= 12500) {
stefan92 13:37c502ebc543 256 decoder_a = 0;
stefan92 13:37c502ebc543 257 decoder_b = 0;
stefan92 13:37c502ebc543 258 decoder_c = 1;
stefan92 13:37c502ebc543 259 decoder_d = 1;
stefan92 13:37c502ebc543 260 } else if(rev >= 11500) {
stefan92 13:37c502ebc543 261 decoder_a = 1;
stefan92 13:37c502ebc543 262 decoder_b = 1;
stefan92 13:37c502ebc543 263 decoder_c = 0;
stefan92 13:37c502ebc543 264 decoder_d = 1;
stefan92 13:37c502ebc543 265 } else if(rev >= 10500) {
stefan92 13:37c502ebc543 266 decoder_a = 0;
stefan92 13:37c502ebc543 267 decoder_b = 1;
stefan92 13:37c502ebc543 268 decoder_c = 0;
stefan92 13:37c502ebc543 269 decoder_d = 1;
stefan92 13:37c502ebc543 270 } else if(rev >= 9500) {
stefan92 13:37c502ebc543 271 decoder_a = 1;
stefan92 13:37c502ebc543 272 decoder_b = 0;
stefan92 13:37c502ebc543 273 decoder_c = 0;
stefan92 13:37c502ebc543 274 decoder_d = 1;
stefan92 13:37c502ebc543 275 } else if(rev >= 8500) {
stefan92 13:37c502ebc543 276 decoder_a = 0;
stefan92 13:37c502ebc543 277 decoder_b = 0;
stefan92 13:37c502ebc543 278 decoder_c = 0;
stefan92 13:37c502ebc543 279 decoder_d = 1;
stefan92 13:37c502ebc543 280 } else if(rev >= 7500) {
stefan92 13:37c502ebc543 281 decoder_a = 1;
stefan92 13:37c502ebc543 282 decoder_b = 1;
stefan92 13:37c502ebc543 283 decoder_c = 1;
stefan92 13:37c502ebc543 284 decoder_d = 0;
stefan92 13:37c502ebc543 285 } else if(rev >= 6500) {
stefan92 13:37c502ebc543 286 decoder_a = 0;
stefan92 13:37c502ebc543 287 decoder_b = 1;
stefan92 13:37c502ebc543 288 decoder_c = 1;
stefan92 13:37c502ebc543 289 decoder_d = 0;
stefan92 13:37c502ebc543 290 } else if(rev >= 5500) {
stefan92 13:37c502ebc543 291 decoder_a = 1;
stefan92 13:37c502ebc543 292 decoder_b = 0;
stefan92 13:37c502ebc543 293 decoder_c = 1;
stefan92 13:37c502ebc543 294 decoder_d = 0;
stefan92 13:37c502ebc543 295 } else if(rev >= 4500) {
stefan92 13:37c502ebc543 296 decoder_a = 0;
stefan92 13:37c502ebc543 297 decoder_b = 0;
stefan92 13:37c502ebc543 298 decoder_c = 1;
stefan92 13:37c502ebc543 299 decoder_d = 0;
stefan92 13:37c502ebc543 300 } else if(rev >= 3500) {
stefan92 13:37c502ebc543 301 decoder_a = 1;
stefan92 13:37c502ebc543 302 decoder_b = 1;
stefan92 13:37c502ebc543 303 decoder_c = 0;
stefan92 13:37c502ebc543 304 decoder_d = 0;
stefan92 13:37c502ebc543 305 } else if(rev >= 2500) {
stefan92 13:37c502ebc543 306 decoder_a = 0;
stefan92 13:37c502ebc543 307 decoder_b = 1;
stefan92 13:37c502ebc543 308 decoder_c = 0;
stefan92 13:37c502ebc543 309 decoder_d = 0;
stefan92 13:37c502ebc543 310 } else if(rev >= 1500) {
stefan92 13:37c502ebc543 311 decoder_a = 1;
stefan92 13:37c502ebc543 312 decoder_b = 0;
stefan92 13:37c502ebc543 313 decoder_c = 0;
stefan92 13:37c502ebc543 314 decoder_d = 0;
stefan92 13:37c502ebc543 315 } else {
stefan92 13:37c502ebc543 316 decoder_a = 0;
stefan92 13:37c502ebc543 317 decoder_b = 0;
stefan92 13:37c502ebc543 318 decoder_c = 0;
stefan92 13:37c502ebc543 319 decoder_d = 0;
stefan92 13:37c502ebc543 320 }
stefan92 13:37c502ebc543 321 printGear(gear);
stefan92 13:37c502ebc543 322 switch(currentPage) {
stefan92 13:37c502ebc543 323 case 0:
stefan92 13:37c502ebc543 324 printIntValue( 1, "TOIL,", toil, 0, 130);
stefan92 13:37c502ebc543 325 printFloatValue( 2, "POIL,", poil , 0, 10);
stefan92 13:37c502ebc543 326 printIntValue( 3, "TMOT,", tmot, 0, 95);
stefan92 13:37c502ebc543 327
stefan92 13:37c502ebc543 328 printFloatValue( 4, "UBATT", ubatt , 11, 17);
stefan92 13:37c502ebc543 329 break;
stefan92 13:37c502ebc543 330 case 1:
stefan92 13:37c502ebc543 331 printIntValue( 1, "RV,,,", rev, 0, 15000);
stefan92 13:37c502ebc543 332 printIntValue( 2, "TFUEL", tfuel, 0, 40);
stefan92 13:37c502ebc543 333 printFloatValue( 3, "ATH,,", ath , 0, 101);
stefan92 13:37c502ebc543 334 printFloatValue( 4, "LAM,,", lam , 0, 10);
stefan92 13:37c502ebc543 335 break;
stefan92 13:37c502ebc543 336 }
stefan92 13:37c502ebc543 337
stefan92 13:37c502ebc543 338
stefan92 13:37c502ebc543 339 printTimer.reset();
stefan92 13:37c502ebc543 340 }
stefan92 13:37c502ebc543 341
hudakz 0:c5e5d0df6f2a 342 }
stefan92 13:37c502ebc543 343
hudakz 0:c5e5d0df6f2a 344 }
hudakz 7:2dce8ed51091 345