new battery bar

Dependencies:   CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed

Revision:
18:aa6feb4b73e7
Parent:
17:91ba27c14991
Child:
22:8fdbdfbdf74a
--- a/main.cpp	Mon May 22 18:16:09 2017 +0000
+++ b/main.cpp	Mon May 22 18:39:20 2017 +0000
@@ -41,6 +41,13 @@
 //init throttle
 AnalogIn analogThrottle(STEER_THROTTLE);
 
+//initialize steering wheel buttons
+
+//NEEDS FIXING!!!!!!!!!!!
+DigitalIn menu_button(STEER_MENU);
+DigitalIn fly_button(STEER_FLY);
+DigitalIn reverse_button(STEER_REV);
+
 // initialze onboard leds
 DigitalOut ledError(LED3);
 DigitalOut ledSD(LED1);
@@ -54,6 +61,7 @@
 //external classes
 extern DataAcquisition daq;
 extern Telemetrics telemetrics;
+extern Dashboard dash;
 
 //external variables
 extern long long int starttime;
@@ -69,6 +77,37 @@
 void power();
 void test();
 void background();
+void screens();
+
+//screen function declarations
+void readEssentials();
+
+//Screen placeholder 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;
+
 
 // Thread 0 - DO NOT CHANGE THIS!
 int main() {  
@@ -83,11 +122,13 @@
     Thread threadpower;
     Thread threadtest;
     Thread threadthrottle;
+    Thread threaddash;
     
     // start threads
     threadpower.start(&power);
     threadbg.start(&background);
     threadtest.start(&test);
+    threaddash.start(&screens);
     threadthrottle.start(&readThrottle);
 
     telemetrics.enable();
@@ -148,6 +189,148 @@
 
 //DigitalOut buckCan(BUCK2);
     buckXSens = 0;
-    buckScreen = 0;
+    buckScreen = 1;
     buck24V = 1;
 }
+
+void screens()
+{
+    dash.powerOnOLED(1);
+    dash.powerOnOLED(2);
+    dash.powerOnOLED(3);
+
+    dash.clearDisplay(1);
+    dash.clearDisplay(2);
+    dash.clearDisplay(3);
+
+    while(1) {
+        
+        Thread::wait(100);
+
+        //listen to menu button
+        current_menu = checkIfButtonPressed(current_menu);
+        //listen to steering wheel at all time
+        readEssentials();
+        //check for errors at all time
+        dash.checkForErrors(current_menu, velocity, battery_temperature, motor_temperature, battery_percentage_left, battery_minutes_left);
+        
+       
+        switch (current_menu) {
+
+            case 0:
+                //circular display (1)
+                //updateProgressCircle(1, race_percentage_left);
+                race_minutes_done = time(0)/60;         //TODO give starting point
+                dash.showRaceMinutesDone(race_minutes_done);
+                dash.showRaceMinutesLeft(race_minutes_left);
+                dash.showRacePercentageLeft(race_percentage_left);
+
+                //main display (2)
+                dash.displayTime();
+                dash.checkTransmitter(transmitting);
+                dash.displayVelocity(velocity);
+                dash.displayThrottle(throttle_power, reverse);
+                //displayAdvisedThrottle(advised_throttle_power);
+                dash.updatePowerBars(power_out, power_in);
+
+                //circular display (3)
+                //updateProgressCircle(3, battery_percentage_left);
+                dash.showBatteryMinutesLeft(battery_minutes_left);
+                dash.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
+                dash.showRaceMinutesDone(race_minutes_done);
+                dash.showRaceMinutesLeft(race_minutes_left);
+                dash.showRacePercentageLeft(race_percentage_left);
+
+                //main display (2)
+                dash.displayData1(rpm_motor, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
+
+                //circular display (3)
+                //updateProgressCircle(3, battery_percentage_left);
+                dash.showBatteryMinutesLeft(battery_minutes_left);
+                dash.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
+                dash.showRaceMinutesDone(race_minutes_done);
+                dash.showRaceMinutesLeft(race_minutes_left);
+                dash.showRacePercentageLeft(race_percentage_left);
+
+                //main display (2)
+                dash.displayData2(battery_voltage, battery_temperature, motor_temperature, voltage_in, power_out, power_in);
+
+                //circular display (3)
+                //updateProgressCircle(3, battery_percentage_left);
+                dash.showBatteryMinutesLeft(battery_minutes_left);
+                dash.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 > 2) current_menu = 0;
+        dash.clearDisplay(1);
+        dash.clearDisplay(2);
+        dash.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;
+        dash.clearDisplay(1);
+        dash.clearDisplay(2);
+        dash.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 = 100*(1 - analogThrottle);
+    power_out = 580;
+    power_in = 680;
+    velocity = 0.1*throttle_power;
+    battery_minutes_left = throttle_power/6;
+    battery_percentage_left = throttle_power/5;
+    motor_temperature = 68;
+    battery_temperature = 24;
+    battery_voltage = 45;
+    rpm_motor = throttle_power;
+    voltage_in = 44;
+    race_minutes_left = 12;
+    race_percentage_left = 100*race_minutes_done/(race_minutes_left+race_minutes_done);
+}
\ No newline at end of file