can't push chnages :(

Fork of FBRDash by Michael Allan

Committer:
intrinseca
Date:
Mon Jun 25 21:20:22 2012 +0000
Revision:
2:825f572902c6
Parent:
1:b3907b8d9f65
Child:
3:cb334e1d31c6
Add comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
intrinseca 0:1f422ed56e0f 1 #include "mbed.h"
intrinseca 0:1f422ed56e0f 2 #include "TextLCD.h"
intrinseca 1:b3907b8d9f65 3 #include "PinDetect.h"
intrinseca 1:b3907b8d9f65 4 #include "Menu.h"
intrinseca 1:b3907b8d9f65 5 #include "Comms.h"
intrinseca 1:b3907b8d9f65 6 #include "PCComms.h"
intrinseca 1:b3907b8d9f65 7 #include "Gears.h"
intrinseca 1:b3907b8d9f65 8 #include "LEDS.h"
intrinseca 1:b3907b8d9f65 9 #include "bigchar.h"
intrinseca 0:1f422ed56e0f 10
intrinseca 2:825f572902c6 11 //Refresh interval for LCD
intrinseca 1:b3907b8d9f65 12 #define LCD_REFRESH_TIME 150000
intrinseca 2:825f572902c6 13
intrinseca 2:825f572902c6 14 //Refresh interval for rev LEDs
intrinseca 1:b3907b8d9f65 15 #define REV_REFRESH_TIME 50000
intrinseca 1:b3907b8d9f65 16
intrinseca 2:825f572902c6 17 //Warning lights
intrinseca 1:b3907b8d9f65 18 DigitalOut warn[] = { (p20), (p19), (p27), (p18) };
intrinseca 2:825f572902c6 19
intrinseca 2:825f572902c6 20 //mBED LEDs
intrinseca 1:b3907b8d9f65 21 DigitalOut debug[] = { (LED1), (LED2), (LED3) };
intrinseca 0:1f422ed56e0f 22
intrinseca 2:825f572902c6 23 //Heartbeat LED
intrinseca 1:b3907b8d9f65 24 DigitalOut heartbeat(LED4);
intrinseca 1:b3907b8d9f65 25
intrinseca 2:825f572902c6 26 //Rev LEDS
intrinseca 1:b3907b8d9f65 27 PwmOut leds[] = { (p24), (p25), (p26), (p23), (p22), (p21) };
intrinseca 1:b3907b8d9f65 28
intrinseca 2:825f572902c6 29 //LCD
intrinseca 1:b3907b8d9f65 30 TextLCD lcd(p5, p6, p7, p8, p9, p10, p11);
intrinseca 0:1f422ed56e0f 31
intrinseca 2:825f572902c6 32 //Tickers for refreshing
intrinseca 1:b3907b8d9f65 33 Ticker lcdRefreshTicker;
intrinseca 1:b3907b8d9f65 34 Ticker revRefreshTicker;
intrinseca 2:825f572902c6 35
intrinseca 2:825f572902c6 36 //Used to animate LEDs for testing
intrinseca 1:b3907b8d9f65 37 Ticker increment;
intrinseca 1:b3907b8d9f65 38
intrinseca 2:825f572902c6 39 //Main car state structure
intrinseca 1:b3907b8d9f65 40 State car;
intrinseca 0:1f422ed56e0f 41
intrinseca 2:825f572902c6 42 //Classes for various parts of the firmware
intrinseca 1:b3907b8d9f65 43 Menu dashMenu(&lcd, p13, p14, p15); //*LCD, OK, Left, Right
intrinseca 1:b3907b8d9f65 44 PCComms pc(&car);
intrinseca 1:b3907b8d9f65 45 Gears gearButtons(p17, p16, p12, &car.gear, &pc); //Up, Neutral, Down, *Current Gear
intrinseca 1:b3907b8d9f65 46 LEDS revs(leds);
intrinseca 0:1f422ed56e0f 47
intrinseca 2:825f572902c6 48 //Refresh the rev LEDs and warning LEDs
intrinseca 1:b3907b8d9f65 49 void revRefresh()
intrinseca 0:1f422ed56e0f 50 {
intrinseca 1:b3907b8d9f65 51 revs.refresh(car.rpm);
intrinseca 1:b3907b8d9f65 52
intrinseca 1:b3907b8d9f65 53 for(int i = 0; i < 4; i++)
intrinseca 1:b3907b8d9f65 54 {
intrinseca 1:b3907b8d9f65 55 warn[i] = car.warnings & (1 << i);
intrinseca 1:b3907b8d9f65 56 }
intrinseca 0:1f422ed56e0f 57 }
intrinseca 0:1f422ed56e0f 58
intrinseca 2:825f572902c6 59 //Refresh the LCD
intrinseca 1:b3907b8d9f65 60 void lcdRefresh()
intrinseca 0:1f422ed56e0f 61 {
intrinseca 2:825f572902c6 62 //If menu off screen, display HUD
intrinseca 1:b3907b8d9f65 63 if(dashMenu.display == false)
intrinseca 1:b3907b8d9f65 64 {
intrinseca 1:b3907b8d9f65 65 lcd.locate(0, 0);
intrinseca 1:b3907b8d9f65 66 lcd.printf("R:%-11.0d", car.rpm);
intrinseca 1:b3907b8d9f65 67 lcd.locate(0, 1);
intrinseca 1:b3907b8d9f65 68 lcd.printf("S:%-3d T:%-5.0f", car.speed, car.coolant_temp);
intrinseca 1:b3907b8d9f65 69
intrinseca 1:b3907b8d9f65 70 write_bigchar(&lcd, 13, car.gear);
intrinseca 1:b3907b8d9f65 71 }
intrinseca 2:825f572902c6 72 //Otherwise show menu
intrinseca 1:b3907b8d9f65 73 else
intrinseca 1:b3907b8d9f65 74 {
intrinseca 1:b3907b8d9f65 75 dashMenu.refresh();
intrinseca 1:b3907b8d9f65 76 }
intrinseca 1:b3907b8d9f65 77
intrinseca 2:825f572902c6 78 //Blink heartbeat
intrinseca 1:b3907b8d9f65 79 heartbeat = !heartbeat;
intrinseca 0:1f422ed56e0f 80 }
intrinseca 0:1f422ed56e0f 81
intrinseca 2:825f572902c6 82
intrinseca 2:825f572902c6 83 //Used to animate LEDs for testing
intrinseca 1:b3907b8d9f65 84 /*void doIncrement()
intrinseca 1:b3907b8d9f65 85 {
intrinseca 1:b3907b8d9f65 86 if(car.rpm < LIMIT && car.gear > 0)
intrinseca 1:b3907b8d9f65 87 car.rpm++;
intrinseca 1:b3907b8d9f65 88 }*/
intrinseca 0:1f422ed56e0f 89
intrinseca 2:825f572902c6 90 //Startup animation
intrinseca 1:b3907b8d9f65 91 void selfTest()
intrinseca 1:b3907b8d9f65 92 {
intrinseca 1:b3907b8d9f65 93 lcd.printf(" FBR 2012");
intrinseca 0:1f422ed56e0f 94
intrinseca 2:825f572902c6 95 //Light up LEDs
intrinseca 2:825f572902c6 96 for(int i = 0; i < LEDS::NUM_LEDS; i++)
intrinseca 1:b3907b8d9f65 97 {
intrinseca 1:b3907b8d9f65 98 leds[i] = true;
intrinseca 1:b3907b8d9f65 99 if(i < 4)
intrinseca 1:b3907b8d9f65 100 warn[i] = true;
intrinseca 1:b3907b8d9f65 101 wait(0.04);
intrinseca 1:b3907b8d9f65 102 }
intrinseca 0:1f422ed56e0f 103
intrinseca 2:825f572902c6 104 //Turn off LEDs
intrinseca 1:b3907b8d9f65 105 for(int i = LEDS::NUM_LEDS - 1; i >= 0; i--)
intrinseca 1:b3907b8d9f65 106 {
intrinseca 1:b3907b8d9f65 107 leds[i] = false;
intrinseca 1:b3907b8d9f65 108 if(i < 4)
intrinseca 1:b3907b8d9f65 109 warn[i] = false;
intrinseca 1:b3907b8d9f65 110 wait(0.04);
intrinseca 1:b3907b8d9f65 111 }
intrinseca 0:1f422ed56e0f 112
intrinseca 1:b3907b8d9f65 113 lcd.cls();
intrinseca 1:b3907b8d9f65 114 }
intrinseca 1:b3907b8d9f65 115
intrinseca 1:b3907b8d9f65 116 int main()
intrinseca 2:825f572902c6 117 {
intrinseca 2:825f572902c6 118 //Initialise state
intrinseca 1:b3907b8d9f65 119 car.rpm = 5000;
intrinseca 1:b3907b8d9f65 120 car.gear = 0;
intrinseca 1:b3907b8d9f65 121 car.speed = 150;
intrinseca 2:825f572902c6 122 car.coolant_temp = 21.5;
intrinseca 1:b3907b8d9f65 123 car.throttle_pos = 1;
intrinseca 1:b3907b8d9f65 124 car.manifold_pres = 2;
intrinseca 1:b3907b8d9f65 125 car.air_temp = 3;
intrinseca 1:b3907b8d9f65 126 car.lambda = 5;
intrinseca 1:b3907b8d9f65 127 car.accel_x = 7;
intrinseca 1:b3907b8d9f65 128 car.accel_y = 8;
intrinseca 1:b3907b8d9f65 129 car.oil_temp = 10;
intrinseca 1:b3907b8d9f65 130 car.oil_pres = 11;
intrinseca 1:b3907b8d9f65 131 car.warnings = 12;
intrinseca 1:b3907b8d9f65 132
intrinseca 2:825f572902c6 133 //Set up menu
intrinseca 1:b3907b8d9f65 134 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.
intrinseca 1:b3907b8d9f65 135 dashMenu.addItem<unsigned char>("Air Temp ", "%12d\xDF\x43", &car.air_temp);
intrinseca 1:b3907b8d9f65 136 dashMenu.addItem<unsigned char>("Throttle Pos ", "%13d\xDF", &car.throttle_pos);
intrinseca 1:b3907b8d9f65 137 dashMenu.addItem<unsigned char>("Manifold Pres ", "%10d psi", &car.manifold_pres);
intrinseca 2:825f572902c6 138 dashMenu.addItem<unsigned char>("Lambda ", "%14d", &car.lambda);
intrinseca 1:b3907b8d9f65 139 dashMenu.addItem<unsigned char>("Oil Temp ", "%12d\xDF\x43", &car.oil_temp);
intrinseca 1:b3907b8d9f65 140 dashMenu.addItem<unsigned char>("Oil Pressure ", "%10d psi", &car.oil_pres);
intrinseca 1:b3907b8d9f65 141
intrinseca 2:825f572902c6 142 //Set up characters on LCS
intrinseca 1:b3907b8d9f65 143 setup_bigchar(&lcd);
intrinseca 2:825f572902c6 144
intrinseca 2:825f572902c6 145 //Do bootup animation
intrinseca 1:b3907b8d9f65 146 selfTest();
intrinseca 1:b3907b8d9f65 147
intrinseca 2:825f572902c6 148 //Start refresh tickers
intrinseca 1:b3907b8d9f65 149 lcdRefreshTicker.attach_us(&lcdRefresh, LCD_REFRESH_TIME);
intrinseca 1:b3907b8d9f65 150 revRefreshTicker.attach_us(&revRefresh, REV_REFRESH_TIME);
intrinseca 1:b3907b8d9f65 151 //increment.attach(&doIncrement, 0.0005);
intrinseca 1:b3907b8d9f65 152
intrinseca 2:825f572902c6 153 //Infinite loop - program is interrupt driven
intrinseca 1:b3907b8d9f65 154 while(true)
intrinseca 1:b3907b8d9f65 155 {
intrinseca 1:b3907b8d9f65 156 __WFI();
intrinseca 0:1f422ed56e0f 157 }
intrinseca 1:b3907b8d9f65 158 }