Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Files at this revision

API Documentation at this revision

Comitter:
TickTock
Date:
Sat Mar 16 02:07:09 2013 +0000
Parent:
25:ddf0ec209f03
Child:
27:6bd073c33977
Commit message:
Got brake screen working except doesn't clear

Changed in this revision

displayModes.cpp 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
utility.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/displayModes.cpp	Fri Mar 15 04:28:34 2013 +0000
+++ b/displayModes.cpp	Sat Mar 16 02:07:09 2013 +0000
@@ -112,7 +112,7 @@
 
 void braking (bool force, bool prdata=false){
     unsigned long targetBraking, regenBraking, speed;
-    static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 1000000;
+    static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 1000;
     short rpm;
     unsigned long temp;
     static unsigned char lastPressure[4] = {200,200,200,200};
@@ -169,18 +169,18 @@
 
     if(targetBraking>50){
         temp = targetBraking;
-        temp *= 200;
+        temp *=200;
         temp /= maxTarget;
         t = (char) temp;
-        if (t>220) t=220;
+        if (t>200) t=200;
         temp = regenBraking;
         temp *= tarDivReg;
-        temp *= 200;
         temp /= maxTarget;
+        temp /= 5;
         r = (char) temp;
-        if (r>220) r=220;
+        if (r>200) r=200;
         if(lr!=r&&prdata){
-            tt.foreground(Red);
+            tt.foreground(Yellow);
             tt.set_font((unsigned char*) Arial28x28);
             tt.locate(100,40);
             printf("%d %d    \n",regenBraking,maxRegen);
@@ -188,12 +188,18 @@
             printf("%3.1f (%3.1f%s)    \n",(float)tarDivReg/10,(float)regenBraking*tarDivReg/targetBraking/10,"%");
         }    
         if(lt!=t&&prdata){
-            tt.foreground(Red);
+            tt.foreground(Yellow);
             tt.set_font((unsigned char*) Arial28x28);
             tt.locate(100,10);
             printf("%d %d    \n",targetBraking,maxTarget);
         }
+        if (r>t) t=r;  //Should never happen
         if((lr!=r||lt!=t)&&!prdata){
+            tt.fillrect(200,10,300,239-t,Navy);
+            tt.fillrect(200,239-t,300,239-r,Red);
+            tt.fillrect(200,239-r,300,239,Green);
+        }
+        /*if((lr!=r||lt!=t)&&!prdata){
             if(t<lt){
                 tt.fillrect(200,238-lt,300,237-t,Navy);
                 if(t<lr) lr=t;
@@ -205,7 +211,7 @@
             } else {
                 tt.fillrect(200,238-r,300,238-lr,Green);
             }
-        }
+        }*/
         lt=t;
         lr=r;
     }
@@ -308,36 +314,36 @@
             tt.foreground(Yellow);
             tt.background(DarkCyan);
             tt.set_font((unsigned char*) Arial12x12);
-            sprintf(sTemp1,"");
+            sprintf(sTemp2,"");
             switch(dtMode){
                 case 0:
-                    sprintf(sTemp2,"Year");
+                    sprintf(sTemp1,"Year");
                     break;
                 case 1:
-                    sprintf(sTemp2,"Month");
+                    sprintf(sTemp1,"Month");
                     break;
                 case 2:
-                    sprintf(sTemp2,"Day");
+                    sprintf(sTemp1,"Day");
                     break;
                 case 3:
-                    sprintf(sTemp2,"Hour");
+                    sprintf(sTemp1,"Hour");
                     break;
                 case 4:
-                    sprintf(sTemp2,"Minute");
+                    sprintf(sTemp1,"Minute");
                     break;
                 case 5:
-                    sprintf(sTemp2,"Second");
+                    sprintf(sTemp1,"Second");
                     break;
                 case 6:
-                    sprintf(sTemp2,"Select");
+                    sprintf(sTemp1,"Select");
                     break;
                 default:
                     break;
             }
             showButton(0,1,sTemp1,sTemp2,3,3);               
-            sprintf(sTemp2,"   UP");
+            sprintf(sTemp1,"   UP");
             showButton(1,1,sTemp1,sTemp2,3,3);               
-            sprintf(sTemp2,"  DOWN");
+            sprintf(sTemp1,"  DOWN");
             showButton(2,1,sTemp1,sTemp2,3,3);               
         }
     }
--- a/main.cpp	Fri Mar 15 04:28:34 2013 +0000
+++ b/main.cpp	Sat Mar 16 02:07:09 2013 +0000
@@ -18,6 +18,8 @@
 #include "EthernetPowerControl.h"
 #include "utility.h"
 #include "displayModes.h"
+#include "GraphicsDisplay.h"
+#include "SPI_TFTx2.h"
 #include "TOUCH_TFTx2.h"
 
 LocalFileSystem local("local");
@@ -61,7 +63,7 @@
 volatile int secsNoTouch = 0;
 volatile bool canIdle;
 volatile bool userIdle;
-bool touched=0; //flag to read touchscreen
+bool touched=false; //flag to read touchscreen
 char counter = 0;
 unsigned char dMode[2] = {dteScreen,brakeScreen}; //display mode
 unsigned char sMode = 0; // setup mode
@@ -97,45 +99,29 @@
     touchpad.rise(&touch_ISR);
     tt.wfi();               // enable interrupt on touch
     dled = 0.8; // turn on display LED 80%
+
     timer.start() ;
     RTC_Init(); // start the RTC Interrupts that sync the timer
     struct tm t; // pointer to a static tm structure
     NVIC_SetPriority(TIMER3_IRQn, 1); //set ticker priority
     NVIC_SetPriority(CAN_IRQn, 2); //higher than can (so RTC sync works)
+
+
     seconds = time(NULL);
     t = *localtime(&seconds) ;
-    secsNoMsg = 0;
-    secsNoTouch = 0;
-
     // is it a date before 2012 ?
-    /*if ((t.tm_year + 1900) < 2012 ) {
-        // before 2012, so the RTC probably lost power
-        // So, set a near-recent date in 2012
-        // enter people-values here
-        t.tm_year = 2013 ; // 28 May 2012
-        t.tm_mon = 3 ; // 1 to 12
-        t.tm_mday = 11;
-        t.tm_hour = 21; // 12:59:56 PM (after noon)
-        t.tm_min = 05;
-        t.tm_sec = 00;
-
-        // adjust for tm structure required values
-        t.tm_year = t.tm_year - 1900;
-        t.tm_mon = t.tm_mon - 1;
-
+    if ((t.tm_year + 1900) < 2012 ) {
+        // before 2013 so update year to make date entry easier
+        t.tm_year = 2013 - 1900;
         // set the RTC
         set_time(mktime(&t));
         seconds = time(NULL);
-
-        //    printf("Set RTC to:\n" );
-        //    strftime(sTemp, 32, "%a %m/%d/%Y %X", localtime(&seconds));
-        //    printf("%s\n", sTemp); // DAY MM/DD/YYYY HH:MM:SS
-    }*/
+    }
     t = *localtime(&seconds) ;
     strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t);
     logMsg(sTemp);
 
-    // Look for new binary 
+    // Look for new binary on thumbdrive
     // Can't make this work right now since USB doesn't attach the right timestamp (so new binary isn't loaded)
     /*cfile = fopen("/fs/CANary.bin", "rb");
     if (cfile!=NULL){ //found a new binary on the thumbdrive so copy it over
@@ -169,10 +155,14 @@
         }
     }*/
 
-    // Look for config file
+    secsNoMsg = 0;
+    secsNoTouch = 0;
+
+    // Read config file
     readConfig();
+    touched=false;
+    secsNoTouch=2;
 
-    //ticker.attach(&tickerISR, 60);  //poll cellpair data every minute
     while (true) {
         if (!logOpen) { // Open new file if one is not already open
             if(logEn){ //logging enable
@@ -187,14 +177,14 @@
                     sprintf(sTemp,"\nUnable to open %s\n\n\n\n",fileName);
                     logMsg(sTemp);
                     logEn=false;
-                    spkr.beep(1000,0.2);
+                    spkr.beep(1000,0.25);
                 } else {
                     logOpen = true;
                     readPointer=writePointer;
                     sprintf(sTemp,"Starting Can Log %s\n",fileName);
                     logMsg(sTemp);
                     logTS();
-                    spkr.beep(2000,0.2);
+                    spkr.beep(2000,0.25);
                 }
             }//logging enabled
         } else { // if (logOpen)
@@ -203,7 +193,7 @@
                 if (file == NULL) {
                     logOpen = false;
                     sprintf(sTemp,"Failed to append log file.\n\n");
-                    spkr.beep(1000,0.2);
+                    spkr.beep(1000,0.25);
                     logMsg(sTemp);
                     logEn=false;
                 } else {
@@ -219,7 +209,7 @@
             } // if > 1/16 full, canbus has stopped, or PB1 pressed
         } // if logOpen
         if (canIdle&&userIdle) { // canbus idle --> sleep to save power
-             if (logOpen){
+            if (logOpen){
                 fclose(file);
             } // if (logOpen)*/
             seconds = time(NULL);
@@ -240,13 +230,11 @@
                 tt.wfi(); //enable touch interrupt
                 //__wfi(); // freeze CPU and wait for interrupt (from canbus or touch)
                 Sleep();
-                //DeepPowerDown();
             }
             secsNoTouch=0;
             canIdle=secsNoMsg>canTimeout;
             userIdle=secsNoTouch>userTimeout;
             dled=0.8; // turn on display LED
-            //sprintf(sTemp,"Waking uC.\n");
             seconds = time(NULL);
             t = *localtime(&seconds) ;
             strftime(sTemp, 40, "Waking: %a %m/%d/%Y %X\n", &t);
@@ -275,7 +263,6 @@
                 secsNoTouch +=2; // increment to prevent double touch
                 if (lastTouch.x>320){
                     i=1;
-                    //lastTouch.x-=320;
                 } else {
                     i=0;
                 }
@@ -315,6 +302,7 @@
                                     sprintf(sTemp,"Saving config file.\n");
                                     logMsg(sTemp);
                                     saveConfig();
+                                    spkr.beep(2000,0.25);
                                 }
                                 break;
                             case 01:
@@ -382,11 +370,6 @@
             showCP=true;
         }
         display=display<1?display+1:0; // toggle display
-        //spkr.beep(1000,0.2);
-        //wait(0.25);
         updateDisplay(display);
-        //updateDisplay(1);
-        //spkr.beep(2000,0.2);
-        //wait(0.25);
     } //while (true)
 }
\ No newline at end of file
--- a/utility.cpp	Fri Mar 15 04:28:34 2013 +0000
+++ b/utility.cpp	Sat Mar 16 02:07:09 2013 +0000
@@ -198,6 +198,14 @@
     fprintf(cfile,"x1_pp %d\r\n",tt.x1_pp);
     fprintf(cfile,"y1_pp %d\r\n",tt.y1_pp);
     fprintf(cfile,"x_mid %d\r\n",tt.x_mid);
+    if (dMode[0]==config1Screen)
+        fprintf(cfile,"dMode0 %d\r\n",dteScreen);
+    else
+        fprintf(cfile,"dMode0 %d\r\n",dMode[0]);
+    if (dMode[1]==config1Screen)
+        fprintf(cfile,"dMode1 %d\r\n",dteScreen);
+    else
+        fprintf(cfile,"dMode1 %d\r\n",dMode[1]);
     fclose(cfile);
 }
 
@@ -228,6 +236,8 @@
         fscanf(cfile, "x1_pp %d\r\n", &tt.x1_pp ) ;
         fscanf(cfile, "y1_pp %d\r\n", &tt.y1_pp ) ;
         fscanf(cfile, "x_mid %d\r\n", &tt.x_mid ) ;
+        fscanf(cfile, "dMode0 %d\r\n", &dMode[0] ) ;
+        fscanf(cfile, "dMode1 %d\r\n", &dMode[1] ) ;
         fclose(cfile);
     }
 }