dashboardv4solarboat

Dependencies:   mbed

Fork of mbed_blinky by Mbed

Committer:
Marrkk_92
Date:
Sun May 21 19:33:42 2017 +0000
Revision:
17:f8d3d1f0d8d1
Parent:
16:21658c9e697c
dash v6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marrkk_92 17:f8d3d1f0d8d1 1 #include "mbed.h"
Marrkk_92 17:f8d3d1f0d8d1 2 #include "oled_driver.h"
Marrkk_92 16:21658c9e697c 3
Marrkk_92 17:f8d3d1f0d8d1 4 #define MENU_TIMEOUT_TIME 5.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 17:f8d3d1f0d8d1 14 DigitalIn menu_button(D0);
Marrkk_92 17:f8d3d1f0d8d1 15 DigitalIn fly_button(D0);
Marrkk_92 17:f8d3d1f0d8d1 16 DigitalIn reverse_button(D0);
Marrkk_92 17:f8d3d1f0d8d1 17 AnalogIn analog_throttle(A0);
dan 0:7dec7e9ac085 18
Marrkk_92 16:21658c9e697c 19 //global variables
Marrkk_92 16:21658c9e697c 20 int battery_percentage_left = 0;
Marrkk_92 16:21658c9e697c 21 int battery_minutes_left = 0;
Marrkk_92 16:21658c9e697c 22 int race_percentage_left = 0;
Marrkk_92 16:21658c9e697c 23 int race_minutes_left = 0;
Marrkk_92 16:21658c9e697c 24 int race_minutes_done = 0;
Marrkk_92 16:21658c9e697c 25 int throttle_power = 0;
Marrkk_92 16:21658c9e697c 26 int advised_throttle_power = 0;
Marrkk_92 16:21658c9e697c 27 int power_in = 0;
Marrkk_92 16:21658c9e697c 28 int power_out = 0;
Marrkk_92 16:21658c9e697c 29 int voltage_in = 0;
Marrkk_92 16:21658c9e697c 30 int motor_temperature = 0;
Marrkk_92 16:21658c9e697c 31 int battery_temperature = 0;
Marrkk_92 16:21658c9e697c 32 int velocity = 0;
Marrkk_92 16:21658c9e697c 33 int rpm_motor = 0;
Marrkk_92 16:21658c9e697c 34 int checkIfButtonPressed(int current_menu);
Marrkk_92 16:21658c9e697c 35 int battery_voltage = 0;
Marrkk_92 16:21658c9e697c 36 int current_menu = 0;
Marrkk_92 16:21658c9e697c 37 time_t start = time(0);
Marrkk_92 16:21658c9e697c 38 void readEssentials();
Marrkk_92 16:21658c9e697c 39 bool menu_button_pressed = true;
Marrkk_92 16:21658c9e697c 40 bool reverse_button_pressed = true;
Marrkk_92 16:21658c9e697c 41 bool fly_request = true;
Marrkk_92 16:21658c9e697c 42 bool transmitting = false;
Marrkk_92 16:21658c9e697c 43 bool reverse = false;
Marrkk_92 16:21658c9e697c 44
Marrkk_92 16:21658c9e697c 45 int main()
Marrkk_92 16:21658c9e697c 46 {
Marrkk_92 16:21658c9e697c 47 powerOnOLED(1);
Marrkk_92 16:21658c9e697c 48 powerOnOLED(2);
Marrkk_92 16:21658c9e697c 49 powerOnOLED(3);
Marrkk_92 16:21658c9e697c 50
Marrkk_92 16:21658c9e697c 51 clearDisplay(1);
Marrkk_92 16:21658c9e697c 52 clearDisplay(2);
Marrkk_92 16:21658c9e697c 53 clearDisplay(3);
Marrkk_92 16:21658c9e697c 54
Marrkk_92 17:f8d3d1f0d8d1 55 //welcomeScreen();
Marrkk_92 16:21658c9e697c 56
Marrkk_92 16:21658c9e697c 57 while(1) {
Marrkk_92 16:21658c9e697c 58
Marrkk_92 17:f8d3d1f0d8d1 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 17:f8d3d1f0d8d1 67
Marrkk_92 16:21658c9e697c 68 switch (current_menu) {
dan 0:7dec7e9ac085 69
Marrkk_92 16:21658c9e697c 70 case 0:
Marrkk_92 16:21658c9e697c 71 //circular display (1)
Marrkk_92 16:21658c9e697c 72 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 73 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 74 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 75 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 76 showRacePercentageLeft(race_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 77
Marrkk_92 16:21658c9e697c 78 //main display (2)
Marrkk_92 16:21658c9e697c 79 displayTime();
Marrkk_92 16:21658c9e697c 80 checkTransmitter(transmitting);
Marrkk_92 16:21658c9e697c 81 displayVelocity(velocity);
Marrkk_92 16:21658c9e697c 82 displayThrottle(throttle_power, reverse);
Marrkk_92 17:f8d3d1f0d8d1 83 //displayAdvisedThrottle(advised_throttle_power);
Marrkk_92 16:21658c9e697c 84 updatePowerBars(power_out, power_in, MAX_POWER_OUT, MAX_POWER_IN);
Marrkk_92 17:f8d3d1f0d8d1 85
Marrkk_92 16:21658c9e697c 86 //circular display (3)
Marrkk_92 16:21658c9e697c 87 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 88 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 89 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 90 break;
Marrkk_92 17:f8d3d1f0d8d1 91
Marrkk_92 16:21658c9e697c 92 case 1:
Marrkk_92 16:21658c9e697c 93 //circular display (1)
Marrkk_92 16:21658c9e697c 94 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 95 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 96 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 97 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 98 showRacePercentageLeft(race_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 99
Marrkk_92 17:f8d3d1f0d8d1 100 //main display (2)
Marrkk_92 17:f8d3d1f0d8d1 101 displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
Marrkk_92 17:f8d3d1f0d8d1 102
Marrkk_92 16:21658c9e697c 103 //circular display (3)
Marrkk_92 16:21658c9e697c 104 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 105 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 106 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 107 break;
Marrkk_92 17:f8d3d1f0d8d1 108
Marrkk_92 16:21658c9e697c 109 case 2:
Marrkk_92 16:21658c9e697c 110 //circular display (1)
Marrkk_92 16:21658c9e697c 111 //updateProgressCircle(1, race_percentage_left);
Marrkk_92 16:21658c9e697c 112 race_minutes_done = time(0)/60; //TODO give starting point
Marrkk_92 16:21658c9e697c 113 showRaceMinutesDone(race_minutes_done);
Marrkk_92 16:21658c9e697c 114 showRaceMinutesLeft(race_minutes_left);
Marrkk_92 16:21658c9e697c 115 showRacePercentageLeft(race_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 116
Marrkk_92 16:21658c9e697c 117 //main display (2)
Marrkk_92 17:f8d3d1f0d8d1 118 displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
Marrkk_92 17:f8d3d1f0d8d1 119
Marrkk_92 16:21658c9e697c 120 //circular display (3)
Marrkk_92 16:21658c9e697c 121 //updateProgressCircle(3, battery_percentage_left);
Marrkk_92 16:21658c9e697c 122 showBatteryMinutesLeft(battery_minutes_left);
Marrkk_92 16:21658c9e697c 123 showBatteryPercentageLeft(battery_percentage_left);
Marrkk_92 17:f8d3d1f0d8d1 124 break;
Marrkk_92 16:21658c9e697c 125 default:
Marrkk_92 16:21658c9e697c 126 //empty, catch
Marrkk_92 17:f8d3d1f0d8d1 127 break;
Marrkk_92 16:21658c9e697c 128 }
stevep 4:81cea7a352b0 129 }
dan 0:7dec7e9ac085 130 }
Marrkk_92 16:21658c9e697c 131
Marrkk_92 16:21658c9e697c 132 int checkIfButtonPressed(int current_menu)
Marrkk_92 16:21658c9e697c 133 {
Marrkk_92 16:21658c9e697c 134 //--------------MENU BUTTON--------------------
Marrkk_92 16:21658c9e697c 135 if (menu_button == 0 && menu_button_pressed == false) {
Marrkk_92 16:21658c9e697c 136 menu_button_pressed = true;
Marrkk_92 16:21658c9e697c 137 start = time(0);
Marrkk_92 16:21658c9e697c 138 current_menu++;
Marrkk_92 17:f8d3d1f0d8d1 139 if (current_menu > 2) current_menu = 0;
Marrkk_92 16:21658c9e697c 140 clearDisplay(1);
Marrkk_92 16:21658c9e697c 141 clearDisplay(2);
Marrkk_92 16:21658c9e697c 142 clearDisplay(3);
Marrkk_92 16:21658c9e697c 143 } else if (menu_button == 1) menu_button_pressed = false;
Marrkk_92 16:21658c9e697c 144 //timeout for back to home screen
Marrkk_92 16:21658c9e697c 145 double seconds_since_start = difftime(time(0), start);
Marrkk_92 16:21658c9e697c 146 if (current_menu != 0 && seconds_since_start > MENU_TIMEOUT_TIME) {
Marrkk_92 16:21658c9e697c 147 current_menu = 0;
Marrkk_92 16:21658c9e697c 148 clearDisplay(1);
Marrkk_92 16:21658c9e697c 149 clearDisplay(2);
Marrkk_92 16:21658c9e697c 150 clearDisplay(3);
Marrkk_92 16:21658c9e697c 151 }
Marrkk_92 16:21658c9e697c 152
Marrkk_92 16:21658c9e697c 153 //--------------REVERSE BUTTON--------------------
Marrkk_92 16:21658c9e697c 154 if (reverse_button == 0 && reverse_button_pressed == false) {
Marrkk_92 16:21658c9e697c 155 reverse_button_pressed = true;
Marrkk_92 16:21658c9e697c 156 if (velocity < MAX_REVERSE_VELOCITY) reverse = !reverse;
Marrkk_92 16:21658c9e697c 157 } else if (reverse_button == 1) reverse_button_pressed = false;
Marrkk_92 16:21658c9e697c 158
Marrkk_92 16:21658c9e697c 159 //--------------FLY BUTTON--------------------
Marrkk_92 16:21658c9e697c 160 if (fly_button == 0 && fly_request == false) {
Marrkk_92 16:21658c9e697c 161 fly_request = true;
Marrkk_92 16:21658c9e697c 162 if (velocity > MIN_FLY_VELOCITY) fly_request = !fly_request;
Marrkk_92 16:21658c9e697c 163 } else if (fly_button == 1) fly_request = false;
Marrkk_92 16:21658c9e697c 164
Marrkk_92 16:21658c9e697c 165 //return for menu
Marrkk_92 16:21658c9e697c 166 return current_menu;
Marrkk_92 16:21658c9e697c 167 }
Marrkk_92 16:21658c9e697c 168
Marrkk_92 16:21658c9e697c 169 void readEssentials()
Marrkk_92 16:21658c9e697c 170 {
Marrkk_92 17:f8d3d1f0d8d1 171
Marrkk_92 16:21658c9e697c 172 //get current throttle set + adjust params -------- DEBUG
Marrkk_92 17:f8d3d1f0d8d1 173 //throttle_power = 500 - (500*analog_throttle);
Marrkk_92 17:f8d3d1f0d8d1 174 power_out = 580;
Marrkk_92 17:f8d3d1f0d8d1 175 power_in = 680;
Marrkk_92 17:f8d3d1f0d8d1 176 velocity = 0.1*throttle_power;
Marrkk_92 17:f8d3d1f0d8d1 177 battery_minutes_left = throttle_power/6;
Marrkk_92 17:f8d3d1f0d8d1 178 battery_percentage_left = throttle_power/5;
Marrkk_92 17:f8d3d1f0d8d1 179 motor_temperature = 68;
Marrkk_92 17:f8d3d1f0d8d1 180 battery_temperature = 24;
Marrkk_92 17:f8d3d1f0d8d1 181 battery_voltage = 45;
Marrkk_92 17:f8d3d1f0d8d1 182 rpm_motor = 6*throttle_power;
Marrkk_92 17:f8d3d1f0d8d1 183 voltage_in = 44;
Marrkk_92 17:f8d3d1f0d8d1 184 race_minutes_left = 12;
Marrkk_92 16:21658c9e697c 185 race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done);
Marrkk_92 16:21658c9e697c 186 }