Mark Bruijn
/
DashboardV4
dashboardv4solarboat
Fork of mbed_blinky by
Diff: main.cpp
- Revision:
- 16:21658c9e697c
- Parent:
- 4:81cea7a352b0
- Child:
- 17:f8d3d1f0d8d1
--- a/main.cpp Wed Jan 18 13:46:04 2017 +0000 +++ b/main.cpp Tue May 02 17:25:18 2017 +0000 @@ -1,12 +1,202 @@ -#include "mbed.h" +#include "mbed.h" +#include "oled_driver.h" + +#define MENU_TIMEOUT_TIME 50.0 //menu timeout in seconds [s] +#define MAX_POWER_IN 1500 //max power in for power bars [W] +#define MAX_POWER_OUT 2000 //max power out for power bars [W] +#define MAX_TEMP_MOTOR 80 //alert when exceeding temp ['C] +#define MAX_TEMP_BATTERY 60 //alert when exceeding temp ['C] +#define MAX_REVERSE_VELOCITY 20 //max velocity for allowing reverse [km/h] +#define MIN_SOLAR_PANEL_VOLTAGE 30 //min voltage provided by solar panels [V] +#define MIN_FLY_VELOCITY 15 //min velocity to request fly [km/h] +#define BATTERY_LOW_ALERT 10 //min battery percentage [%, min] + +//digital and analog inputs +DigitalIn reverse_button(D14); +DigitalIn menu_button(D15); +DigitalIn fly_button(D12); +AnalogIn analog_throttle(A5); -DigitalOut myled(LED1); +//global 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; + +int main() +{ + powerOnOLED(1); + powerOnOLED(2); + powerOnOLED(3); + + clearDisplay(1); + clearDisplay(2); + clearDisplay(3); + + welcomeScreen(); + + while(1) { + + //listen to menu button + current_menu = checkIfButtonPressed(current_menu); + //listen to steering wheel at all time + readEssentials(); + //check for errors at all time + checkForErrors(current_menu, velocity, battery_temperature, motor_temperature, MAX_TEMP_MOTOR, MAX_TEMP_BATTERY, battery_percentage_left, battery_minutes_left, BATTERY_LOW_ALERT); + + switch (current_menu) { -int main() { - while(1) { - myled = 1; - wait(0.2); - myled = 0; - wait(0.2); + case 0: + //circular display (1) + //updateProgressCircle(1, race_percentage_left); + race_minutes_done = time(0)/60; //TODO give starting point + showRaceMinutesDone(race_minutes_done); + showRaceMinutesLeft(race_minutes_left); + showRacePercentageLeft(race_percentage_left); + + //main display (2) + displayTime(); + checkTransmitter(transmitting); + displayVelocity(velocity); + displayThrottle(throttle_power, reverse); + displayAdvisedThrottle(advised_throttle_power); + updatePowerBars(power_out, power_in, MAX_POWER_OUT, MAX_POWER_IN); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + showBatteryMinutesLeft(battery_minutes_left); + 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 + showRaceMinutesDone(race_minutes_done); + showRaceMinutesLeft(race_minutes_left); + showRacePercentageLeft(race_percentage_left); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + showBatteryMinutesLeft(battery_minutes_left); + 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 + showRaceMinutesDone(race_minutes_done); + showRaceMinutesLeft(race_minutes_left); + showRacePercentageLeft(race_percentage_left); + + //main display (2) + displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + showBatteryMinutesLeft(battery_minutes_left); + showBatteryPercentageLeft(battery_percentage_left); + break; + + case 3: + //circular display (1) + //updateProgressCircle(1, race_percentage_left); + race_minutes_done = time(0)/60; //TODO give starting point + showRaceMinutesDone(race_minutes_done); + showRaceMinutesLeft(race_minutes_left); + showRacePercentageLeft(race_percentage_left); + + //main display (2) + displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in); + + //circular display (3) + //updateProgressCircle(3, battery_percentage_left); + showBatteryMinutesLeft(battery_minutes_left); + 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 > 3) current_menu = 0; + clearDisplay(1); + clearDisplay(2); + 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; + clearDisplay(1); + clearDisplay(2); + 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 = 1000*analog_throttle; + + + power_out = 1.5*throttle_power; + power_in = 1.9*throttle_power; + velocity = 0.2*throttle_power; + battery_minutes_left = 0.1*throttle_power; + battery_percentage_left = 0.15*throttle_power; + motor_temperature = 0.5*throttle_power; + battery_temperature = 0.2*throttle_power; + battery_voltage = 300.1*throttle_power; + rpm_motor = throttle_power; + voltage_in = 200.1*throttle_power; + race_minutes_left = 0.13*throttle_power; + race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done); + if (throttle_power > 3) transmitting = true; + else transmitting = false; +}