pub

Dependencies:   CANnucleo mbed-dev

Fork of CANnucleo_Hello by Zoltan Hudak

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();
        }

    }

}