pub
Dependencies: CANnucleo mbed-dev
Fork of CANnucleo_Hello by
main.cpp
- Committer:
- stefan92
- Date:
- 2018-03-13
- Revision:
- 13:37c502ebc543
- Parent:
- 12:e91e44924194
File content as of revision 13:37c502ebc543:
#include "mbed.h" #include "CANnucleo.h" #include "myCan.hpp" #include "lcd.hpp" #include "printGear.hpp" #include "printIntValue.hpp" #include "printFloatValue.hpp" #include "displaySettings.hpp" //Temperatur definitionen #define tmot_max 95 #define toil_max 150 #define tfuel_max 40 #define poil_min 1.0 #define ubatt_min 14 #define tmot_max2 105 #define toil_max2 155 #define tfuel_max2 50 #define poil_min2 0.8 #define ubatt_min2 13.2 #define TARGET_NUCLEO_F303K8 1 #define LED_PIN LED1 const int OFF = 0; const int ON = 1; const unsigned int TX_ID = 0x7AA; //Ein- und Ausgänge DigitalOut mil_ubatt(A0); DigitalOut mil_tmot(D13); DigitalOut mil_toil(D1); DigitalOut mil_poil(D0); DigitalOut shift(D8); DigitalOut backl_red(D9); DigitalOut backl_yellow(D11); DigitalOut decoder_a(D3); DigitalOut decoder_b(D4); DigitalOut decoder_c(D5); DigitalOut decoder_d(D7); AnalogIn brightnes(D6); DigitalIn pageSelect(D12); CAN can(PA_11, PA_12); // CAN Rx pin name, CAN Tx pin name CANMessage rxMsg; CANMessage txMsg; //for debuging Serial pc(USBTX, USBRX); // tx, rx volatile bool msgAvailable = false; void onMsgReceived() { msgAvailable = true; } int main() { pc.baud(230400); pc.printf("Ready\n"); pageSelect.mode(PullUp); //button is an GND switch bool pageSelectOld = false; //because if button pressed since beginn //Init Display initSpi(); initDisplay(); backl_red = 1; backl_yellow = 0; mil_ubatt = 0; mil_tmot = 0; mil_toil = 0; mil_poil = 0; shift = 1; //init Variable char pageSelectCan = 0; int mappos = 10; int gear = 0; int tmot = 0; int toil = 0; int tfuel = 0; int rev = 0; float poil = 0; float ath = 0; float ubatt = 0; float lam = 0.0; char currentPage = 0; int page=0; int windowNr=0; char x = 0; Timer printTimer; printTimer.start(); Timer ledTimer; ledTimer.start(); char ledCounter = 0; bool ledStatus = false; decoder_a = 0; decoder_b = 0; decoder_c = 0; decoder_d = 0; can.frequency(1000000); // set bit rate to 1Mbps can.attach(&onMsgReceived); while(1) { if(msgAvailable) { msgAvailable = false; can.read(rxMsg); switch(rxMsg.id) { case 0x100: pageSelectCan = rxMsg.data[2]; break; case 0x777: gear = rxMsg.data[0]; break; case 0x77A: switch(rxMsg.data[0]) { case 5: tmot = rxMsg.data[4] - 40; break; case 4: tfuel = rxMsg.data[4] - 40; toil = rxMsg.data[5] - 40; break; case 1: poil = rxMsg.data[5] * 0.0514; break; case 2: mappos = rxMsg.data[6]; break; } break; case 0x779: ubatt = rxMsg.data[6] * 0.07041875; break; case 0x773: ath = rxMsg.data[5] * 0.390625; rev = (rxMsg.data[3] * 256 + rxMsg.data[4]) / 2; break; case 0x774: lam = rxMsg.data[4] * 0.0078431; break; } } if(pageSelectCan == 0) { //Check if the button is not pressed pageSelectOld = false; //Sets the butten high status also to the pageSelectOld variable } if((pageSelectCan == 1) && (pageSelectOld == false)) { //Check if there is a rising edge pageSelectOld = true; //Set the Old Value also to false(0) if(currentPage >= (1)) { //Check if the current page is the last page, here 1 currentPage = 0; //Set to first page } else { currentPage++; //else count one up } } if(ledTimer.read_ms() >= 75) { if(ledCounter >= 2) { ledCounter = 0; ledStatus = true; } else { ledCounter ++; ledStatus = false; } ledTimer.reset(); } if(mappos == 2) { if( (gear == 1 && rev >= 11300) || (gear == 2 && rev >= 10800) || (gear == 3 && rev >= 10800) ) { //Default MAP = Endurance shift = ledStatus; } else { shift = 0; } } else { if( (gear == 1 && rev >= 11300) || (gear == 2 && rev >= 10800) || (gear == 3 && rev >= 10800) ) { //Rest shift = ledStatus; } else { shift = 0; } } if(poil <= poil_min2) { mil_poil = ledStatus; } else if(poil <= poil_min) { mil_poil = 1; } else { mil_poil = 0; } if(toil >= toil_max2) { mil_toil = ledStatus; } else if(toil >= toil_max) { mil_toil = 1; } else { mil_toil = 0; } if(tmot >= tmot_max2) { mil_tmot = ledStatus; } else if(tmot >= tmot_max) { mil_tmot = 1; } else { mil_tmot = 0; } if(ubatt <= ubatt_min2) { mil_ubatt = ledStatus; } else if(ubatt <= ubatt_min) { mil_ubatt = 1; } else { mil_ubatt = 0; } if(100 > printTimer.read_ms() >= 30) { decoder_a = 0; decoder_b = 0; decoder_c = 0; decoder_d = 0; } if(printTimer.read_ms() >= 100) { if(rev >= 14500) { decoder_a = 0; decoder_b = 1; decoder_c = 1; decoder_d = 1; } else if(rev >= 13500) { decoder_a = 1; decoder_b = 0; decoder_c = 1; decoder_d = 1; } else if(rev >= 12500) { decoder_a = 0; decoder_b = 0; decoder_c = 1; decoder_d = 1; } else if(rev >= 11500) { decoder_a = 1; decoder_b = 1; decoder_c = 0; decoder_d = 1; } else if(rev >= 10500) { decoder_a = 0; decoder_b = 1; decoder_c = 0; decoder_d = 1; } else if(rev >= 9500) { decoder_a = 1; decoder_b = 0; decoder_c = 0; decoder_d = 1; } else if(rev >= 8500) { decoder_a = 0; decoder_b = 0; decoder_c = 0; decoder_d = 1; } else if(rev >= 7500) { decoder_a = 1; decoder_b = 1; decoder_c = 1; decoder_d = 0; } else if(rev >= 6500) { decoder_a = 0; decoder_b = 1; decoder_c = 1; decoder_d = 0; } else if(rev >= 5500) { decoder_a = 1; decoder_b = 0; decoder_c = 1; decoder_d = 0; } else if(rev >= 4500) { decoder_a = 0; decoder_b = 0; decoder_c = 1; decoder_d = 0; } else if(rev >= 3500) { decoder_a = 1; decoder_b = 1; decoder_c = 0; decoder_d = 0; } else if(rev >= 2500) { decoder_a = 0; decoder_b = 1; decoder_c = 0; decoder_d = 0; } else if(rev >= 1500) { decoder_a = 1; decoder_b = 0; decoder_c = 0; decoder_d = 0; } else { decoder_a = 0; decoder_b = 0; decoder_c = 0; decoder_d = 0; } printGear(gear); switch(currentPage) { case 0: printIntValue( 1, "TOIL,", toil, 0, 130); printFloatValue( 2, "POIL,", poil , 0, 10); printIntValue( 3, "TMOT,", tmot, 0, 95); printFloatValue( 4, "UBATT", ubatt , 11, 17); break; case 1: printIntValue( 1, "RV,,,", rev, 0, 15000); printIntValue( 2, "TFUEL", tfuel, 0, 40); printFloatValue( 3, "ATH,,", ath , 0, 101); printFloatValue( 4, "LAM,,", lam , 0, 10); break; } printTimer.reset(); } } }