Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of DashboardV4 by
main.cpp
- Committer:
- Marrkk_92
- Date:
- 2017-05-02
- Revision:
- 16:21658c9e697c
- Parent:
- 4:81cea7a352b0
- Child:
- 17:f8d3d1f0d8d1
File content as of revision 16:21658c9e697c:
#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);
//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) {
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;
}
