dashboardv4solarboat

Dependencies:   mbed

Fork of mbed_blinky by Mbed

Committer:
Marrkk_92
Date:
Tue May 02 17:25:18 2017 +0000
Revision:
16:21658c9e697c
Parent:
4:81cea7a352b0
Child:
17:f8d3d1f0d8d1
dashboard_SBT_v4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marrkk_92 16:21658c9e697c 1 #include "mbed.h"
Marrkk_92 16:21658c9e697c 2 #include "oled_driver.h"
Marrkk_92 16:21658c9e697c 3
Marrkk_92 16:21658c9e697c 4 #define MENU_TIMEOUT_TIME 50.0 //menu timeout in seconds [s]
Marrkk_92 16:21658c9e697c 5 #define MAX_POWER_IN 1500 //max power in for power bars [W]
Marrkk_92 16:21658c9e697c 6 #define MAX_POWER_OUT 2000 //max power out for power bars [W]
Marrkk_92 16:21658c9e697c 7 #define MAX_TEMP_MOTOR 80 //alert when exceeding temp ['C]
Marrkk_92 16:21658c9e697c 8 #define MAX_TEMP_BATTERY 60 //alert when exceeding temp ['C]
Marrkk_92 16:21658c9e697c 9 #define MAX_REVERSE_VELOCITY 20 //max velocity for allowing reverse [km/h]
Marrkk_92 16:21658c9e697c 10 #define MIN_SOLAR_PANEL_VOLTAGE 30 //min voltage provided by solar panels [V]
Marrkk_92 16:21658c9e697c 11 #define MIN_FLY_VELOCITY 15 //min velocity to request fly [km/h]
Marrkk_92 16:21658c9e697c 12 #define BATTERY_LOW_ALERT 10 //min battery percentage [%, min]
Marrkk_92 16:21658c9e697c 13
Marrkk_92 16:21658c9e697c 14 //digital and analog inputs
Marrkk_92 16:21658c9e697c 15 DigitalIn reverse_button(D14);
Marrkk_92 16:21658c9e697c 16 DigitalIn menu_button(D15);
Marrkk_92 16:21658c9e697c 17 DigitalIn fly_button(D12);
Marrkk_92 16:21658c9e697c 18 AnalogIn analog_throttle(A5);
dan 0:7dec7e9ac085 19
Marrkk_92 16:21658c9e697c 20 //global variables
Marrkk_92 16:21658c9e697c 21 int battery_percentage_left = 0;
Marrkk_92 16:21658c9e697c 22 int battery_minutes_left = 0;
Marrkk_92 16:21658c9e697c 23 int race_percentage_left = 0;
Marrkk_92 16:21658c9e697c 24 int race_minutes_left = 0;
Marrkk_92 16:21658c9e697c 25 int race_minutes_done = 0;
Marrkk_92 16:21658c9e697c 26 int throttle_power = 0;
Marrkk_92 16:21658c9e697c 27 int advised_throttle_power = 0;
Marrkk_92 16:21658c9e697c 28 int power_in = 0;
Marrkk_92 16:21658c9e697c 29 int power_out = 0;
Marrkk_92 16:21658c9e697c 30 int voltage_in = 0;
Marrkk_92 16:21658c9e697c 31 int motor_temperature = 0;
Marrkk_92 16:21658c9e697c 32 int battery_temperature = 0;
Marrkk_92 16:21658c9e697c 33 int velocity = 0;
Marrkk_92 16:21658c9e697c 34 int rpm_motor = 0;
Marrkk_92 16:21658c9e697c 35 int checkIfButtonPressed(int current_menu);
Marrkk_92 16:21658c9e697c 36 int battery_voltage = 0;
Marrkk_92 16:21658c9e697c 37 int current_menu = 0;
Marrkk_92 16:21658c9e697c 38 time_t start = time(0);
Marrkk_92 16:21658c9e697c 39 void readEssentials();
Marrkk_92 16:21658c9e697c 40 bool menu_button_pressed = true;
Marrkk_92 16:21658c9e697c 41 bool reverse_button_pressed = true;
Marrkk_92 16:21658c9e697c 42 bool fly_request = true;
Marrkk_92 16:21658c9e697c 43 bool transmitting = false;
Marrkk_92 16:21658c9e697c 44 bool reverse = false;
Marrkk_92 16:21658c9e697c 45
Marrkk_92 16:21658c9e697c 46 int main()
Marrkk_92 16:21658c9e697c 47 {
Marrkk_92 16:21658c9e697c 48 powerOnOLED(1);
Marrkk_92 16:21658c9e697c 49 powerOnOLED(2);
Marrkk_92 16:21658c9e697c 50 powerOnOLED(3);
Marrkk_92 16:21658c9e697c 51
Marrkk_92 16:21658c9e697c 52 clearDisplay(1);
Marrkk_92 16:21658c9e697c 53 clearDisplay(2);
Marrkk_92 16:21658c9e697c 54 clearDisplay(3);
Marrkk_92 16:21658c9e697c 55
Marrkk_92 16:21658c9e697c 56 welcomeScreen();
Marrkk_92 16:21658c9e697c 57
Marrkk_92 16:21658c9e697c 58 while(1) {
Marrkk_92 16:21658c9e697c 59
Marrkk_92 16:21658c9e697c 60 //listen to menu button
Marrkk_92 16:21658c9e697c 61 current_menu = checkIfButtonPressed(current_menu);
Marrkk_92 16:21658c9e697c 62 //listen to steering wheel at all time
Marrkk_92 16:21658c9e697c 63 readEssentials();
Marrkk_92 16:21658c9e697c 64 //check for errors at all time
Marrkk_92 16:21658c9e697c 65 checkForErrors(current_menu, velocity, battery_temperature, motor_temperature, MAX_TEMP_MOTOR, MAX_TEMP_BATTERY, battery_percentage_left, battery_minutes_left, BATTERY_LOW_ALERT);
Marrkk_92 16:21658c9e697c 66
Marrkk_92 16:21658c9e697c 67 switch (current_menu) {
dan 0:7dec7e9ac085 68
Marrkk_92 16:21658c9e697c 69 case 0:
Marrkk_92 16:21658c9e697c 70 //circular display (1)
Marrkk_92 16:21658c9e697c 71 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 72 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 73 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 74 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 75 showRacePercentageLeft(race_percentage_left);
Marrkk_92 16:21658c9e697c 76
Marrkk_92 16:21658c9e697c 77 //main display (2)
Marrkk_92 16:21658c9e697c 78 displayTime();
Marrkk_92 16:21658c9e697c 79 checkTransmitter(transmitting);
Marrkk_92 16:21658c9e697c 80 displayVelocity(velocity);
Marrkk_92 16:21658c9e697c 81 displayThrottle(throttle_power, reverse);
Marrkk_92 16:21658c9e697c 82 displayAdvisedThrottle(advised_throttle_power);
Marrkk_92 16:21658c9e697c 83 updatePowerBars(power_out, power_in, MAX_POWER_OUT, MAX_POWER_IN);
Marrkk_92 16:21658c9e697c 84
Marrkk_92 16:21658c9e697c 85 //circular display (3)
Marrkk_92 16:21658c9e697c 86 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 87 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 88 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 16:21658c9e697c 89 break;
Marrkk_92 16:21658c9e697c 90
Marrkk_92 16:21658c9e697c 91 case 1:
Marrkk_92 16:21658c9e697c 92 //circular display (1)
Marrkk_92 16:21658c9e697c 93 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 94 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 95 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 96 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 97 showRacePercentageLeft(race_percentage_left);
Marrkk_92 16:21658c9e697c 98
Marrkk_92 16:21658c9e697c 99 //circular display (3)
Marrkk_92 16:21658c9e697c 100 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 101 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 102 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 16:21658c9e697c 103 break;
Marrkk_92 16:21658c9e697c 104
Marrkk_92 16:21658c9e697c 105 case 2:
Marrkk_92 16:21658c9e697c 106 //circular display (1)
Marrkk_92 16:21658c9e697c 107 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 108 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 109 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 110 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 111 showRacePercentageLeft(race_percentage_left);
Marrkk_92 16:21658c9e697c 112
Marrkk_92 16:21658c9e697c 113 //main display (2)
Marrkk_92 16:21658c9e697c 114 displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
Marrkk_92 16:21658c9e697c 115
Marrkk_92 16:21658c9e697c 116 //circular display (3)
Marrkk_92 16:21658c9e697c 117 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 118 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 119 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 16:21658c9e697c 120 break;
Marrkk_92 16:21658c9e697c 121
Marrkk_92 16:21658c9e697c 122 case 3:
Marrkk_92 16:21658c9e697c 123 //circular display (1)
Marrkk_92 16:21658c9e697c 124 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 125 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 126 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 127 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 128 showRacePercentageLeft(race_percentage_left);
Marrkk_92 16:21658c9e697c 129
Marrkk_92 16:21658c9e697c 130 //main display (2)
Marrkk_92 16:21658c9e697c 131 displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
Marrkk_92 16:21658c9e697c 132
Marrkk_92 16:21658c9e697c 133 //circular display (3)
Marrkk_92 16:21658c9e697c 134 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 135 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 136 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 16:21658c9e697c 137 break;
Marrkk_92 16:21658c9e697c 138 default:
Marrkk_92 16:21658c9e697c 139 //empty, catch
Marrkk_92 16:21658c9e697c 140 break;
Marrkk_92 16:21658c9e697c 141 }
stevep 4:81cea7a352b0 142 }
dan 0:7dec7e9ac085 143 }
Marrkk_92 16:21658c9e697c 144
Marrkk_92 16:21658c9e697c 145 int checkIfButtonPressed(int current_menu)
Marrkk_92 16:21658c9e697c 146 {
Marrkk_92 16:21658c9e697c 147 //--------------MENU BUTTON--------------------
Marrkk_92 16:21658c9e697c 148 if (menu_button == 0 && menu_button_pressed == false) {
Marrkk_92 16:21658c9e697c 149 menu_button_pressed = true;
Marrkk_92 16:21658c9e697c 150 start = time(0);
Marrkk_92 16:21658c9e697c 151 current_menu++;
Marrkk_92 16:21658c9e697c 152 if (current_menu > 3) current_menu = 0;
Marrkk_92 16:21658c9e697c 153 clearDisplay(1);
Marrkk_92 16:21658c9e697c 154 clearDisplay(2);
Marrkk_92 16:21658c9e697c 155 clearDisplay(3);
Marrkk_92 16:21658c9e697c 156 } else if (menu_button == 1) menu_button_pressed = false;
Marrkk_92 16:21658c9e697c 157 //timeout for back to home screen
Marrkk_92 16:21658c9e697c 158 double seconds_since_start = difftime(time(0), start);
Marrkk_92 16:21658c9e697c 159 if (current_menu != 0 && seconds_since_start > MENU_TIMEOUT_TIME) {
Marrkk_92 16:21658c9e697c 160 current_menu = 0;
Marrkk_92 16:21658c9e697c 161 clearDisplay(1);
Marrkk_92 16:21658c9e697c 162 clearDisplay(2);
Marrkk_92 16:21658c9e697c 163 clearDisplay(3);
Marrkk_92 16:21658c9e697c 164 }
Marrkk_92 16:21658c9e697c 165
Marrkk_92 16:21658c9e697c 166 //--------------REVERSE BUTTON--------------------
Marrkk_92 16:21658c9e697c 167 if (reverse_button == 0 && reverse_button_pressed == false) {
Marrkk_92 16:21658c9e697c 168 reverse_button_pressed = true;
Marrkk_92 16:21658c9e697c 169 if (velocity < MAX_REVERSE_VELOCITY) reverse = !reverse;
Marrkk_92 16:21658c9e697c 170 } else if (reverse_button == 1) reverse_button_pressed = false;
Marrkk_92 16:21658c9e697c 171
Marrkk_92 16:21658c9e697c 172 //--------------FLY BUTTON--------------------
Marrkk_92 16:21658c9e697c 173 if (fly_button == 0 && fly_request == false) {
Marrkk_92 16:21658c9e697c 174 fly_request = true;
Marrkk_92 16:21658c9e697c 175 if (velocity > MIN_FLY_VELOCITY) fly_request = !fly_request;
Marrkk_92 16:21658c9e697c 176 } else if (fly_button == 1) fly_request = false;
Marrkk_92 16:21658c9e697c 177
Marrkk_92 16:21658c9e697c 178 //return for menu
Marrkk_92 16:21658c9e697c 179 return current_menu;
Marrkk_92 16:21658c9e697c 180 }
Marrkk_92 16:21658c9e697c 181
Marrkk_92 16:21658c9e697c 182 void readEssentials()
Marrkk_92 16:21658c9e697c 183 {
Marrkk_92 16:21658c9e697c 184 //get current throttle set + adjust params -------- DEBUG
Marrkk_92 16:21658c9e697c 185 throttle_power = 1000*analog_throttle;
Marrkk_92 16:21658c9e697c 186
Marrkk_92 16:21658c9e697c 187
Marrkk_92 16:21658c9e697c 188 power_out = 1.5*throttle_power;
Marrkk_92 16:21658c9e697c 189 power_in = 1.9*throttle_power;
Marrkk_92 16:21658c9e697c 190 velocity = 0.2*throttle_power;
Marrkk_92 16:21658c9e697c 191 battery_minutes_left = 0.1*throttle_power;
Marrkk_92 16:21658c9e697c 192 battery_percentage_left = 0.15*throttle_power;
Marrkk_92 16:21658c9e697c 193 motor_temperature = 0.5*throttle_power;
Marrkk_92 16:21658c9e697c 194 battery_temperature = 0.2*throttle_power;
Marrkk_92 16:21658c9e697c 195 battery_voltage = 300.1*throttle_power;
Marrkk_92 16:21658c9e697c 196 rpm_motor = throttle_power;
Marrkk_92 16:21658c9e697c 197 voltage_in = 200.1*throttle_power;
Marrkk_92 16:21658c9e697c 198 race_minutes_left = 0.13*throttle_power;
Marrkk_92 16:21658c9e697c 199 race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done);
Marrkk_92 16:21658c9e697c 200 if (throttle_power > 3) transmitting = true;
Marrkk_92 16:21658c9e697c 201 else transmitting = false;
Marrkk_92 16:21658c9e697c 202 }