new battery bar
Dependencies: CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed
main.cpp@27:6ffb44623906, 2017-05-23 (annotated)
- Committer:
- Marrkk_92
- Date:
- Tue May 23 21:18:50 2017 +0000
- Revision:
- 27:6ffb44623906
- Parent:
- 24:d848de26452b
- Child:
- 28:63ef4790703f
deleted power bars for temp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kwasymodo | 1:c5d8ea5d049b | 1 | /******************************************************************************* |
kwasymodo | 4:dfd10f43cc8b | 2 | This software is especially designed for Solarboat Twente for the use in their Solarboat v1.0 |
kwasymodo | 1:c5d8ea5d049b | 3 | |
kwasymodo | 1:c5d8ea5d049b | 4 | Written by: |
zathorix | 23:970a5603da43 | 5 | Niels Leijen, Jesse van Rhijn, Bram Seinhorst, Mark Bruijn |
kwasymodo | 1:c5d8ea5d049b | 6 | |
kwasymodo | 1:c5d8ea5d049b | 7 | Thanks to: |
kwasymodo | 1:c5d8ea5d049b | 8 | Jasper Admiraal, Hidde Pik (hihihihi), Lisa Postma, Heleen Jeurink, Ruben Peters, |
kwasymodo | 1:c5d8ea5d049b | 9 | Martijn Groot Jebbink, Martijn Wilpshaar, Bram Seinhorst, Robert Geels, Arnoud Meutstege, |
kwasymodo | 4:dfd10f43cc8b | 10 | Jeroen te Braake, Ids de Vos, Jesse van Rhijn, Sam Benou, Niels Leijen and Mark Bruijn |
kwasymodo | 1:c5d8ea5d049b | 11 | |
kwasymodo | 1:c5d8ea5d049b | 12 | DISCLAIMER: |
kwasymodo | 1:c5d8ea5d049b | 13 | THIS SOFTWARE IS SUPPLIED "AS IS" WITHOUT ANY WARRANTIES AND SUPPORT. |
kwasymodo | 1:c5d8ea5d049b | 14 | SOLARBOATTWENTE ASSUMES NO RESPONSIBILITY OR LIABILITY FOR THE USE OF THE SOFTWARE. |
kwasymodo | 1:c5d8ea5d049b | 15 | *******************************************************************************/ |
kwasymodo | 1:c5d8ea5d049b | 16 | |
kwasymodo | 1:c5d8ea5d049b | 17 | // uncomment to send debug information |
zathorix | 22:8fdbdfbdf74a | 18 | //#define DEBUG |
kwasymodo | 1:c5d8ea5d049b | 19 | |
kwasymodo | 1:c5d8ea5d049b | 20 | //include 3rd party libraries |
kwasymodo | 4:dfd10f43cc8b | 21 | #include "mbed.h" //needs to be revision 136 else SD filesystem will not work |
kwasymodo | 1:c5d8ea5d049b | 22 | #include "rtos.h" |
kwasymodo | 1:c5d8ea5d049b | 23 | |
kwasymodo | 1:c5d8ea5d049b | 24 | // include Solarboat libraries |
kwasymodo | 1:c5d8ea5d049b | 25 | #include "pinout.h" |
zathorix | 14:0ad1bc8be76b | 26 | #include "CAN_IDs.h" |
kwasymodo | 1:c5d8ea5d049b | 27 | #include "PowerControl.h" |
zathorix | 16:c5427db9edf0 | 28 | #include "TelemetryAndDaq.h" |
zathorix | 16:c5427db9edf0 | 29 | #include "Dashboard.h" |
kwasymodo | 1:c5d8ea5d049b | 30 | |
zathorix | 15:56b25cffa523 | 31 | #define SPEED_THRESH 0.02 //threshold for setting speed to prevent CAN spam |
zathorix | 22:8fdbdfbdf74a | 32 | #define DEBUG |
zathorix | 22:8fdbdfbdf74a | 33 | // initialize serial connection for debug and file retrieval |
kwasymodo | 3:b164662f9740 | 34 | RawSerial pc(SERIAL_TX, SERIAL_RX); |
kwasymodo | 1:c5d8ea5d049b | 35 | |
kwasymodo | 1:c5d8ea5d049b | 36 | // initialize canbus |
kwasymodo | 1:c5d8ea5d049b | 37 | CAN can(CAN_RD, CAN_TD); |
kwasymodo | 1:c5d8ea5d049b | 38 | |
zathorix | 14:0ad1bc8be76b | 39 | //init throttle |
zathorix | 14:0ad1bc8be76b | 40 | AnalogIn analogThrottle(STEER_THROTTLE); |
zathorix | 14:0ad1bc8be76b | 41 | |
zathorix | 18:aa6feb4b73e7 | 42 | //initialize steering wheel buttons |
zathorix | 18:aa6feb4b73e7 | 43 | |
zathorix | 18:aa6feb4b73e7 | 44 | //NEEDS FIXING!!!!!!!!!!! |
zathorix | 18:aa6feb4b73e7 | 45 | DigitalIn menu_button(STEER_MENU); |
zathorix | 18:aa6feb4b73e7 | 46 | DigitalIn fly_button(STEER_FLY); |
zathorix | 18:aa6feb4b73e7 | 47 | DigitalIn reverse_button(STEER_REV); |
zathorix | 18:aa6feb4b73e7 | 48 | |
kwasymodo | 1:c5d8ea5d049b | 49 | // initialze onboard leds |
kwasymodo | 1:c5d8ea5d049b | 50 | DigitalOut ledError(LED3); |
kwasymodo | 1:c5d8ea5d049b | 51 | DigitalOut ledSD(LED1); |
kwasymodo | 1:c5d8ea5d049b | 52 | DigitalOut ledFona(LED5); |
kwasymodo | 1:c5d8ea5d049b | 53 | DigitalOut led24V(LED4); |
kwasymodo | 1:c5d8ea5d049b | 54 | |
kwasymodo | 11:005a50dd7db5 | 55 | DigitalOut buckXSens(BUCK3); |
kwasymodo | 11:005a50dd7db5 | 56 | DigitalOut buckScreen(BUCK4); |
kwasymodo | 11:005a50dd7db5 | 57 | DigitalOut buck24V(BUCK5); |
kwasymodo | 1:c5d8ea5d049b | 58 | |
zathorix | 16:c5427db9edf0 | 59 | //external classes |
zathorix | 16:c5427db9edf0 | 60 | extern DataAcquisition daq; |
zathorix | 17:91ba27c14991 | 61 | extern Telemetrics telemetrics; |
zathorix | 18:aa6feb4b73e7 | 62 | extern Dashboard dash; |
kwasymodo | 1:c5d8ea5d049b | 63 | |
zathorix | 16:c5427db9edf0 | 64 | //external variables |
zathorix | 16:c5427db9edf0 | 65 | extern long long int starttime; |
kwasymodo | 11:005a50dd7db5 | 66 | |
zathorix | 16:c5427db9edf0 | 67 | //external threads |
zathorix | 16:c5427db9edf0 | 68 | extern Thread threadbg; |
kwasymodo | 1:c5d8ea5d049b | 69 | |
zathorix | 15:56b25cffa523 | 70 | //global var for speed; ugly solution but works |
zathorix | 14:0ad1bc8be76b | 71 | float speed = 0; |
zathorix | 14:0ad1bc8be76b | 72 | |
zathorix | 16:c5427db9edf0 | 73 | //thread function declarations |
zathorix | 16:c5427db9edf0 | 74 | void readThrottle(); |
zathorix | 16:c5427db9edf0 | 75 | void power(); |
zathorix | 16:c5427db9edf0 | 76 | void test(); |
zathorix | 16:c5427db9edf0 | 77 | void background(); |
zathorix | 18:aa6feb4b73e7 | 78 | void screens(); |
zathorix | 22:8fdbdfbdf74a | 79 | void resetScreens(); |
zathorix | 22:8fdbdfbdf74a | 80 | |
zathorix | 22:8fdbdfbdf74a | 81 | //varables for screens |
zathorix | 22:8fdbdfbdf74a | 82 | extern batterydata * battery; |
zathorix | 22:8fdbdfbdf74a | 83 | extern variable * velocitysqrd; |
zathorix | 22:8fdbdfbdf74a | 84 | extern variable * motortemp; |
zathorix | 22:8fdbdfbdf74a | 85 | //ticker for resetting screens |
zathorix | 22:8fdbdfbdf74a | 86 | Ticker ticker; |
zathorix | 18:aa6feb4b73e7 | 87 | |
zathorix | 18:aa6feb4b73e7 | 88 | //screen function declarations |
zathorix | 18:aa6feb4b73e7 | 89 | void readEssentials(); |
zathorix | 18:aa6feb4b73e7 | 90 | |
zathorix | 18:aa6feb4b73e7 | 91 | //Screen placeholder variables |
zathorix | 18:aa6feb4b73e7 | 92 | int battery_percentage_left = 0; |
zathorix | 18:aa6feb4b73e7 | 93 | int battery_minutes_left = 0; |
zathorix | 18:aa6feb4b73e7 | 94 | int race_percentage_left = 0; |
zathorix | 18:aa6feb4b73e7 | 95 | int race_minutes_left = 0; |
zathorix | 18:aa6feb4b73e7 | 96 | int race_minutes_done = 0; |
zathorix | 18:aa6feb4b73e7 | 97 | int throttle_power = 0; |
zathorix | 18:aa6feb4b73e7 | 98 | int advised_throttle_power = 0; |
zathorix | 18:aa6feb4b73e7 | 99 | int power_in = 0; |
zathorix | 18:aa6feb4b73e7 | 100 | int power_out = 0; |
zathorix | 18:aa6feb4b73e7 | 101 | int voltage_in = 0; |
zathorix | 18:aa6feb4b73e7 | 102 | int motor_temperature = 0; |
zathorix | 18:aa6feb4b73e7 | 103 | int battery_temperature = 0; |
zathorix | 18:aa6feb4b73e7 | 104 | int velocity = 0; |
zathorix | 18:aa6feb4b73e7 | 105 | int rpm_motor = 0; |
zathorix | 18:aa6feb4b73e7 | 106 | int checkIfButtonPressed(int current_menu); |
zathorix | 18:aa6feb4b73e7 | 107 | int battery_voltage = 0; |
zathorix | 18:aa6feb4b73e7 | 108 | int current_menu = 0; |
zathorix | 18:aa6feb4b73e7 | 109 | time_t start = time(0); |
zathorix | 18:aa6feb4b73e7 | 110 | void readEssentials(); |
zathorix | 18:aa6feb4b73e7 | 111 | bool menu_button_pressed = true; |
zathorix | 18:aa6feb4b73e7 | 112 | bool reverse_button_pressed = true; |
zathorix | 18:aa6feb4b73e7 | 113 | bool fly_request = true; |
zathorix | 18:aa6feb4b73e7 | 114 | bool transmitting = false; |
zathorix | 18:aa6feb4b73e7 | 115 | bool reverse = false; |
zathorix | 18:aa6feb4b73e7 | 116 | |
kwasymodo | 1:c5d8ea5d049b | 117 | // Thread 0 - DO NOT CHANGE THIS! |
kwasymodo | 1:c5d8ea5d049b | 118 | int main() { |
kwasymodo | 1:c5d8ea5d049b | 119 | #ifdef DEBUG |
kwasymodo | 1:c5d8ea5d049b | 120 | pc.baud(115200); |
kwasymodo | 3:b164662f9740 | 121 | pc.printf("Starting SOS V1.0\n"); |
kwasymodo | 1:c5d8ea5d049b | 122 | #endif |
kwasymodo | 1:c5d8ea5d049b | 123 | // change CAN frequency |
kwasymodo | 1:c5d8ea5d049b | 124 | can.frequency(250000); |
kwasymodo | 1:c5d8ea5d049b | 125 | |
kwasymodo | 1:c5d8ea5d049b | 126 | // initialze threads |
zathorix | 15:56b25cffa523 | 127 | Thread threadpower; |
zathorix | 15:56b25cffa523 | 128 | Thread threadtest; |
zathorix | 14:0ad1bc8be76b | 129 | Thread threadthrottle; |
zathorix | 18:aa6feb4b73e7 | 130 | Thread threaddash; |
zathorix | 22:8fdbdfbdf74a | 131 | Thread threadresetscr; |
zathorix | 22:8fdbdfbdf74a | 132 | |
kwasymodo | 1:c5d8ea5d049b | 133 | // start threads |
zathorix | 15:56b25cffa523 | 134 | threadpower.start(&power); |
zathorix | 22:8fdbdfbdf74a | 135 | Thread::wait(50); |
zathorix | 16:c5427db9edf0 | 136 | threadbg.start(&background); |
zathorix | 22:8fdbdfbdf74a | 137 | Thread::wait(50); |
zathorix | 15:56b25cffa523 | 138 | threadtest.start(&test); |
zathorix | 22:8fdbdfbdf74a | 139 | Thread::wait(50); |
zathorix | 22:8fdbdfbdf74a | 140 | |
zathorix | 22:8fdbdfbdf74a | 141 | toggleControlSys(0x01); |
zathorix | 22:8fdbdfbdf74a | 142 | |
zathorix | 18:aa6feb4b73e7 | 143 | threaddash.start(&screens); |
zathorix | 22:8fdbdfbdf74a | 144 | Thread::wait(50); |
zathorix | 14:0ad1bc8be76b | 145 | threadthrottle.start(&readThrottle); |
zathorix | 22:8fdbdfbdf74a | 146 | Thread::wait(50); |
zathorix | 17:91ba27c14991 | 147 | telemetrics.enable(); |
zathorix | 22:8fdbdfbdf74a | 148 | Thread::wait(50); |
zathorix | 16:c5427db9edf0 | 149 | daq.enable(starttime); |
zathorix | 16:c5427db9edf0 | 150 | |
zathorix | 16:c5427db9edf0 | 151 | //BMS message parser, now imlpemented in DAQ lib |
zathorix | 16:c5427db9edf0 | 152 | /*CANMessage msg; |
kwasymodo | 11:005a50dd7db5 | 153 | while(1) { |
kwasymodo | 11:005a50dd7db5 | 154 | if(can.read(msg)) { |
kwasymodo | 11:005a50dd7db5 | 155 | pc.printf("Message received: 0x %x; %u %u%u %d%d %c %u %u\n", msg.id, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5], msg.data[6], msg.data[7]); |
zathorix | 16:c5427db9edf0 | 156 | } |
zathorix | 16:c5427db9edf0 | 157 | Thread::wait(10); |
zathorix | 16:c5427db9edf0 | 158 | }*/ |
zathorix | 16:c5427db9edf0 | 159 | Thread::wait(osWaitForever); |
zathorix | 16:c5427db9edf0 | 160 | } |
zathorix | 16:c5427db9edf0 | 161 | |
zathorix | 16:c5427db9edf0 | 162 | //send motor command |
zathorix | 16:c5427db9edf0 | 163 | void sendMotorSpeed(float throttle) { |
zathorix | 16:c5427db9edf0 | 164 | if ((abs(throttle - speed)) > SPEED_THRESH) { |
zathorix | 16:c5427db9edf0 | 165 | union { |
zathorix | 16:c5427db9edf0 | 166 | char msg[4]; |
zathorix | 16:c5427db9edf0 | 167 | float value; |
zathorix | 16:c5427db9edf0 | 168 | } packet; |
zathorix | 16:c5427db9edf0 | 169 | packet.value = throttle; |
zathorix | 16:c5427db9edf0 | 170 | can.write(CANMessage(MOTOR_COMMAND, packet.msg)); |
zathorix | 16:c5427db9edf0 | 171 | printf("Sent motor speed: %f\r\n", packet.value); |
zathorix | 16:c5427db9edf0 | 172 | speed = throttle; |
kwasymodo | 11:005a50dd7db5 | 173 | } |
zathorix | 16:c5427db9edf0 | 174 | } |
zathorix | 16:c5427db9edf0 | 175 | |
zathorix | 16:c5427db9edf0 | 176 | //thread functions |
zathorix | 16:c5427db9edf0 | 177 | void readThrottle() { |
zathorix | 16:c5427db9edf0 | 178 | float throttleread; |
zathorix | 22:8fdbdfbdf74a | 179 | int rev; |
zathorix | 16:c5427db9edf0 | 180 | while(1) { |
zathorix | 22:8fdbdfbdf74a | 181 | if (reverse) { |
zathorix | 22:8fdbdfbdf74a | 182 | rev = -1; |
zathorix | 22:8fdbdfbdf74a | 183 | } else { |
zathorix | 22:8fdbdfbdf74a | 184 | rev = 1; |
zathorix | 22:8fdbdfbdf74a | 185 | } |
zathorix | 22:8fdbdfbdf74a | 186 | throttleread = rev*(1 - analogThrottle.read()); |
zathorix | 16:c5427db9edf0 | 187 | sendMotorSpeed(throttleread); |
zathorix | 16:c5427db9edf0 | 188 | Thread::wait(10); |
zathorix | 16:c5427db9edf0 | 189 | } |
zathorix | 16:c5427db9edf0 | 190 | } |
zathorix | 16:c5427db9edf0 | 191 | |
zathorix | 16:c5427db9edf0 | 192 | |
zathorix | 16:c5427db9edf0 | 193 | |
zathorix | 16:c5427db9edf0 | 194 | void power() { |
zathorix | 16:c5427db9edf0 | 195 | PowerControl powercontrol(PUSH_GREEN); |
zathorix | 16:c5427db9edf0 | 196 | |
zathorix | 16:c5427db9edf0 | 197 | #ifdef DEBUG |
zathorix | 16:c5427db9edf0 | 198 | pc.printf("Thread 1 - Power started\r\n "); |
zathorix | 16:c5427db9edf0 | 199 | #endif |
zathorix | 16:c5427db9edf0 | 200 | |
kwasymodo | 1:c5d8ea5d049b | 201 | Thread::wait(osWaitForever); |
zathorix | 16:c5427db9edf0 | 202 | } |
zathorix | 16:c5427db9edf0 | 203 | |
zathorix | 16:c5427db9edf0 | 204 | void test() { |
zathorix | 16:c5427db9edf0 | 205 | ledError = 0; |
zathorix | 16:c5427db9edf0 | 206 | ledSD = 0; |
zathorix | 16:c5427db9edf0 | 207 | ledFona = 0 ; |
zathorix | 16:c5427db9edf0 | 208 | led24V=1; |
zathorix | 16:c5427db9edf0 | 209 | |
zathorix | 16:c5427db9edf0 | 210 | //DigitalOut buckCan(BUCK2); |
zathorix | 22:8fdbdfbdf74a | 211 | buckXSens = 1; |
zathorix | 18:aa6feb4b73e7 | 212 | buckScreen = 1; |
zathorix | 16:c5427db9edf0 | 213 | buck24V = 1; |
zathorix | 16:c5427db9edf0 | 214 | } |
zathorix | 18:aa6feb4b73e7 | 215 | |
zathorix | 22:8fdbdfbdf74a | 216 | void resetScreens() { |
zathorix | 22:8fdbdfbdf74a | 217 | |
zathorix | 22:8fdbdfbdf74a | 218 | Thread::wait(10000); |
zathorix | 22:8fdbdfbdf74a | 219 | |
zathorix | 22:8fdbdfbdf74a | 220 | dash.powerOnOLED(1); |
zathorix | 22:8fdbdfbdf74a | 221 | dash.powerOnOLED(2); |
zathorix | 22:8fdbdfbdf74a | 222 | dash.powerOnOLED(3); |
zathorix | 22:8fdbdfbdf74a | 223 | |
zathorix | 22:8fdbdfbdf74a | 224 | dash.clearDisplay(1); |
zathorix | 22:8fdbdfbdf74a | 225 | dash.clearDisplay(2); |
zathorix | 22:8fdbdfbdf74a | 226 | dash.clearDisplay(3); |
zathorix | 22:8fdbdfbdf74a | 227 | } |
zathorix | 22:8fdbdfbdf74a | 228 | |
zathorix | 18:aa6feb4b73e7 | 229 | void screens() |
zathorix | 18:aa6feb4b73e7 | 230 | { |
zathorix | 18:aa6feb4b73e7 | 231 | dash.powerOnOLED(1); |
zathorix | 18:aa6feb4b73e7 | 232 | dash.powerOnOLED(2); |
zathorix | 18:aa6feb4b73e7 | 233 | dash.powerOnOLED(3); |
zathorix | 22:8fdbdfbdf74a | 234 | |
zathorix | 18:aa6feb4b73e7 | 235 | dash.clearDisplay(1); |
zathorix | 18:aa6feb4b73e7 | 236 | dash.clearDisplay(2); |
zathorix | 18:aa6feb4b73e7 | 237 | dash.clearDisplay(3); |
zathorix | 22:8fdbdfbdf74a | 238 | |
zathorix | 18:aa6feb4b73e7 | 239 | while(1) { |
zathorix | 18:aa6feb4b73e7 | 240 | |
zathorix | 18:aa6feb4b73e7 | 241 | Thread::wait(100); |
zathorix | 18:aa6feb4b73e7 | 242 | |
zathorix | 18:aa6feb4b73e7 | 243 | //listen to menu button |
zathorix | 18:aa6feb4b73e7 | 244 | current_menu = checkIfButtonPressed(current_menu); |
zathorix | 18:aa6feb4b73e7 | 245 | //listen to steering wheel at all time |
zathorix | 18:aa6feb4b73e7 | 246 | readEssentials(); |
zathorix | 18:aa6feb4b73e7 | 247 | //check for errors at all time |
zathorix | 18:aa6feb4b73e7 | 248 | dash.checkForErrors(current_menu, velocity, battery_temperature, motor_temperature, battery_percentage_left, battery_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 249 | |
zathorix | 18:aa6feb4b73e7 | 250 | |
zathorix | 18:aa6feb4b73e7 | 251 | switch (current_menu) { |
zathorix | 18:aa6feb4b73e7 | 252 | |
zathorix | 18:aa6feb4b73e7 | 253 | case 0: |
zathorix | 18:aa6feb4b73e7 | 254 | //circular display (1) |
zathorix | 18:aa6feb4b73e7 | 255 | //updateProgressCircle(1, race_percentage_left); |
zathorix | 22:8fdbdfbdf74a | 256 | race_minutes_done = daq.time/60000; //TODO give starting point |
zathorix | 18:aa6feb4b73e7 | 257 | dash.showRaceMinutesDone(race_minutes_done); |
zathorix | 18:aa6feb4b73e7 | 258 | dash.showRaceMinutesLeft(race_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 259 | dash.showRacePercentageLeft(race_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 260 | |
zathorix | 18:aa6feb4b73e7 | 261 | //main display (2) |
zathorix | 22:8fdbdfbdf74a | 262 | dash.displayTime(daq.time + starttime); |
zathorix | 18:aa6feb4b73e7 | 263 | dash.checkTransmitter(transmitting); |
zathorix | 18:aa6feb4b73e7 | 264 | dash.displayVelocity(velocity); |
zathorix | 22:8fdbdfbdf74a | 265 | dash.displayThrottle(abs(throttle_power), reverse); |
Marrkk_92 | 24:d848de26452b | 266 | dash.updateThrottleBar(2, abs(throttle_power), 50, 20, 20, 5); |
zathorix | 18:aa6feb4b73e7 | 267 | //displayAdvisedThrottle(advised_throttle_power); |
Marrkk_92 | 27:6ffb44623906 | 268 | //dash.updatePowerBars(power_out, power_in); |
Marrkk_92 | 27:6ffb44623906 | 269 | dash.updateTemperatureBars(motor_temperature, battery_temperature); |
zathorix | 18:aa6feb4b73e7 | 270 | |
zathorix | 18:aa6feb4b73e7 | 271 | //circular display (3) |
zathorix | 18:aa6feb4b73e7 | 272 | //updateProgressCircle(3, battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 273 | dash.showBatteryMinutesLeft(battery_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 274 | dash.showBatteryPercentageLeft(battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 275 | break; |
zathorix | 18:aa6feb4b73e7 | 276 | |
zathorix | 18:aa6feb4b73e7 | 277 | case 1: |
zathorix | 18:aa6feb4b73e7 | 278 | //circular display (1) |
zathorix | 18:aa6feb4b73e7 | 279 | //updateProgressCircle(1, race_percentage_left); |
zathorix | 22:8fdbdfbdf74a | 280 | race_minutes_done = daq.time/60000; //TODO give starting point |
zathorix | 18:aa6feb4b73e7 | 281 | dash.showRaceMinutesDone(race_minutes_done); |
zathorix | 18:aa6feb4b73e7 | 282 | dash.showRaceMinutesLeft(race_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 283 | dash.showRacePercentageLeft(race_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 284 | |
zathorix | 18:aa6feb4b73e7 | 285 | //main display (2) |
zathorix | 18:aa6feb4b73e7 | 286 | dash.displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in); |
zathorix | 18:aa6feb4b73e7 | 287 | |
zathorix | 18:aa6feb4b73e7 | 288 | //circular display (3) |
zathorix | 18:aa6feb4b73e7 | 289 | //updateProgressCircle(3, battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 290 | dash.showBatteryMinutesLeft(battery_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 291 | dash.showBatteryPercentageLeft(battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 292 | break; |
zathorix | 18:aa6feb4b73e7 | 293 | |
zathorix | 18:aa6feb4b73e7 | 294 | case 2: |
zathorix | 18:aa6feb4b73e7 | 295 | //circular display (1) |
zathorix | 18:aa6feb4b73e7 | 296 | //updateProgressCircle(1, race_percentage_left); |
zathorix | 22:8fdbdfbdf74a | 297 | race_minutes_done = daq.time/60000; //TODO give starting point |
zathorix | 18:aa6feb4b73e7 | 298 | dash.showRaceMinutesDone(race_minutes_done); |
zathorix | 18:aa6feb4b73e7 | 299 | dash.showRaceMinutesLeft(race_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 300 | dash.showRacePercentageLeft(race_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 301 | |
zathorix | 18:aa6feb4b73e7 | 302 | //main display (2) |
zathorix | 18:aa6feb4b73e7 | 303 | dash.displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in); |
zathorix | 18:aa6feb4b73e7 | 304 | |
zathorix | 18:aa6feb4b73e7 | 305 | //circular display (3) |
zathorix | 18:aa6feb4b73e7 | 306 | //updateProgressCircle(3, battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 307 | dash.showBatteryMinutesLeft(battery_minutes_left); |
zathorix | 18:aa6feb4b73e7 | 308 | dash.showBatteryPercentageLeft(battery_percentage_left); |
zathorix | 18:aa6feb4b73e7 | 309 | break; |
zathorix | 18:aa6feb4b73e7 | 310 | default: |
zathorix | 18:aa6feb4b73e7 | 311 | //empty, catch |
zathorix | 18:aa6feb4b73e7 | 312 | break; |
zathorix | 18:aa6feb4b73e7 | 313 | } |
zathorix | 18:aa6feb4b73e7 | 314 | } |
zathorix | 18:aa6feb4b73e7 | 315 | } |
zathorix | 18:aa6feb4b73e7 | 316 | |
zathorix | 18:aa6feb4b73e7 | 317 | int checkIfButtonPressed(int current_menu) |
zathorix | 18:aa6feb4b73e7 | 318 | { |
zathorix | 18:aa6feb4b73e7 | 319 | //--------------MENU BUTTON-------------------- |
zathorix | 18:aa6feb4b73e7 | 320 | if (menu_button == 0 && menu_button_pressed == false) { |
zathorix | 18:aa6feb4b73e7 | 321 | menu_button_pressed = true; |
zathorix | 18:aa6feb4b73e7 | 322 | start = time(0); |
zathorix | 18:aa6feb4b73e7 | 323 | current_menu++; |
zathorix | 18:aa6feb4b73e7 | 324 | if (current_menu > 2) current_menu = 0; |
zathorix | 22:8fdbdfbdf74a | 325 | |
zathorix | 22:8fdbdfbdf74a | 326 | //clear displays and reset settings |
Marrkk_92 | 24:d848de26452b | 327 | dash.clearDisplay(1); |
Marrkk_92 | 24:d848de26452b | 328 | dash.clearDisplay(2); |
Marrkk_92 | 24:d848de26452b | 329 | dash.clearDisplay(3); |
zathorix | 22:8fdbdfbdf74a | 330 | |
zathorix | 18:aa6feb4b73e7 | 331 | } else if (menu_button == 1) menu_button_pressed = false; |
zathorix | 18:aa6feb4b73e7 | 332 | //timeout for back to home screen |
zathorix | 22:8fdbdfbdf74a | 333 | /*double seconds_since_start = difftime(time(0), start); |
zathorix | 18:aa6feb4b73e7 | 334 | if (current_menu != 0 && seconds_since_start > MENU_TIMEOUT_TIME) { |
zathorix | 18:aa6feb4b73e7 | 335 | current_menu = 0; |
zathorix | 18:aa6feb4b73e7 | 336 | dash.clearDisplay(1); |
zathorix | 18:aa6feb4b73e7 | 337 | dash.clearDisplay(2); |
zathorix | 18:aa6feb4b73e7 | 338 | dash.clearDisplay(3); |
zathorix | 22:8fdbdfbdf74a | 339 | }*/ |
zathorix | 18:aa6feb4b73e7 | 340 | |
zathorix | 18:aa6feb4b73e7 | 341 | //--------------REVERSE BUTTON-------------------- |
zathorix | 18:aa6feb4b73e7 | 342 | if (reverse_button == 0 && reverse_button_pressed == false) { |
zathorix | 18:aa6feb4b73e7 | 343 | reverse_button_pressed = true; |
zathorix | 18:aa6feb4b73e7 | 344 | if (velocity < MAX_REVERSE_VELOCITY) reverse = !reverse; |
zathorix | 18:aa6feb4b73e7 | 345 | } else if (reverse_button == 1) reverse_button_pressed = false; |
zathorix | 18:aa6feb4b73e7 | 346 | |
zathorix | 18:aa6feb4b73e7 | 347 | //--------------FLY BUTTON-------------------- |
zathorix | 18:aa6feb4b73e7 | 348 | if (fly_button == 0 && fly_request == false) { |
zathorix | 18:aa6feb4b73e7 | 349 | fly_request = true; |
zathorix | 18:aa6feb4b73e7 | 350 | if (velocity > MIN_FLY_VELOCITY) fly_request = !fly_request; |
zathorix | 18:aa6feb4b73e7 | 351 | } else if (fly_button == 1) fly_request = false; |
zathorix | 18:aa6feb4b73e7 | 352 | |
zathorix | 18:aa6feb4b73e7 | 353 | //return for menu |
zathorix | 18:aa6feb4b73e7 | 354 | return current_menu; |
zathorix | 18:aa6feb4b73e7 | 355 | } |
zathorix | 18:aa6feb4b73e7 | 356 | |
zathorix | 22:8fdbdfbdf74a | 357 | //power_out is now power_in minus power_out, can only fix |
zathorix | 18:aa6feb4b73e7 | 358 | void readEssentials() |
zathorix | 18:aa6feb4b73e7 | 359 | { |
zathorix | 18:aa6feb4b73e7 | 360 | |
zathorix | 18:aa6feb4b73e7 | 361 | //get current throttle set + adjust params -------- DEBUG |
zathorix | 22:8fdbdfbdf74a | 362 | throttle_power = 100*speed; |
zathorix | 22:8fdbdfbdf74a | 363 | power_out = (int) ((battery->current) * (battery->voltage)); |
zathorix | 18:aa6feb4b73e7 | 364 | power_in = 680; |
zathorix | 22:8fdbdfbdf74a | 365 | velocity = (int) (3.6*sqrt((velocitysqrd->value))); //velocity in kph |
zathorix | 18:aa6feb4b73e7 | 366 | battery_minutes_left = throttle_power/6; |
zathorix | 22:8fdbdfbdf74a | 367 | battery_percentage_left = battery->SOC; |
zathorix | 22:8fdbdfbdf74a | 368 | motor_temperature = (int) (motortemp->value); |
zathorix | 22:8fdbdfbdf74a | 369 | battery_temperature = (int) (battery->maxtemp); |
zathorix | 22:8fdbdfbdf74a | 370 | battery_voltage = (int) (battery->voltage); |
zathorix | 18:aa6feb4b73e7 | 371 | rpm_motor = throttle_power; |
zathorix | 23:970a5603da43 | 372 | //voltage_in = 44; |
zathorix | 23:970a5603da43 | 373 | //race_minutes_left = 12; |
zathorix | 18:aa6feb4b73e7 | 374 | race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done); |
zathorix | 18:aa6feb4b73e7 | 375 | } |