Thomas Milburn
/
FBRDash-tom
can't push chnages :(
Fork of FBRDash by
main.cpp@1:b3907b8d9f65, 2012-06-25 (annotated)
- Committer:
- intrinseca
- Date:
- Mon Jun 25 21:01:02 2012 +0000
- Revision:
- 1:b3907b8d9f65
- Parent:
- 0:1f422ed56e0f
- Child:
- 2:825f572902c6
Prototype before adding full CAN comms
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:b3907b8d9f65 | 11 | #define LCD_REFRESH_TIME 150000 |
intrinseca | 1:b3907b8d9f65 | 12 | #define REV_REFRESH_TIME 50000 |
intrinseca | 1:b3907b8d9f65 | 13 | |
intrinseca | 1:b3907b8d9f65 | 14 | DigitalOut warn[] = { (p20), (p19), (p27), (p18) }; |
intrinseca | 1:b3907b8d9f65 | 15 | DigitalOut debug[] = { (LED1), (LED2), (LED3) }; |
intrinseca |
0:1f422ed56e0f | 16 | |
intrinseca | 1:b3907b8d9f65 | 17 | DigitalOut heartbeat(LED4); |
intrinseca | 1:b3907b8d9f65 | 18 | |
intrinseca | 1:b3907b8d9f65 | 19 | PwmOut leds[] = { (p24), (p25), (p26), (p23), (p22), (p21) }; |
intrinseca | 1:b3907b8d9f65 | 20 | |
intrinseca | 1:b3907b8d9f65 | 21 | TextLCD lcd(p5, p6, p7, p8, p9, p10, p11); |
intrinseca |
0:1f422ed56e0f | 22 | |
intrinseca | 1:b3907b8d9f65 | 23 | Ticker lcdRefreshTicker; |
intrinseca | 1:b3907b8d9f65 | 24 | Ticker revRefreshTicker; |
intrinseca | 1:b3907b8d9f65 | 25 | Ticker increment; |
intrinseca | 1:b3907b8d9f65 | 26 | |
intrinseca | 1:b3907b8d9f65 | 27 | State car; |
intrinseca |
0:1f422ed56e0f | 28 | |
intrinseca | 1:b3907b8d9f65 | 29 | Menu dashMenu(&lcd, p13, p14, p15); //*LCD, OK, Left, Right |
intrinseca | 1:b3907b8d9f65 | 30 | PCComms pc(&car); |
intrinseca | 1:b3907b8d9f65 | 31 | Gears gearButtons(p17, p16, p12, &car.gear, &pc); //Up, Neutral, Down, *Current Gear |
intrinseca | 1:b3907b8d9f65 | 32 | LEDS revs(leds); |
intrinseca |
0:1f422ed56e0f | 33 | |
intrinseca | 1:b3907b8d9f65 | 34 | void revRefresh() |
intrinseca |
0:1f422ed56e0f | 35 | { |
intrinseca | 1:b3907b8d9f65 | 36 | revs.refresh(car.rpm); |
intrinseca | 1:b3907b8d9f65 | 37 | |
intrinseca | 1:b3907b8d9f65 | 38 | for(int i = 0; i < 4; i++) |
intrinseca | 1:b3907b8d9f65 | 39 | { |
intrinseca | 1:b3907b8d9f65 | 40 | warn[i] = car.warnings & (1 << i); |
intrinseca | 1:b3907b8d9f65 | 41 | } |
intrinseca |
0:1f422ed56e0f | 42 | } |
intrinseca |
0:1f422ed56e0f | 43 | |
intrinseca | 1:b3907b8d9f65 | 44 | void lcdRefresh() |
intrinseca |
0:1f422ed56e0f | 45 | { |
intrinseca | 1:b3907b8d9f65 | 46 | if(dashMenu.display == false) |
intrinseca | 1:b3907b8d9f65 | 47 | { |
intrinseca | 1:b3907b8d9f65 | 48 | lcd.locate(0, 0); |
intrinseca | 1:b3907b8d9f65 | 49 | lcd.printf("R:%-11.0d", car.rpm); |
intrinseca | 1:b3907b8d9f65 | 50 | lcd.locate(0, 1); |
intrinseca | 1:b3907b8d9f65 | 51 | lcd.printf("S:%-3d T:%-5.0f", car.speed, car.coolant_temp); |
intrinseca | 1:b3907b8d9f65 | 52 | |
intrinseca | 1:b3907b8d9f65 | 53 | write_bigchar(&lcd, 13, car.gear); |
intrinseca | 1:b3907b8d9f65 | 54 | } |
intrinseca | 1:b3907b8d9f65 | 55 | else |
intrinseca | 1:b3907b8d9f65 | 56 | { |
intrinseca | 1:b3907b8d9f65 | 57 | dashMenu.refresh(); |
intrinseca | 1:b3907b8d9f65 | 58 | } |
intrinseca | 1:b3907b8d9f65 | 59 | |
intrinseca | 1:b3907b8d9f65 | 60 | heartbeat = !heartbeat; |
intrinseca |
0:1f422ed56e0f | 61 | } |
intrinseca |
0:1f422ed56e0f | 62 | |
intrinseca | 1:b3907b8d9f65 | 63 | /*void doIncrement() |
intrinseca | 1:b3907b8d9f65 | 64 | { |
intrinseca | 1:b3907b8d9f65 | 65 | if(car.rpm < LIMIT && car.gear > 0) |
intrinseca | 1:b3907b8d9f65 | 66 | car.rpm++; |
intrinseca | 1:b3907b8d9f65 | 67 | }*/ |
intrinseca |
0:1f422ed56e0f | 68 | |
intrinseca | 1:b3907b8d9f65 | 69 | void selfTest() |
intrinseca | 1:b3907b8d9f65 | 70 | { |
intrinseca | 1:b3907b8d9f65 | 71 | lcd.printf(" FBR 2012"); |
intrinseca |
0:1f422ed56e0f | 72 | |
intrinseca | 1:b3907b8d9f65 | 73 | for(int i = 0; i < LEDS::NUM_LEDS; i++) |
intrinseca | 1:b3907b8d9f65 | 74 | { |
intrinseca | 1:b3907b8d9f65 | 75 | leds[i] = true; |
intrinseca | 1:b3907b8d9f65 | 76 | if(i < 4) |
intrinseca | 1:b3907b8d9f65 | 77 | warn[i] = true; |
intrinseca | 1:b3907b8d9f65 | 78 | wait(0.04); |
intrinseca | 1:b3907b8d9f65 | 79 | } |
intrinseca |
0:1f422ed56e0f | 80 | |
intrinseca | 1:b3907b8d9f65 | 81 | for(int i = LEDS::NUM_LEDS - 1; i >= 0; i--) |
intrinseca | 1:b3907b8d9f65 | 82 | { |
intrinseca | 1:b3907b8d9f65 | 83 | leds[i] = false; |
intrinseca | 1:b3907b8d9f65 | 84 | if(i < 4) |
intrinseca | 1:b3907b8d9f65 | 85 | warn[i] = false; |
intrinseca | 1:b3907b8d9f65 | 86 | wait(0.04); |
intrinseca | 1:b3907b8d9f65 | 87 | } |
intrinseca |
0:1f422ed56e0f | 88 | |
intrinseca | 1:b3907b8d9f65 | 89 | lcd.cls(); |
intrinseca | 1:b3907b8d9f65 | 90 | } |
intrinseca | 1:b3907b8d9f65 | 91 | |
intrinseca | 1:b3907b8d9f65 | 92 | int main() |
intrinseca | 1:b3907b8d9f65 | 93 | { |
intrinseca | 1:b3907b8d9f65 | 94 | car.rpm = 5000; |
intrinseca | 1:b3907b8d9f65 | 95 | car.gear = 0; |
intrinseca | 1:b3907b8d9f65 | 96 | car.speed = 150; |
intrinseca | 1:b3907b8d9f65 | 97 | car.coolant_temp = 21.5; |
intrinseca | 1:b3907b8d9f65 | 98 | |
intrinseca | 1:b3907b8d9f65 | 99 | car.throttle_pos = 1; |
intrinseca | 1:b3907b8d9f65 | 100 | car.manifold_pres = 2; |
intrinseca | 1:b3907b8d9f65 | 101 | car.air_temp = 3; |
intrinseca | 1:b3907b8d9f65 | 102 | car.lambda = 5; |
intrinseca | 1:b3907b8d9f65 | 103 | car.accel_x = 7; |
intrinseca | 1:b3907b8d9f65 | 104 | car.accel_y = 8; |
intrinseca | 1:b3907b8d9f65 | 105 | car.oil_temp = 10; |
intrinseca | 1:b3907b8d9f65 | 106 | car.oil_pres = 11; |
intrinseca | 1:b3907b8d9f65 | 107 | car.warnings = 12; |
intrinseca | 1:b3907b8d9f65 | 108 | |
intrinseca | 1:b3907b8d9f65 | 109 | dashMenu.addItem<float>("Coolant Temp ", "%12.1f\xDF\x43", &car.coolant_temp); // \xDF\x43 -> �C . Need code for C as otherwise it gets taken as hex digit. |
intrinseca | 1:b3907b8d9f65 | 110 | dashMenu.addItem<unsigned char>("Air Temp ", "%12d\xDF\x43", &car.air_temp); |
intrinseca | 1:b3907b8d9f65 | 111 | dashMenu.addItem<unsigned char>("Throttle Pos ", "%13d\xDF", &car.throttle_pos); |
intrinseca | 1:b3907b8d9f65 | 112 | dashMenu.addItem<unsigned char>("Manifold Pres ", "%10d psi", &car.manifold_pres); |
intrinseca | 1:b3907b8d9f65 | 113 | dashMenu.addItem<unsigned char>("Lambda ", "%14d", &car.lambda); |
intrinseca | 1:b3907b8d9f65 | 114 | |
intrinseca | 1:b3907b8d9f65 | 115 | dashMenu.addItem<unsigned char>("Oil Temp ", "%12d\xDF\x43", &car.oil_temp); |
intrinseca | 1:b3907b8d9f65 | 116 | dashMenu.addItem<unsigned char>("Oil Pressure ", "%10d psi", &car.oil_pres); |
intrinseca | 1:b3907b8d9f65 | 117 | |
intrinseca | 1:b3907b8d9f65 | 118 | setup_bigchar(&lcd); |
intrinseca | 1:b3907b8d9f65 | 119 | |
intrinseca | 1:b3907b8d9f65 | 120 | selfTest(); |
intrinseca | 1:b3907b8d9f65 | 121 | |
intrinseca | 1:b3907b8d9f65 | 122 | lcdRefreshTicker.attach_us(&lcdRefresh, LCD_REFRESH_TIME); |
intrinseca | 1:b3907b8d9f65 | 123 | revRefreshTicker.attach_us(&revRefresh, REV_REFRESH_TIME); |
intrinseca | 1:b3907b8d9f65 | 124 | //increment.attach(&doIncrement, 0.0005); |
intrinseca | 1:b3907b8d9f65 | 125 | |
intrinseca | 1:b3907b8d9f65 | 126 | while(true) |
intrinseca | 1:b3907b8d9f65 | 127 | { |
intrinseca | 1:b3907b8d9f65 | 128 | __WFI(); |
intrinseca |
0:1f422ed56e0f | 129 | } |
intrinseca | 1:b3907b8d9f65 | 130 | } |