new battery bar
Dependencies: CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed
Diff: main.cpp
- Revision:
- 18:aa6feb4b73e7
- Parent:
- 17:91ba27c14991
- Child:
- 22:8fdbdfbdf74a
--- a/main.cpp Mon May 22 18:16:09 2017 +0000 +++ b/main.cpp Mon May 22 18:39:20 2017 +0000 @@ -41,6 +41,13 @@ //init throttle AnalogIn analogThrottle(STEER_THROTTLE); +//initialize steering wheel buttons + +//NEEDS FIXING!!!!!!!!!!! +DigitalIn menu_button(STEER_MENU); +DigitalIn fly_button(STEER_FLY); +DigitalIn reverse_button(STEER_REV); + // initialze onboard leds DigitalOut ledError(LED3); DigitalOut ledSD(LED1); @@ -54,6 +61,7 @@ //external classes extern DataAcquisition daq; extern Telemetrics telemetrics; +extern Dashboard dash; //external variables extern long long int starttime; @@ -69,6 +77,37 @@ void power(); void test(); void background(); +void screens(); + +//screen function declarations +void readEssentials(); + +//Screen placeholder variables +int battery_percentage_left = 0; +int battery_minutes_left = 0; +int race_percentage_left = 0; +int race_minutes_left = 0; +int race_minutes_done = 0; +int throttle_power = 0; +int advised_throttle_power = 0; +int power_in = 0; +int power_out = 0; +int voltage_in = 0; +int motor_temperature = 0; +int battery_temperature = 0; +int velocity = 0; +int rpm_motor = 0; +int checkIfButtonPressed(int current_menu); +int battery_voltage = 0; +int current_menu = 0; +time_t start = time(0); +void readEssentials(); +bool menu_button_pressed = true; +bool reverse_button_pressed = true; +bool fly_request = true; +bool transmitting = false; +bool reverse = false; + // Thread 0 - DO NOT CHANGE THIS! int main() { @@ -83,11 +122,13 @@ Thread threadpower; Thread threadtest; Thread threadthrottle; + Thread threaddash; // start threads threadpower.start(&power); threadbg.start(&background); threadtest.start(&test); + threaddash.start(&screens); threadthrottle.start(&readThrottle); telemetrics.enable(); @@ -148,6 +189,148 @@ //DigitalOut buckCan(BUCK2); buckXSens = 0; - buckScreen = 0; + buckScreen = 1; buck24V = 1; } + +void screens() +{ + dash.powerOnOLED(1); + dash.powerOnOLED(2); + dash.powerOnOLED(3); + + dash.clearDisplay(1); + dash.clearDisplay(2); + dash.clearDisplay(3); + + while(1) { + + Thread::wait(100); + + //listen to menu button + current_menu = checkIfButtonPressed(current_menu); + //listen to steering wheel at all time + readEssentials(); + //check for errors at all time + dash.checkForErrors(current_menu, velocity, battery_temperature, motor_temperature, battery_percentage_left, battery_minutes_left); + + + switch (current_menu) { + + case 0: + //circular display (1) + //updateProgressCircle(1, race_percentage_left); + race_minutes_done = time(0)/60; //TODO give starting point + dash.showRaceMinutesDone(race_minutes_done); + dash.showRaceMinutesLeft(race_minutes_left); + dash.showRacePercentageLeft(race_percentage_left); + + //main display (2) + dash.displayTime(); + dash.checkTransmitter(transmitting); + dash.displayVelocity(velocity); + dash.displayThrottle(throttle_power, reverse); + //displayAdvisedThrottle(advised_throttle_power); + dash.updatePowerBars(power_out, power_in); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + dash.showBatteryMinutesLeft(battery_minutes_left); + dash.showBatteryPercentageLeft(battery_percentage_left); + break; + + case 1: + //circular display (1) + //updateProgressCircle(1, race_percentage_left); + race_minutes_done = time(0)/60; //TODO give starting point + dash.showRaceMinutesDone(race_minutes_done); + dash.showRaceMinutesLeft(race_minutes_left); + dash.showRacePercentageLeft(race_percentage_left); + + //main display (2) + dash.displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + dash.showBatteryMinutesLeft(battery_minutes_left); + dash.showBatteryPercentageLeft(battery_percentage_left); + break; + + case 2: + //circular display (1) + //updateProgressCircle(1, race_percentage_left); + race_minutes_done = time(0)/60; //TODO give starting point + dash.showRaceMinutesDone(race_minutes_done); + dash.showRaceMinutesLeft(race_minutes_left); + dash.showRacePercentageLeft(race_percentage_left); + + //main display (2) + dash.displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + dash.showBatteryMinutesLeft(battery_minutes_left); + dash.showBatteryPercentageLeft(battery_percentage_left); + break; + default: + //empty, catch + break; + } + } +} + +int checkIfButtonPressed(int current_menu) +{ + //--------------MENU BUTTON-------------------- + if (menu_button == 0 && menu_button_pressed == false) { + menu_button_pressed = true; + start = time(0); + current_menu++; + if (current_menu > 2) current_menu = 0; + dash.clearDisplay(1); + dash.clearDisplay(2); + dash.clearDisplay(3); + } else if (menu_button == 1) menu_button_pressed = false; + //timeout for back to home screen + double seconds_since_start = difftime(time(0), start); + if (current_menu != 0 && seconds_since_start > MENU_TIMEOUT_TIME) { + current_menu = 0; + dash.clearDisplay(1); + dash.clearDisplay(2); + dash.clearDisplay(3); + } + + //--------------REVERSE BUTTON-------------------- + if (reverse_button == 0 && reverse_button_pressed == false) { + reverse_button_pressed = true; + if (velocity < MAX_REVERSE_VELOCITY) reverse = !reverse; + } else if (reverse_button == 1) reverse_button_pressed = false; + + //--------------FLY BUTTON-------------------- + if (fly_button == 0 && fly_request == false) { + fly_request = true; + if (velocity > MIN_FLY_VELOCITY) fly_request = !fly_request; + } else if (fly_button == 1) fly_request = false; + + //return for menu + return current_menu; +} + +void readEssentials() +{ + + //get current throttle set + adjust params -------- DEBUG + throttle_power = 100*(1 - analogThrottle); + power_out = 580; + power_in = 680; + velocity = 0.1*throttle_power; + battery_minutes_left = throttle_power/6; + battery_percentage_left = throttle_power/5; + motor_temperature = 68; + battery_temperature = 24; + battery_voltage = 45; + rpm_motor = throttle_power; + voltage_in = 44; + race_minutes_left = 12; + race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done); +} \ No newline at end of file