Mark Bruijn
/
DashboardV4
dashboardv4solarboat
Fork of mbed_blinky by
main.cpp@17:f8d3d1f0d8d1, 2017-05-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |