new battery bar

Dependencies:   CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
zathorix
Date:
Mon May 22 18:39:20 2017 +0000
Parent:
17:91ba27c14991
Child:
19:9d7cf29508fa
Child:
21:0d5e4d19eaab
Commit message:
Screens not working yet

Changed in this revision

PowerControl.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/PowerControl.lib	Mon May 22 18:16:09 2017 +0000
+++ b/PowerControl.lib	Mon May 22 18:39:20 2017 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/kwasymodo/code/PowerControl/#54792b95c570
+https://developer.mbed.org/users/kwasymodo/code/PowerControl/#4621f98a450e
--- 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