Dashboard firmware for FBR2012

Dependencies:   mbed TextLCD PinDetect

Revision:
6:11b2bbbe14b2
Parent:
5:177520d43c87
Child:
7:78cb2263290a
--- a/main.cpp	Sun Oct 14 21:09:49 2012 +0000
+++ b/main.cpp	Wed Oct 17 16:08:51 2012 +0000
@@ -4,6 +4,7 @@
 #include "Menu.h"
 #include "Comms.h"
 #include "PCComms.h"
+#include "CANComms.h"
 #include "Gears.h"
 #include "LEDS.h"
 #include "bigchar.h"
@@ -39,76 +40,52 @@
 //Main car state structure
 State car;
 
-//Initialise CAN
-CAN can(p30, p29);
-
 //Classes for various parts of the firmware
 Menu dashMenu(&lcd, p16, p17, p12); //*LCD, OK, Left, Right
 PCComms pc(&car);
+CANComms *can;
 Gears gearButtons(p14, p13, p15, &car.gear, &pc); //Up, Neutral, Down, *Current Gear
 LEDS revs(leds);
 
 //Refresh the rev LEDs and warning LEDs
 void revRefresh()
 {
-    CANMessage msg;
     revs.refresh(car.rpm);
-    
-    if(car.voltage<12){
+
+    if(car.voltage < 12) {
         warn[0]=1;
-    }else{
+    } else {
         warn[0]=0;
     }
-    if(car.coolant_temp>110){
+    if(car.coolant_temp>110) {
         warn[1]=1;
-    }else{
+    } else {
         warn[1]=0;
     }
-    if(car.rpm==0 and car.gear!=0){
+    if(car.rpm==0 and car.gear!=0) {
         warn[2]=1;
-    }else{
+    } else {
         warn[2]=0;
     }
-    if(can.read(msg)) {
-        if(msg.id==100 and msg.len==8){
-            car.rpm = msg.data[0] + (msg.data[1] << 8);
-            car.throttle_pos = msg.data[2];
-            car.manifold_pres = msg.data[3];
-            car.air_temp = msg.data[4];
-            car.coolant_temp = msg.data[5];
-            car.lambda = msg.data[6];
-        }
-        else if(msg.id==200 and msg.len==8){
-            car.speed = msg.data[0];
-            car.accel_x = msg.data[1];
-            car.accel_y = msg.data[2];
-            car.gear = msg.data[3];
-            car.oil_temp = msg.data[4];
-            car.voltage = msg.data[5]/16.0;
-        } 
-    }
-
 }
 
 //Refresh the LCD
 void lcdRefresh()
 {
     //If menu off screen, display HUD
-    if(dashMenu.display == false)
-    {
+    if(dashMenu.display == false) {
         lcd.locate(0, 0);
-        lcd.printf("%3.0fC%5.1dRPM", car.coolant_temp, car.rpm);
+        lcd.printf("R:%-5.1d S:%-3d", car.rpm, car.speed);
         lcd.locate(0, 1);
-        lcd.printf("%2dMPH %3.1fV", car.speed, car.voltage);
-        
+        lcd.printf("%-4.1fV %-4.1f\xDF\x43", car.voltage, car.coolant_temp);
+
         write_bigchar(&lcd, 13, car.gear);
     }
     //Otherwise show menu
-    else
-    {
+    else {
         dashMenu.refresh();
-    }    
-    
+    }
+
     //Blink heartbeat
     heartbeat = !heartbeat;
 }
@@ -127,57 +104,36 @@
     lcd.printf("    FBR 2012");
     lcd.locate(0,1);
     lcd.printf(" Ready to drive");
-    int offset = 0;
-    int type=1;
-    int blk=7;
-    int from=1;
-    int to=0;
-    int id = offset*262144+type*32768+from*2048+to*128+blk*8;
-    CANMessage msg;
-    msg = CANMessage(id,0,8,CANData,CANExtended);
-    lcd.cls();
-    lcd.printf("%x",id);
-    can.reset();
-    if(can.write(msg)){
-    wait(0.01);
-    lcd.printf(" %d errors",can.tderror());
-    can.reset();
-    while(can.read(msg)==false){
-    wait(0.1);
-    }
-    wait(0.5);
-    lcd.printf(" %d errors",can.tderror());
-    }
+
     //Light up LEDs
-    for(int i = 0; i < LEDS::NUM_LEDS; i++)
-    {
+    for(int i = 0; i < LEDS::NUM_LEDS; i++) {
         leds[i] = true;
         if(i < 4)
             warn[i] = true;
-        wait(0.2);
+        wait(0.1);
     }
-    
+
     //Turn off LEDs
-    for(int i = LEDS::NUM_LEDS - 1; i >= 0; i--)
-    {
+    for(int i = LEDS::NUM_LEDS - 1; i >= 0; i--) {
         leds[i] = false;
         if(i < 4)
             warn[i] = false;
-        wait(0.2);
+        wait(0.1);
     }
-    
+
     lcd.cls();
 }
 
 int main()
-{   
-    //Initialise CAN
-    can.frequency(500000);
+{
+    printf("\n");
+    printf("FBRDash\n");
+
     //Initialise state
     car.rpm = 0;
     car.gear = 2;
     car.speed = 0;
-    car.coolant_temp = 0;    
+    car.coolant_temp = 0;
     car.throttle_pos = 0;
     car.manifold_pres = 0;
     car.air_temp = 0;
@@ -185,30 +141,31 @@
     car.accel_x = 0;
     car.accel_y = 0;
     car.oil_temp = 0;
-    car.voltage = 0;
+    car.voltage = 10.0;
 
     //Set up menu
     dashMenu.addItem<float>("Coolant Temp  ", "%12.1f\xDF\x43", &car.coolant_temp); // \xDF\x43 -> &#65533;C . Need code for C as otherwise it gets taken as hex digit.
     dashMenu.addItem<unsigned char>("Air Temp      ", "%12d\xDF\x43", &car.air_temp);
-    dashMenu.addItem<unsigned char>("Throttle Pos  ", "%13d\xDF", &car.throttle_pos);
+    dashMenu.addItem<float>("Throttle Pos  ", "%12.1fd\xDF", &car.throttle_pos);
     dashMenu.addItem<unsigned char>("Manifold Pres ", "%10d psi", &car.manifold_pres);
-    dashMenu.addItem<unsigned char>("Lambda        ", "%14d", &car.lambda);    
+    dashMenu.addItem<unsigned char>("Lambda        ", "%14d", &car.lambda);
     dashMenu.addItem<unsigned char>("Oil Temp      ", "%12d\xDF\x43", &car.oil_temp);
-    
+
     //Set up characters on LCS
     setup_bigchar(&lcd);
-    
+
     //Do bootup animation
     selfTest();
-    
+
     //Start refresh tickers
     lcdRefreshTicker.attach_us(&lcdRefresh, LCD_REFRESH_TIME);
     revRefreshTicker.attach_us(&revRefresh, REV_REFRESH_TIME);
     //increment.attach(&doIncrement, 0.0005);
+
+    can = new CANComms(&car);
     
     //Infinite loop - program is interrupt driven
-    while(true)
-    {
+    while(true) {
         __WFI();
     }
 }
\ No newline at end of file