new battery bar

Dependencies:   CAN_IDs CanControl Dashboard PinDetect PowerControl mbed-rtos mbed

Revision:
22:8fdbdfbdf74a
Parent:
18:aa6feb4b73e7
Child:
23:970a5603da43
--- a/main.cpp	Mon May 22 18:46:01 2017 +0000
+++ b/main.cpp	Tue May 23 12:01:03 2017 +0000
@@ -15,7 +15,7 @@
 *******************************************************************************/
 
 // uncomment to send debug information
-#define DEBUG
+//#define DEBUG
 
 //include 3rd party libraries
 #include "mbed.h" //needs to be revision 136 else SD filesystem will not work
@@ -29,11 +29,9 @@
 #include "Dashboard.h"
 
 #define SPEED_THRESH 0.02 //threshold for setting speed to prevent CAN spam
-
-// initialize serial connection for debug
-#ifdef DEBUG
+#define DEBUG
+// initialize serial connection for debug and file retrieval
 RawSerial pc(SERIAL_TX, SERIAL_RX);
-#endif
 
 // initialize canbus
 CAN can(CAN_RD, CAN_TD);
@@ -78,6 +76,14 @@
 void test();
 void background();
 void screens();
+void resetScreens();
+
+//varables for screens
+extern batterydata * battery;
+extern variable * velocitysqrd;
+extern variable * motortemp;
+//ticker for resetting screens
+Ticker ticker;
 
 //screen function declarations
 void readEssentials();
@@ -108,7 +114,6 @@
 bool transmitting = false;
 bool reverse = false;
 
-
 // Thread 0 - DO NOT CHANGE THIS!
 int main() {  
 #ifdef DEBUG
@@ -123,15 +128,24 @@
     Thread threadtest;
     Thread threadthrottle;
     Thread threaddash;
-    
+    Thread threadresetscr;
+        
     // start threads
     threadpower.start(&power);
+    Thread::wait(50);
     threadbg.start(&background);
+    Thread::wait(50);
     threadtest.start(&test);
+    Thread::wait(50);
+    
+    toggleControlSys(0x01);
+    
     threaddash.start(&screens);
+    Thread::wait(50);
     threadthrottle.start(&readThrottle);
-
+    Thread::wait(50);
     telemetrics.enable();
+    Thread::wait(50);
     daq.enable(starttime);
     
     //BMS message parser, now imlpemented in DAQ lib
@@ -162,8 +176,14 @@
 //thread functions
 void readThrottle() {
     float throttleread;
+    int rev;
     while(1) {
-        throttleread = 2*(0.5 - analogThrottle.read());
+        if (reverse) {
+            rev = -1;   
+        } else {
+            rev = 1;
+        }
+        throttleread = rev*(1 - analogThrottle.read());
         sendMotorSpeed(throttleread);
         Thread::wait(10);   
     }
@@ -188,21 +208,34 @@
     led24V=1;
 
 //DigitalOut buckCan(BUCK2);
-    buckXSens = 0;
+    buckXSens = 1;
     buckScreen = 1;
     buck24V = 1;
 }
 
+void resetScreens() {
+    
+    Thread::wait(10000);
+
+    dash.powerOnOLED(1);
+    dash.powerOnOLED(2);
+    dash.powerOnOLED(3);
+    
+    dash.clearDisplay(1);
+    dash.clearDisplay(2);
+    dash.clearDisplay(3); 
+}
+
 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);
@@ -220,16 +253,16 @@
             case 0:
                 //circular display (1)
                 //updateProgressCircle(1, race_percentage_left);
-                race_minutes_done = time(0)/60;         //TODO give starting point
+                race_minutes_done = daq.time/60000;         //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.displayTime(daq.time + starttime);
                 dash.checkTransmitter(transmitting);
                 dash.displayVelocity(velocity);
-                dash.displayThrottle(throttle_power, reverse);
+                dash.displayThrottle(abs(throttle_power), reverse);
                 //displayAdvisedThrottle(advised_throttle_power);
                 dash.updatePowerBars(power_out, power_in);
 
@@ -242,7 +275,7 @@
             case 1:
                 //circular display (1)
                 //updateProgressCircle(1, race_percentage_left);
-                race_minutes_done = time(0)/60;         //TODO give starting point
+                race_minutes_done = daq.time/60000;         //TODO give starting point
                 dash.showRaceMinutesDone(race_minutes_done);
                 dash.showRaceMinutesLeft(race_minutes_left);
                 dash.showRacePercentageLeft(race_percentage_left);
@@ -259,7 +292,7 @@
             case 2:
                 //circular display (1)
                 //updateProgressCircle(1, race_percentage_left);
-                race_minutes_done = time(0)/60;         //TODO give starting point
+                race_minutes_done = daq.time/60000;         //TODO give starting point
                 dash.showRaceMinutesDone(race_minutes_done);
                 dash.showRaceMinutesLeft(race_minutes_left);
                 dash.showRacePercentageLeft(race_percentage_left);
@@ -287,18 +320,21 @@
         start = time(0);
         current_menu++;
         if (current_menu > 2) current_menu = 0;
-        dash.clearDisplay(1);
-        dash.clearDisplay(2);
-        dash.clearDisplay(3);
+        
+        //clear displays and reset settings
+        dash.powerOnOLED(1);
+        dash.powerOnOLED(2);
+        dash.powerOnOLED(3);        
+        
     } else if (menu_button == 1) menu_button_pressed = false;
     //timeout for back to home screen
-    double seconds_since_start = difftime(time(0), start);
+    /*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) {
@@ -316,19 +352,20 @@
     return current_menu;
 }
 
+//power_out is now power_in minus power_out, can only fix 
 void readEssentials()
 {
 
     //get current throttle set + adjust params  -------- DEBUG
-    throttle_power = 100*(1 - analogThrottle);
-    power_out = 580;
+    throttle_power = 100*speed;
+    power_out = (int) ((battery->current) * (battery->voltage));
     power_in = 680;
-    velocity = 0.1*throttle_power;
+    velocity = (int) (3.6*sqrt((velocitysqrd->value))); //velocity in kph
     battery_minutes_left = throttle_power/6;
-    battery_percentage_left = throttle_power/5;
-    motor_temperature = 68;
-    battery_temperature = 24;
-    battery_voltage = 45;
+    battery_percentage_left = battery->SOC;
+    motor_temperature = (int) (motortemp->value);
+    battery_temperature = (int) (battery->maxtemp);
+    battery_voltage = (int) (battery->voltage);
     rpm_motor = throttle_power;
     voltage_in = 44;
     race_minutes_left = 12;