test fork

Dependencies:   SPI_TFTx2 SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary_9341 by Tick Tock

Committer:
TickTock
Date:
Sat Apr 06 04:18:49 2013 +0000
Revision:
48:d1ce92104a1f
Parent:
47:9cc7d876dd6d
Child:
49:a3d2c5bb3cfa
Merged in gg's edits.  Fixed config load (problem with floats)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TickTock 13:62e0f7f39ff5 1 //displayModes.cpp
TickTock 37:fea2c1d52c5f 2 #include "displayModes.h"
TickTock 13:62e0f7f39ff5 3
TickTock 25:ddf0ec209f03 4 char sTemp1[40];
TickTock 24:6cf76ed8c432 5 char sTemp2[16];
TickTock 13:62e0f7f39ff5 6
TickTock 42:4533b13b297d 7 void printLast (bool force, bool showButtons){
TickTock 13:62e0f7f39ff5 8 CANMessage msg;
TickTock 13:62e0f7f39ff5 9 tt.locate(0,6);
TickTock 13:62e0f7f39ff5 10 tt.foreground(Red);
TickTock 13:62e0f7f39ff5 11 tt.background(Yellow);
TickTock 13:62e0f7f39ff5 12 if(force) tt.cls(); // Just clear screen if forced - always update display
TickTock 13:62e0f7f39ff5 13 tt.set_font((unsigned char*) Arial12x12_prop); // select the font
TickTock 13:62e0f7f39ff5 14 for(int i=0; i<19; i++){
TickTock 13:62e0f7f39ff5 15 msg = lastMsg[i+indexOffset];
TickTock 13:62e0f7f39ff5 16 printf("%03x : %02x %02x %02x %02x %02x %02x %02x %02x \n",msg.id,msg.data[0],msg.data[1],msg.data[2],msg.data[3],msg.data[4],msg.data[5],msg.data[6],msg.data[7]);
TickTock 13:62e0f7f39ff5 17 }
TickTock 42:4533b13b297d 18 if((sMode==1)&&showButtons){
TickTock 25:ddf0ec209f03 19 tt.foreground(Yellow);
TickTock 25:ddf0ec209f03 20 tt.background(DarkCyan);
TickTock 25:ddf0ec209f03 21 tt.set_font((unsigned char*) Arial12x12);
TickTock 25:ddf0ec209f03 22 sprintf(sTemp1,"<up>");
TickTock 25:ddf0ec209f03 23 sprintf(sTemp2,"");
TickTock 25:ddf0ec209f03 24 showButton(0,0,sTemp1,sTemp2,3,3);
TickTock 25:ddf0ec209f03 25 sprintf(sTemp1,"<down>");
TickTock 25:ddf0ec209f03 26 showButton(2,0,sTemp1,sTemp2,3,3);
TickTock 25:ddf0ec209f03 27 }
TickTock 13:62e0f7f39ff5 28 }
TickTock 13:62e0f7f39ff5 29
TickTock 42:4533b13b297d 30 void printChanged (bool force, bool showButtons){
TickTock 13:62e0f7f39ff5 31 CANMessage msg;
TickTock 13:62e0f7f39ff5 32 unsigned char i,j;
TickTock 13:62e0f7f39ff5 33 tt.locate(0,6);
TickTock 13:62e0f7f39ff5 34 tt.foreground(Red);
TickTock 13:62e0f7f39ff5 35 tt.background(Yellow);
TickTock 13:62e0f7f39ff5 36 if(force) tt.cls(); // Just clear screen if forced - always update display
TickTock 13:62e0f7f39ff5 37 tt.set_font((unsigned char*) Arial12x12_prop); // select the font
TickTock 13:62e0f7f39ff5 38 i=0;
TickTock 13:62e0f7f39ff5 39 j=indexOffset;
TickTock 13:62e0f7f39ff5 40 do{
TickTock 13:62e0f7f39ff5 41 j=j<99?j+1:j;
TickTock 13:62e0f7f39ff5 42 if(msgChanged[j]>0){
TickTock 13:62e0f7f39ff5 43 msg = lastMsg[j];
TickTock 13:62e0f7f39ff5 44 printf("%03x : %02x %02x %02x %02x %02x %02x %02x %02x \n",msg.id,msg.data[0],msg.data[1],msg.data[2],msg.data[3],msg.data[4],msg.data[5],msg.data[6],msg.data[7]);
TickTock 13:62e0f7f39ff5 45 i++;
TickTock 13:62e0f7f39ff5 46 }// if changed
TickTock 13:62e0f7f39ff5 47 }while(i<19&&j<99);
TickTock 42:4533b13b297d 48 if((sMode==1)&&showButtons){
TickTock 40:0e6e71a7323f 49 tt.foreground(Yellow);
TickTock 40:0e6e71a7323f 50 tt.background(DarkCyan);
TickTock 40:0e6e71a7323f 51 tt.set_font((unsigned char*) Arial12x12);
TickTock 40:0e6e71a7323f 52 sprintf(sTemp1,"<up>");
TickTock 40:0e6e71a7323f 53 sprintf(sTemp2,"");
TickTock 40:0e6e71a7323f 54 showButton(0,0,sTemp1,sTemp2,3,3);
TickTock 44:6262a9fd1e56 55 sprintf(sTemp1," <down>");
TickTock 44:6262a9fd1e56 56 showButton(2,0,sTemp1,sTemp2,3,3);
TickTock 44:6262a9fd1e56 57 sprintf(sTemp1," Reset");
TickTock 44:6262a9fd1e56 58 sprintf(sTemp2," Baseline");
TickTock 40:0e6e71a7323f 59 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 40:0e6e71a7323f 60 }
TickTock 13:62e0f7f39ff5 61 }
TickTock 13:62e0f7f39ff5 62
TickTock 42:4533b13b297d 63 void printLog (bool force, bool showButtons){
TickTock 13:62e0f7f39ff5 64 static unsigned char lastDisplayLoc = 0;
TickTock 13:62e0f7f39ff5 65 if(force||displayLoc!=lastDisplayLoc){ //only update if changed
TickTock 13:62e0f7f39ff5 66 tt.foreground(Amber);
TickTock 13:62e0f7f39ff5 67 tt.background(Black);
TickTock 13:62e0f7f39ff5 68 tt.cls();
TickTock 13:62e0f7f39ff5 69 tt.locate(0,6);
TickTock 13:62e0f7f39ff5 70 tt.set_font((unsigned char*) Arial12x12);
TickTock 13:62e0f7f39ff5 71 for(int i=0; i<19; i++){
TickTock 13:62e0f7f39ff5 72 printf("%s",displayLog[displayLoc]);
TickTock 13:62e0f7f39ff5 73 displayLoc=displayLoc>17?0:displayLoc+1;
TickTock 13:62e0f7f39ff5 74 }
TickTock 13:62e0f7f39ff5 75 }
TickTock 13:62e0f7f39ff5 76 lastDisplayLoc=displayLoc;
TickTock 13:62e0f7f39ff5 77 }
TickTock 13:62e0f7f39ff5 78
TickTock 42:4533b13b297d 79 void mainDisplay (bool force, bool showButtons){
TickTock 13:62e0f7f39ff5 80 unsigned short gids, SOC, packV;
TickTock 13:62e0f7f39ff5 81 static unsigned short lgids=0, lSOC=0, lpackV=0;
TickTock 44:6262a9fd1e56 82 static float lkW=0, laccV=0;;
TickTock 13:62e0f7f39ff5 83 CANMessage msg;
TickTock 13:62e0f7f39ff5 84
TickTock 13:62e0f7f39ff5 85 msg = lastMsg[indexLastMsg[0x5bc]]; //Get gids
TickTock 13:62e0f7f39ff5 86 gids = (msg.data[0]<<2)+(msg.data[1]>>6);
TickTock 13:62e0f7f39ff5 87 msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC
TickTock 13:62e0f7f39ff5 88 SOC = (msg.data[0]<<2)+(msg.data[1]>>6);
TickTock 13:62e0f7f39ff5 89 msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts
TickTock 13:62e0f7f39ff5 90 packV = (msg.data[2]<<2)+(msg.data[3]>>6);
TickTock 13:62e0f7f39ff5 91
TickTock 13:62e0f7f39ff5 92 tt.background(Navy);
TickTock 38:155ec32c5e91 93 tt.foreground(Yellow);
TickTock 38:155ec32c5e91 94 tt.set_font((unsigned char*) Arial28x28);
TickTock 13:62e0f7f39ff5 95 if(force) tt.cls();
TickTock 48:d1ce92104a1f 96 if(skin==ttSkin){
TickTock 48:d1ce92104a1f 97 if(force||gids!=lgids){
TickTock 48:d1ce92104a1f 98 tt.locate(10,10);
TickTock 48:d1ce92104a1f 99 printf("%4d gids \n",gids);
TickTock 48:d1ce92104a1f 100 tt.locate(20,40);
TickTock 48:d1ce92104a1f 101 printf("%4.1f kWh \n",(float)gids*0.08);
TickTock 48:d1ce92104a1f 102 tt.set_font((unsigned char*) SCProSB31x55);
TickTock 48:d1ce92104a1f 103 tt.foreground(Green);
TickTock 48:d1ce92104a1f 104 tt.locate(60,96);
TickTock 48:d1ce92104a1f 105 printf("%4.1f mi \n",(float)(gids-5)*0.31); // Approx for now
TickTock 48:d1ce92104a1f 106 lgids=gids;
TickTock 48:d1ce92104a1f 107 tt.foreground(Yellow);
TickTock 48:d1ce92104a1f 108 tt.set_font((unsigned char*) Arial28x28);
TickTock 48:d1ce92104a1f 109 }
TickTock 48:d1ce92104a1f 110 if(force||SOC!=lSOC){
TickTock 48:d1ce92104a1f 111 tt.locate(200,10);
TickTock 48:d1ce92104a1f 112 printf("%4.1f%s\n",(float)SOC/10,"% ");
TickTock 48:d1ce92104a1f 113 lSOC=SOC;
TickTock 48:d1ce92104a1f 114 }
TickTock 48:d1ce92104a1f 115 if(force||packV!=lpackV){
TickTock 48:d1ce92104a1f 116 tt.locate(200,200);
TickTock 48:d1ce92104a1f 117 printf("%4.1fV \n",(float)packV/2);
TickTock 48:d1ce92104a1f 118 lpackV=packV;
TickTock 48:d1ce92104a1f 119 }
TickTock 48:d1ce92104a1f 120 if(force||accV!=laccV){
TickTock 48:d1ce92104a1f 121 tt.locate(20,200);
TickTock 48:d1ce92104a1f 122 printf("%3.1fV \n",accV);
TickTock 48:d1ce92104a1f 123 laccV=accV;
TickTock 48:d1ce92104a1f 124 }
TickTock 48:d1ce92104a1f 125 if(force||kW!=lkW){
TickTock 48:d1ce92104a1f 126 tt.locate(180,40);
TickTock 48:d1ce92104a1f 127 printf("%3.2fkW \n",kW);
TickTock 48:d1ce92104a1f 128 lkW=kW;
TickTock 48:d1ce92104a1f 129 }
TickTock 48:d1ce92104a1f 130 }else {//if(skin==ggSkin){
TickTock 48:d1ce92104a1f 131 if(force||gids!=lgids){
TickTock 48:d1ce92104a1f 132 tt.locate(10,10);
TickTock 48:d1ce92104a1f 133 printf("%4d GIDs \n",gids);
TickTock 48:d1ce92104a1f 134
TickTock 48:d1ce92104a1f 135 tt.locate(40,40); // gg - add GIDs Percent of 281
TickTock 48:d1ce92104a1f 136 printf("%4.1f%s \n", (float)gids*0.355872, "% ") ;
TickTock 48:d1ce92104a1f 137 tt.locate(20,70);
TickTock 48:d1ce92104a1f 138 //printf("%4.1f kWh \n",(float)gids*0.08); // is input, not usable
TickTock 48:d1ce92104a1f 139 printf("%4.1f kwh \n",(float)gids*0.075); // gg - closer to usable
TickTock 48:d1ce92104a1f 140
TickTock 48:d1ce92104a1f 141 tt.set_font((unsigned char*) SCProSB31x55);
TickTock 48:d1ce92104a1f 142 tt.foreground(Green);
TickTock 48:d1ce92104a1f 143 //tt.locate(60,96);
TickTock 48:d1ce92104a1f 144 tt.locate(60,116); // gg - move down a little
TickTock 48:d1ce92104a1f 145 printf("%4.1f mi \n",(float)(gids-5)*0.31); // Approx for now
TickTock 48:d1ce92104a1f 146 lgids=gids;
TickTock 48:d1ce92104a1f 147 tt.foreground(Yellow);
TickTock 48:d1ce92104a1f 148 tt.set_font((unsigned char*) Arial28x28);
TickTock 48:d1ce92104a1f 149 }
TickTock 48:d1ce92104a1f 150
TickTock 48:d1ce92104a1f 151 if(force||SOC!=lSOC){
TickTock 48:d1ce92104a1f 152 tt.locate(200,10);
TickTock 48:d1ce92104a1f 153 printf("%4.1f%s\n",(float)SOC/10,"% ");
TickTock 48:d1ce92104a1f 154 lSOC=SOC;
TickTock 48:d1ce92104a1f 155 }
TickTock 48:d1ce92104a1f 156 if(force||packV!=lpackV){
TickTock 48:d1ce92104a1f 157 tt.locate(200,200);
TickTock 48:d1ce92104a1f 158 printf("%4.1fV \n",(float)packV/2);
TickTock 48:d1ce92104a1f 159 lpackV=packV;
TickTock 48:d1ce92104a1f 160 }
TickTock 48:d1ce92104a1f 161 if(force||accV!=laccV){
TickTock 48:d1ce92104a1f 162 tt.locate(20,200);
TickTock 48:d1ce92104a1f 163 printf("%3.1fV \n",accV);
TickTock 48:d1ce92104a1f 164 laccV=accV;
TickTock 48:d1ce92104a1f 165 }
TickTock 48:d1ce92104a1f 166 if(force||kW!=lkW){
TickTock 48:d1ce92104a1f 167 tt.locate(160,40); // gg - move left to keep from wrap
TickTock 48:d1ce92104a1f 168 printf("%3.2fkw \n",kW); // use small w to save space
TickTock 48:d1ce92104a1f 169 lkW=kW;
TickTock 48:d1ce92104a1f 170 }
TickTock 35:5acbd8a64a89 171 }
TickTock 13:62e0f7f39ff5 172 }
TickTock 13:62e0f7f39ff5 173
TickTock 42:4533b13b297d 174 void braking (bool force, bool showButtons, bool prdata=false){
TickTock 28:f24ac05645d9 175 unsigned long targetBraking, regenBraking;
TickTock 28:f24ac05645d9 176 static unsigned long maxTarget = 1000, maxRegen = 1000, tarDivReg = 1000;
TickTock 28:f24ac05645d9 177 unsigned long temp;
TickTock 28:f24ac05645d9 178 static unsigned char lastPressure[4] = {200,200,200,200};
TickTock 28:f24ac05645d9 179 unsigned char i,r,t;
TickTock 37:fea2c1d52c5f 180 static unsigned char lr=0, lt=0;
TickTock 37:fea2c1d52c5f 181 signed short steering;
TickTock 37:fea2c1d52c5f 182 unsigned short s;
TickTock 37:fea2c1d52c5f 183 static unsigned short ls;
TickTock 37:fea2c1d52c5f 184 unsigned char throttle;
TickTock 37:fea2c1d52c5f 185 static unsigned char lthrottle;
TickTock 48:d1ce92104a1f 186 short steerOutBounds = 0 ;
TickTock 28:f24ac05645d9 187 CANMessage msg;
TickTock 28:f24ac05645d9 188
TickTock 48:d1ce92104a1f 189 //---------------
TickTock 37:fea2c1d52c5f 190 msg = lastMsg[indexLastMsg[0x180]]; //Get Throttle position
TickTock 37:fea2c1d52c5f 191 throttle = msg.data[5];
TickTock 48:d1ce92104a1f 192
TickTock 48:d1ce92104a1f 193 // ---- steering ----
TickTock 37:fea2c1d52c5f 194 msg = lastMsg[indexLastMsg[0x002]]; //Get Steering angle
TickTock 37:fea2c1d52c5f 195 steering = (msg.data[1]<<8)+msg.data[0];
TickTock 48:d1ce92104a1f 196
TickTock 48:d1ce92104a1f 197 if(skin==ttSkin){
TickTock 48:d1ce92104a1f 198 s= (unsigned short) ((steering/10)+160)%310; // this modulo wraps display
TickTock 48:d1ce92104a1f 199 }else{// if(skin==ggSkin){
TickTock 48:d1ce92104a1f 200 // do not go off screen left or right. gg - steering
TickTock 48:d1ce92104a1f 201 short ss = (short) ((steering/15)+160); // less gain 10 -> 15
TickTock 48:d1ce92104a1f 202 if(ss<0) { ss=0; steerOutBounds = 1; }
TickTock 48:d1ce92104a1f 203 if(ss>310) { ss=310; steerOutBounds = 1; }
TickTock 48:d1ce92104a1f 204 s = (unsigned short) ss;
TickTock 48:d1ce92104a1f 205 }
TickTock 48:d1ce92104a1f 206
TickTock 48:d1ce92104a1f 207 //--------------
TickTock 28:f24ac05645d9 208 msg = lastMsg[indexLastMsg[0x1cb]]; //Get Target and Regen
TickTock 28:f24ac05645d9 209 regenBraking = (msg.data[0]<<3)+(msg.data[1]>>5);
TickTock 28:f24ac05645d9 210 targetBraking = (msg.data[2]<<3)+(msg.data[3]>>5);
TickTock 28:f24ac05645d9 211 if ((targetBraking>50)&&(regenBraking>50)){
TickTock 28:f24ac05645d9 212 temp = targetBraking;
TickTock 28:f24ac05645d9 213 temp *= 1000;
TickTock 28:f24ac05645d9 214 temp /= regenBraking;
TickTock 28:f24ac05645d9 215 if (temp<tarDivReg) tarDivReg=temp;
TickTock 28:f24ac05645d9 216 }
TickTock 28:f24ac05645d9 217 if (targetBraking>maxTarget) maxTarget=targetBraking;
TickTock 28:f24ac05645d9 218 if (regenBraking>maxRegen) maxRegen=regenBraking;
TickTock 28:f24ac05645d9 219
TickTock 28:f24ac05645d9 220 msg = lastMsg[indexLastMsg[0x1ca]]; //Get brake pressure
TickTock 28:f24ac05645d9 221 tt.background(Navy);
TickTock 28:f24ac05645d9 222 if (force) {
TickTock 28:f24ac05645d9 223 tt.cls();
TickTock 28:f24ac05645d9 224 tt.rect(0,111,170,239,White);
TickTock 28:f24ac05645d9 225 tt.line(0,207,170,207,White);
TickTock 28:f24ac05645d9 226 tt.line(0,175,170,175,White);
TickTock 28:f24ac05645d9 227 tt.line(0,143,170,143,White);
TickTock 28:f24ac05645d9 228 lastPressure[0] = 200;
TickTock 28:f24ac05645d9 229 lastPressure[1] = 200;
TickTock 28:f24ac05645d9 230 lastPressure[2] = 200;
TickTock 28:f24ac05645d9 231 lastPressure[3] = 200;
TickTock 28:f24ac05645d9 232 }
TickTock 48:d1ce92104a1f 233
TickTock 48:d1ce92104a1f 234 // display the steering position small square
TickTock 37:fea2c1d52c5f 235 if (s!=ls){
TickTock 48:d1ce92104a1f 236 // steering position has moved
TickTock 48:d1ce92104a1f 237 //tt.fillrect(ls,5,ls+9,14, Navy); // blank old position
TickTock 48:d1ce92104a1f 238
TickTock 48:d1ce92104a1f 239 //---- gg - steering red
TickTock 48:d1ce92104a1f 240 // box is blanked by top of Braking bar, so move up 5
TickTock 48:d1ce92104a1f 241 tt.fillrect(ls,0,ls+9,9, Navy); // blank old position
TickTock 48:d1ce92104a1f 242 if( steerOutBounds != 0 ) // draw out-of-bounds as a red box
TickTock 48:d1ce92104a1f 243 tt.fillrect(s,0,s+9,9, Red); // draw out-of-bounds position
TickTock 48:d1ce92104a1f 244 else
TickTock 48:d1ce92104a1f 245 tt.fillrect(s,0,s+9,9, White); // draw new in-bounds position
TickTock 48:d1ce92104a1f 246
TickTock 48:d1ce92104a1f 247 //----
TickTock 37:fea2c1d52c5f 248 //tt.foreground(Yellow);
TickTock 37:fea2c1d52c5f 249 //tt.set_font((unsigned char*) Arial28x28);
TickTock 37:fea2c1d52c5f 250 //tt.locate(10,40);
TickTock 37:fea2c1d52c5f 251 //printf("%d %d \n",s,ls);
TickTock 37:fea2c1d52c5f 252 ls=s;
TickTock 37:fea2c1d52c5f 253 }
TickTock 48:d1ce92104a1f 254
TickTock 37:fea2c1d52c5f 255 if (throttle!=lthrottle){
TickTock 37:fea2c1d52c5f 256 if (throttle>239) throttle=239;
TickTock 37:fea2c1d52c5f 257 if(throttle<lthrottle){
TickTock 37:fea2c1d52c5f 258 tt.fillrect(280,239-lthrottle,310,239-throttle,Navy);
TickTock 37:fea2c1d52c5f 259 }else{
TickTock 37:fea2c1d52c5f 260 tt.fillrect(280,239-throttle,310,239,Yellow);
TickTock 37:fea2c1d52c5f 261 }
TickTock 37:fea2c1d52c5f 262 lthrottle=throttle;
TickTock 37:fea2c1d52c5f 263 }
TickTock 37:fea2c1d52c5f 264
TickTock 28:f24ac05645d9 265 // plot bar graph for each wheel pressure
TickTock 28:f24ac05645d9 266 for (i=0; i<4; i++){
TickTock 28:f24ac05645d9 267 if (msg.data[i]<239) {
TickTock 28:f24ac05645d9 268 if (msg.data[i]>lastPressure[i]){
TickTock 28:f24ac05645d9 269 tt.fillrect(10+40*i,239-msg.data[i],40+40*i,239,Red);
TickTock 28:f24ac05645d9 270 } else if (msg.data[i]<lastPressure[i]) {
TickTock 28:f24ac05645d9 271 tt.fillrect(10+40*i,238-lastPressure[i],40+40*i,238-msg.data[i],Navy);
TickTock 28:f24ac05645d9 272 }
TickTock 28:f24ac05645d9 273 lastPressure[i]=msg.data[i];
TickTock 28:f24ac05645d9 274 }
TickTock 28:f24ac05645d9 275 }
TickTock 28:f24ac05645d9 276
TickTock 28:f24ac05645d9 277 temp = targetBraking;
TickTock 28:f24ac05645d9 278 temp *=200;
TickTock 28:f24ac05645d9 279 temp /= maxTarget;
TickTock 28:f24ac05645d9 280 t = (char) temp;
TickTock 28:f24ac05645d9 281 if (t>200) t=200;
TickTock 28:f24ac05645d9 282 temp = regenBraking;
TickTock 28:f24ac05645d9 283 temp *= tarDivReg;
TickTock 28:f24ac05645d9 284 temp /= maxTarget;
TickTock 28:f24ac05645d9 285 temp /= 5;
TickTock 28:f24ac05645d9 286 r = (char) temp;
TickTock 28:f24ac05645d9 287 if (r>200) r=200;
TickTock 28:f24ac05645d9 288 if(lr!=r&&prdata){
TickTock 28:f24ac05645d9 289 tt.foreground(Yellow);
TickTock 28:f24ac05645d9 290 tt.set_font((unsigned char*) Arial28x28);
TickTock 28:f24ac05645d9 291 tt.locate(100,40);
TickTock 28:f24ac05645d9 292 printf("%d %d \n",regenBraking,maxRegen);
TickTock 28:f24ac05645d9 293 tt.locate(100,70);
TickTock 28:f24ac05645d9 294 printf("%3.1f (%3.1f%s) \n",(float)tarDivReg/10,(float)regenBraking*tarDivReg/targetBraking/10,"%");
TickTock 28:f24ac05645d9 295 }
TickTock 28:f24ac05645d9 296 if(lt!=t&&prdata){
TickTock 28:f24ac05645d9 297 tt.foreground(Yellow);
TickTock 28:f24ac05645d9 298 tt.set_font((unsigned char*) Arial28x28);
TickTock 28:f24ac05645d9 299 tt.locate(100,10);
TickTock 28:f24ac05645d9 300 printf("%d %d \n",targetBraking,maxTarget);
TickTock 28:f24ac05645d9 301 }
TickTock 28:f24ac05645d9 302 if (r>t) t=r; //Should never happen
TickTock 28:f24ac05645d9 303 if((lr!=r||lt!=t)&&!prdata){
TickTock 37:fea2c1d52c5f 304 tt.fillrect(190,10,260,239-t,Navy);
TickTock 37:fea2c1d52c5f 305 tt.fillrect(190,239-t,260,239-r,Red);
TickTock 37:fea2c1d52c5f 306 tt.fillrect(190,239-r,260,239,Green);
TickTock 28:f24ac05645d9 307 }
TickTock 28:f24ac05645d9 308 lt=t;
TickTock 28:f24ac05645d9 309 lr=r;
TickTock 28:f24ac05645d9 310 }
TickTock 28:f24ac05645d9 311
TickTock 42:4533b13b297d 312 void cpData(bool force, bool showButtons){
TickTock 36:dbd39c315258 313 short unsigned max, min, jv, i, bd;
TickTock 36:dbd39c315258 314 unsigned avg;
TickTock 36:dbd39c315258 315 if(force){
TickTock 36:dbd39c315258 316 tt.foreground(White);
TickTock 36:dbd39c315258 317 tt.background(Navy);
TickTock 36:dbd39c315258 318 tt.set_font((unsigned char*) Arial12x12_prop); // select the font
TickTock 36:dbd39c315258 319 max=0;
TickTock 36:dbd39c315258 320 min=9999;
TickTock 36:dbd39c315258 321 avg=0;
TickTock 36:dbd39c315258 322 for(i=0; i<96; i++){
TickTock 36:dbd39c315258 323 bd=(battData[i*2+3]<<8)+battData[i*2+4];
TickTock 36:dbd39c315258 324 avg+=bd;
TickTock 36:dbd39c315258 325 if(bd>max) max=bd;
TickTock 36:dbd39c315258 326 if(bd<min) min=bd;
TickTock 36:dbd39c315258 327 }
TickTock 36:dbd39c315258 328 avg /= 96;
TickTock 36:dbd39c315258 329 if(min<3713) {
TickTock 36:dbd39c315258 330 jv=avg-(max-avg)*1.5;
TickTock 36:dbd39c315258 331 } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement
TickTock 36:dbd39c315258 332 jv=0;
TickTock 36:dbd39c315258 333 }
TickTock 36:dbd39c315258 334 tt.cls();
TickTock 36:dbd39c315258 335 tt.locate(0,6);
TickTock 36:dbd39c315258 336 printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",max,min,avg,jv,battData[224+5],battData[224+8],battData[224+11],battData[224+14]);
TickTock 36:dbd39c315258 337 tt.locate(0,36);
TickTock 36:dbd39c315258 338 for(i=0; i<16; i++){
TickTock 36:dbd39c315258 339 printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n",i*6+1,i*6+6,(battData[i*12+3]<<8)+battData[i*12+4],(battData[i*12+5]<<8)+battData[i*12+6],(battData[i*12+7]<<8)+battData[i*12+8],(battData[i*12+9]<<8)+battData[i*12+10],(battData[i*12+11]<<8)+battData[i*12+12],(battData[i*12+13]<<8)+battData[i*12+14]);
TickTock 36:dbd39c315258 340 }
TickTock 36:dbd39c315258 341 tt.rect(8+0*41,16,40+0*41,28,Green);
TickTock 36:dbd39c315258 342 tt.rect(8+1*41,16,40+1*41,28,Yellow);
TickTock 36:dbd39c315258 343 //tt.rect(8+2*41,16,40+2*41,28,White);
TickTock 36:dbd39c315258 344 tt.rect(8+3*41,16,40+3*41,28,Red);
TickTock 36:dbd39c315258 345 for(i=0; i<96; i++){
TickTock 36:dbd39c315258 346 bd=(battData[i*2+3]<<8)+battData[i*2+4];
TickTock 36:dbd39c315258 347 if(bd>0){
TickTock 36:dbd39c315258 348 if(bd==max) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Green);
TickTock 36:dbd39c315258 349 //if(bd==avg) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,White);
TickTock 36:dbd39c315258 350 if(bd==min) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Yellow);
TickTock 36:dbd39c315258 351 if(bd<jv) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Red);
TickTock 36:dbd39c315258 352 }
TickTock 36:dbd39c315258 353 }
TickTock 36:dbd39c315258 354 showCP=false;
TickTock 36:dbd39c315258 355 }
TickTock 42:4533b13b297d 356 if((sMode==1)&&showButtons){
TickTock 36:dbd39c315258 357 tt.foreground(Yellow);
TickTock 36:dbd39c315258 358 tt.background(DarkCyan);
TickTock 36:dbd39c315258 359 tt.set_font((unsigned char*) Arial12x12);
TickTock 44:6262a9fd1e56 360 sprintf(sTemp1," Request");
TickTock 44:6262a9fd1e56 361 sprintf(sTemp2," CP data");
TickTock 44:6262a9fd1e56 362 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 44:6262a9fd1e56 363 }
TickTock 44:6262a9fd1e56 364 }
TickTock 44:6262a9fd1e56 365
TickTock 44:6262a9fd1e56 366 //----------------
TickTock 48:d1ce92104a1f 367 // gg - cpbars
TickTock 48:d1ce92104a1f 368 void cpBarPlot(bool force, bool showButtons){
TickTock 48:d1ce92104a1f 369 short unsigned max, min, jv, i, bd;
TickTock 48:d1ce92104a1f 370 unsigned avg;
TickTock 48:d1ce92104a1f 371 short unsigned nBar[96] ; // bar height over min
TickTock 48:d1ce92104a1f 372
TickTock 48:d1ce92104a1f 373 if(force){
TickTock 48:d1ce92104a1f 374 tt.foreground(White);
TickTock 48:d1ce92104a1f 375 tt.background(Navy);
TickTock 48:d1ce92104a1f 376 tt.set_font((unsigned char*) Arial12x12_prop); // select the font
TickTock 48:d1ce92104a1f 377 max=0;
TickTock 48:d1ce92104a1f 378 min=9999;
TickTock 48:d1ce92104a1f 379 avg=0;
TickTock 48:d1ce92104a1f 380
TickTock 48:d1ce92104a1f 381 // calc each cell-pair voltage, find max and min
TickTock 48:d1ce92104a1f 382 for(i=0; i<96; i++){
TickTock 48:d1ce92104a1f 383 bd=(battData[i*2+3]<<8)+battData[i*2+4];
TickTock 48:d1ce92104a1f 384 nBar[i] = bd; // init to bar height
TickTock 48:d1ce92104a1f 385 avg+=bd;
TickTock 48:d1ce92104a1f 386 if(bd>max) max=bd;
TickTock 48:d1ce92104a1f 387 if(bd<min) min=bd;
TickTock 48:d1ce92104a1f 388 }
TickTock 48:d1ce92104a1f 389 avg /= 96;
TickTock 48:d1ce92104a1f 390
TickTock 48:d1ce92104a1f 391 if(min<3713) {
TickTock 48:d1ce92104a1f 392 jv=avg-(max-avg)*1.5;
TickTock 48:d1ce92104a1f 393 } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement
TickTock 48:d1ce92104a1f 394 jv=0;
TickTock 48:d1ce92104a1f 395 }
TickTock 48:d1ce92104a1f 396
TickTock 48:d1ce92104a1f 397 //------------------
TickTock 48:d1ce92104a1f 398 tt.cls();
TickTock 48:d1ce92104a1f 399
TickTock 48:d1ce92104a1f 400 // show as vertical bar plot
TickTock 48:d1ce92104a1f 401 int xWinMin = 26;
TickTock 48:d1ce92104a1f 402 int xWinMax = 316;
TickTock 48:d1ce92104a1f 403 int yWinMin = 50;
TickTock 48:d1ce92104a1f 404 int yWinMax = 150;
TickTock 48:d1ce92104a1f 405 // draw the Bar Graph Frame, 2 pixels wide
TickTock 48:d1ce92104a1f 406 tt.rect( xWinMin-1,yWinMin-1, xWinMax+1,yWinMax+1,Red);
TickTock 48:d1ce92104a1f 407 tt.rect( xWinMin-2,yWinMin-2, xWinMax+2,yWinMax+2,Green);
TickTock 48:d1ce92104a1f 408
TickTock 48:d1ce92104a1f 409 // bar heights
TickTock 48:d1ce92104a1f 410 int height = yWinMax - yWinMin ;
TickTock 48:d1ce92104a1f 411 int iBarValMax = max - min ; // zero to N
TickTock 48:d1ce92104a1f 412
TickTock 48:d1ce92104a1f 413 //----------------
TickTock 48:d1ce92104a1f 414 if( iBarValMax == 0 ) {
TickTock 48:d1ce92104a1f 415 // for testing
TickTock 48:d1ce92104a1f 416 min = 3501 ;
TickTock 48:d1ce92104a1f 417 //max = min + 95*2 ; // for tall values
TickTock 48:d1ce92104a1f 418 max = min + 95/4 ; // for small values
TickTock 48:d1ce92104a1f 419 avg = ( max + min ) / 2;
TickTock 48:d1ce92104a1f 420 iBarValMax = max - min ; // zero to N
TickTock 48:d1ce92104a1f 421 for(int i=0; i<96; i++) {
TickTock 48:d1ce92104a1f 422 //nBar[i] = i*2 + min ; // test tall values
TickTock 48:d1ce92104a1f 423 nBar[i] = i/4 + min ; // test small values
TickTock 48:d1ce92104a1f 424 }
TickTock 48:d1ce92104a1f 425 }
TickTock 48:d1ce92104a1f 426 //---------------
TickTock 48:d1ce92104a1f 427 float nBarScale = float(height) / iBarValMax ;
TickTock 48:d1ce92104a1f 428 if( nBarScale < 0.1 ) nBarScale = 0.1 ;
TickTock 48:d1ce92104a1f 429
TickTock 48:d1ce92104a1f 430 // do the Bar-height scaling
TickTock 48:d1ce92104a1f 431 for(int i=0; i<96; i++){
TickTock 48:d1ce92104a1f 432 nBar[i] -= min ; // now, 0 to N = iBinValMax
TickTock 48:d1ce92104a1f 433 nBar[i] *= nBarScale ; // scale, as needed
TickTock 48:d1ce92104a1f 434 }
TickTock 48:d1ce92104a1f 435
TickTock 48:d1ce92104a1f 436 // values, for now
TickTock 48:d1ce92104a1f 437 tt.locate( 0, yWinMax+40 );
TickTock 48:d1ce92104a1f 438 printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",
TickTock 48:d1ce92104a1f 439 max,min,avg,jv,
TickTock 48:d1ce92104a1f 440 battData[224+5],battData[224+8],
TickTock 48:d1ce92104a1f 441 battData[224+11],battData[224+14]);
TickTock 48:d1ce92104a1f 442
TickTock 48:d1ce92104a1f 443 // label the X axis (approximate)
TickTock 48:d1ce92104a1f 444 tt.locate( 2, yWinMax+5); printf("%04d", min );
TickTock 48:d1ce92104a1f 445 //tt.locate( 2, yWinMin-14 ); printf("%04d = %04d from %1.4f", max, int( height / nBarScale ) + min, nBarScale );
TickTock 48:d1ce92104a1f 446 tt.locate( 2, yWinMin-14 ); printf("%04d = (%d) mv range.", max , max - min );
TickTock 48:d1ce92104a1f 447
TickTock 48:d1ce92104a1f 448 //---------------
TickTock 48:d1ce92104a1f 449 // show the bars
TickTock 48:d1ce92104a1f 450 int nBarWidth = 2 ;
TickTock 48:d1ce92104a1f 451 int nBarSpace = 1 ; // 1 for testing
TickTock 48:d1ce92104a1f 452
TickTock 48:d1ce92104a1f 453 int xPos = xWinMin + 2 ; // start one from the left
TickTock 48:d1ce92104a1f 454
TickTock 48:d1ce92104a1f 455 for( int i=0; i<96; i++) {
TickTock 48:d1ce92104a1f 456 height = nBar[i] ;
TickTock 48:d1ce92104a1f 457 if( height > 100 ) height = 100 ; // clip tops
TickTock 48:d1ce92104a1f 458
TickTock 48:d1ce92104a1f 459 // draw the bar, is always inside x-window
TickTock 48:d1ce92104a1f 460 tt.fillrect( xPos,yWinMax-height, xPos+nBarWidth-1,yWinMax, Green);
TickTock 48:d1ce92104a1f 461
TickTock 48:d1ce92104a1f 462 // tic mark the y axis each 5
TickTock 48:d1ce92104a1f 463 if(i%5 == 4){
TickTock 48:d1ce92104a1f 464 tt.line( xPos,yWinMax+2, xPos,yWinMax+5, White); // a white tick mark
TickTock 48:d1ce92104a1f 465 tt.line( xPos+1,yWinMax+2, xPos+1,yWinMax+5, White); // a white tick mark, to widen
TickTock 48:d1ce92104a1f 466 //tt.rect( xPos,yWinMax+2, xPos+1,yWinMax+5, White); // a white 2-wide tick mark is SLOW
TickTock 48:d1ce92104a1f 467 }
TickTock 48:d1ce92104a1f 468 // label the y axis each 10
TickTock 48:d1ce92104a1f 469 if(i%10 == 9){
TickTock 48:d1ce92104a1f 470 tt.locate( xPos-6, yWinMax+8 );
TickTock 48:d1ce92104a1f 471 printf("%02d\n", i+1 );
TickTock 48:d1ce92104a1f 472 }
TickTock 48:d1ce92104a1f 473
TickTock 48:d1ce92104a1f 474 // step to the next bar position
TickTock 48:d1ce92104a1f 475 xPos += nBarWidth + nBarSpace ;
TickTock 48:d1ce92104a1f 476 }
TickTock 48:d1ce92104a1f 477
TickTock 48:d1ce92104a1f 478 showCP=false;
TickTock 48:d1ce92104a1f 479 }
TickTock 48:d1ce92104a1f 480
TickTock 48:d1ce92104a1f 481 // handle the button
TickTock 48:d1ce92104a1f 482 if(sMode==1&&showButtons){
TickTock 48:d1ce92104a1f 483 tt.foreground(Yellow);
TickTock 48:d1ce92104a1f 484 tt.background(DarkCyan);
TickTock 48:d1ce92104a1f 485 tt.set_font((unsigned char*) Arial12x12);
TickTock 48:d1ce92104a1f 486 sprintf(sTemp1," Request");
TickTock 48:d1ce92104a1f 487 sprintf(sTemp2," CP data");
TickTock 48:d1ce92104a1f 488 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 48:d1ce92104a1f 489 }
TickTock 48:d1ce92104a1f 490 }
TickTock 48:d1ce92104a1f 491
TickTock 48:d1ce92104a1f 492 //----------------
TickTock 44:6262a9fd1e56 493 // gg - hist
TickTock 47:9cc7d876dd6d 494 void cpHistogram(bool force, bool showButtons){
TickTock 44:6262a9fd1e56 495 short unsigned max, min, jv, i, bd;
TickTock 44:6262a9fd1e56 496 unsigned avg;
TickTock 44:6262a9fd1e56 497 if(force){
TickTock 44:6262a9fd1e56 498 tt.foreground(White);
TickTock 44:6262a9fd1e56 499 tt.background(Navy);
TickTock 44:6262a9fd1e56 500 tt.set_font((unsigned char*) Arial12x12_prop); // select the font
TickTock 44:6262a9fd1e56 501 max=0;
TickTock 44:6262a9fd1e56 502 min=9999;
TickTock 44:6262a9fd1e56 503 avg=0;
TickTock 44:6262a9fd1e56 504 for(i=0; i<96; i++){
TickTock 44:6262a9fd1e56 505 bd=(battData[i*2+3]<<8)+battData[i*2+4];
TickTock 44:6262a9fd1e56 506 avg+=bd;
TickTock 44:6262a9fd1e56 507 if(bd>max) max=bd;
TickTock 44:6262a9fd1e56 508 if(bd<min) min=bd;
TickTock 44:6262a9fd1e56 509 }
TickTock 44:6262a9fd1e56 510 avg /= 96;
TickTock 44:6262a9fd1e56 511 if(min<3713) {
TickTock 44:6262a9fd1e56 512 jv=avg-(max-avg)*1.5;
TickTock 44:6262a9fd1e56 513 } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement
TickTock 44:6262a9fd1e56 514 jv=0;
TickTock 44:6262a9fd1e56 515 }
TickTock 44:6262a9fd1e56 516
TickTock 44:6262a9fd1e56 517 //------------------
TickTock 44:6262a9fd1e56 518 tt.cls();
TickTock 44:6262a9fd1e56 519
TickTock 44:6262a9fd1e56 520 // show as histogram
TickTock 44:6262a9fd1e56 521 int xWinMin = 20;
TickTock 44:6262a9fd1e56 522 int xWinMax = 300;
TickTock 44:6262a9fd1e56 523 int yWinMin = 50;
TickTock 44:6262a9fd1e56 524 int yWinMax = 150;
TickTock 44:6262a9fd1e56 525 // draw the Histogram Frame, 2 pixels wide
TickTock 44:6262a9fd1e56 526 tt.rect( xWinMin-1,yWinMin-1, xWinMax+1,yWinMax+1,Red);
TickTock 44:6262a9fd1e56 527 tt.rect( xWinMin-2,yWinMin-2, xWinMax+2,yWinMax+2,Green);
TickTock 44:6262a9fd1e56 528
TickTock 44:6262a9fd1e56 529 // binning
TickTock 44:6262a9fd1e56 530 short nBin[301] ; // bins to count Min values in nBin[0], etc.
TickTock 44:6262a9fd1e56 531 int height ;
TickTock 44:6262a9fd1e56 532 int iBinIndxMax = 300 ;
TickTock 44:6262a9fd1e56 533 int iBinValMax = max - min ; // zero to N
TickTock 44:6262a9fd1e56 534 if( iBinValMax > iBinIndxMax ) iBinValMax = iBinIndxMax ;
TickTock 44:6262a9fd1e56 535
TickTock 44:6262a9fd1e56 536 // clean the bins
TickTock 44:6262a9fd1e56 537 for(int i=0; i<=iBinIndxMax; i++) {
TickTock 44:6262a9fd1e56 538 nBin[i] = 0;
TickTock 44:6262a9fd1e56 539 }
TickTock 44:6262a9fd1e56 540
TickTock 44:6262a9fd1e56 541 // do the bin counting
TickTock 44:6262a9fd1e56 542 for(int i=0; i<96; i++){
TickTock 44:6262a9fd1e56 543 bd=(battData[i*2+3]<<8)+battData[i*2+4] - min ;
TickTock 44:6262a9fd1e56 544 if( bd > iBinValMax ) bd = iBinValMax ;
TickTock 44:6262a9fd1e56 545 nBin[bd] ++ ;
TickTock 44:6262a9fd1e56 546 }
TickTock 44:6262a9fd1e56 547
TickTock 44:6262a9fd1e56 548 //----------------
TickTock 44:6262a9fd1e56 549 if( iBinValMax == 0 ) {
TickTock 44:6262a9fd1e56 550 // for testing
TickTock 44:6262a9fd1e56 551 min = 10 ;
TickTock 44:6262a9fd1e56 552 max = 50 ;
TickTock 44:6262a9fd1e56 553 avg = ( max + min ) / 2;
TickTock 44:6262a9fd1e56 554 iBinValMax = max - min ;
TickTock 44:6262a9fd1e56 555 for(int i=0; i<=(iBinValMax/2); i++) {
TickTock 44:6262a9fd1e56 556 nBin[i] = i ;
TickTock 44:6262a9fd1e56 557 nBin[iBinValMax-i] = i ;
TickTock 44:6262a9fd1e56 558 }
TickTock 44:6262a9fd1e56 559 }
TickTock 44:6262a9fd1e56 560
TickTock 48:d1ce92104a1f 561 // the values, for now
TickTock 48:d1ce92104a1f 562 tt.locate( 0, yWinMax+40 );
TickTock 48:d1ce92104a1f 563 printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",max,min,avg,jv,battData[224+5],battData[224+8],battData[224+11],battData[224+14]);
TickTock 48:d1ce92104a1f 564
TickTock 44:6262a9fd1e56 565 //---------------
TickTock 44:6262a9fd1e56 566 // show the bars
TickTock 44:6262a9fd1e56 567 int nBarWidth = 3 ;
TickTock 44:6262a9fd1e56 568 int nBarSpace = 1 ; // 1 for testing
TickTock 44:6262a9fd1e56 569
TickTock 44:6262a9fd1e56 570 int xPos = (xWinMin + xWinMax) / 2 ;
TickTock 44:6262a9fd1e56 571 xPos -= (avg-min) * (nBarWidth + nBarSpace) ;
TickTock 44:6262a9fd1e56 572
TickTock 44:6262a9fd1e56 573 for( int i=0; i<=iBinValMax; i++) {
TickTock 44:6262a9fd1e56 574 height = 4 * nBin[i] ;
TickTock 44:6262a9fd1e56 575 if( height > 100 ) height = 100 ; // clip tops
TickTock 44:6262a9fd1e56 576
TickTock 44:6262a9fd1e56 577 // if inside the window, draw the bar
TickTock 44:6262a9fd1e56 578 if( ( xPos + nBarWidth < xWinMax ) && ( xPos > xWinMin ) )
TickTock 44:6262a9fd1e56 579 tt.fillrect( xPos,yWinMax-height, xPos+nBarWidth-1,yWinMax, Green);
TickTock 44:6262a9fd1e56 580
TickTock 44:6262a9fd1e56 581 // step to the next bar position
TickTock 44:6262a9fd1e56 582 xPos += nBarWidth + nBarSpace ;
TickTock 44:6262a9fd1e56 583 }
TickTock 44:6262a9fd1e56 584
TickTock 44:6262a9fd1e56 585 showCP=false;
TickTock 44:6262a9fd1e56 586 }
TickTock 44:6262a9fd1e56 587
TickTock 44:6262a9fd1e56 588 // handle the button
TickTock 47:9cc7d876dd6d 589 if(sMode==1&&showButtons){
TickTock 44:6262a9fd1e56 590 tt.foreground(Yellow);
TickTock 44:6262a9fd1e56 591 tt.background(DarkCyan);
TickTock 44:6262a9fd1e56 592 tt.set_font((unsigned char*) Arial12x12);
TickTock 44:6262a9fd1e56 593 sprintf(sTemp1," Request");
TickTock 44:6262a9fd1e56 594 sprintf(sTemp2," CP data");
TickTock 36:dbd39c315258 595 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 596 }
TickTock 36:dbd39c315258 597 }
TickTock 36:dbd39c315258 598
TickTock 48:d1ce92104a1f 599 //---------------
TickTock 42:4533b13b297d 600 void config1(bool force, bool showButtons){
TickTock 36:dbd39c315258 601 if (force) {
TickTock 36:dbd39c315258 602 tt.background(Black);
TickTock 36:dbd39c315258 603 tt.cls();
TickTock 36:dbd39c315258 604 }
TickTock 36:dbd39c315258 605 tt.foreground(Yellow);
TickTock 36:dbd39c315258 606 tt.background(DarkCyan);
TickTock 36:dbd39c315258 607 tt.set_font((unsigned char*) Arial12x12);
TickTock 36:dbd39c315258 608 sprintf(sTemp1," Calibrate");
TickTock 36:dbd39c315258 609 sprintf(sTemp2," Touch");
TickTock 36:dbd39c315258 610 showButton(0,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 611 sprintf(sTemp1," Reset");
TickTock 36:dbd39c315258 612 sprintf(sTemp2,"");
TickTock 36:dbd39c315258 613 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 614 sprintf(sTemp1," Save");
TickTock 36:dbd39c315258 615 sprintf(sTemp2," Config");
TickTock 36:dbd39c315258 616 showButton(2,0,sTemp1,sTemp2,3,3);
TickTock 48:d1ce92104a1f 617
TickTock 48:d1ce92104a1f 618 //------- second row -----
TickTock 36:dbd39c315258 619 if (logEn) {
TickTock 36:dbd39c315258 620 sprintf(sTemp1," Disable");
TickTock 36:dbd39c315258 621 } else {
TickTock 36:dbd39c315258 622 sprintf(sTemp1," Enable");
TickTock 36:dbd39c315258 623 }
TickTock 36:dbd39c315258 624 sprintf(sTemp2," Logging");
TickTock 36:dbd39c315258 625 showButton(0,1,sTemp1,sTemp2,3,3);
TickTock 48:d1ce92104a1f 626
TickTock 36:dbd39c315258 627 if (repeatPoll) {
TickTock 36:dbd39c315258 628 sprintf(sTemp1," Disable");
TickTock 36:dbd39c315258 629 } else {
TickTock 36:dbd39c315258 630 sprintf(sTemp1," Enable");
TickTock 36:dbd39c315258 631 }
TickTock 36:dbd39c315258 632 sprintf(sTemp2," Auto CP");
TickTock 36:dbd39c315258 633 showButton(1,1,sTemp1,sTemp2,3,3);
TickTock 48:d1ce92104a1f 634
TickTock 48:d1ce92104a1f 635 // add Enable/Disable Batt Log gg - yesBattLog
TickTock 48:d1ce92104a1f 636 if (yesBattLog) {
TickTock 48:d1ce92104a1f 637 sprintf(sTemp1," Disable");
TickTock 48:d1ce92104a1f 638 } else {
TickTock 48:d1ce92104a1f 639 sprintf(sTemp1," Enable");
TickTock 48:d1ce92104a1f 640 }
TickTock 48:d1ce92104a1f 641 sprintf(sTemp2," Batt Log");
TickTock 48:d1ce92104a1f 642 showButton(2,1,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 643 }
TickTock 36:dbd39c315258 644
TickTock 42:4533b13b297d 645 void pbScreen(bool force, bool showButtons){
TickTock 36:dbd39c315258 646 if (force) {
TickTock 36:dbd39c315258 647 tt.background(Black);
TickTock 36:dbd39c315258 648 tt.cls();
TickTock 36:dbd39c315258 649 }
TickTock 36:dbd39c315258 650 tt.foreground(Yellow);
TickTock 36:dbd39c315258 651 tt.background(DarkCyan);
TickTock 36:dbd39c315258 652 tt.set_font((unsigned char*) Arial12x12);
TickTock 36:dbd39c315258 653 if(playbackOpen){
TickTock 36:dbd39c315258 654 sprintf(sTemp1,"Slower");
TickTock 36:dbd39c315258 655 sprintf(sTemp2," <--");
TickTock 36:dbd39c315258 656 showButton(0,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 657 if(playbackEn){
TickTock 36:dbd39c315258 658 sprintf(sTemp1," Pause");
TickTock 36:dbd39c315258 659 }else{
TickTock 36:dbd39c315258 660 sprintf(sTemp1," Run");
TickTock 36:dbd39c315258 661 }
TickTock 36:dbd39c315258 662 sprintf(sTemp2," %4.3f ",playbackInt);
TickTock 36:dbd39c315258 663 showButton(1,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 664 sprintf(sTemp1,"Faster");
TickTock 36:dbd39c315258 665 sprintf(sTemp2," -->");
TickTock 36:dbd39c315258 666 showButton(2,0,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 667 }
TickTock 36:dbd39c315258 668 if(playbackOpen){
TickTock 36:dbd39c315258 669 sprintf(sTemp1," Stop");
TickTock 36:dbd39c315258 670 }else{
TickTock 36:dbd39c315258 671 sprintf(sTemp1," Start");
TickTock 36:dbd39c315258 672 }
TickTock 36:dbd39c315258 673 sprintf(sTemp2,"Playback");
TickTock 36:dbd39c315258 674 showButton(1,1,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 675 }
TickTock 36:dbd39c315258 676
TickTock 42:4533b13b297d 677 void showDateTime(bool force, bool showButtons){
TickTock 36:dbd39c315258 678 struct tm t; // pointer to a static tm structure
TickTock 36:dbd39c315258 679 time_t seconds ;
TickTock 36:dbd39c315258 680 tt.foreground(Yellow);
TickTock 44:6262a9fd1e56 681 tt.background(Black);
TickTock 36:dbd39c315258 682 if (force) {
TickTock 36:dbd39c315258 683 tt.cls();
TickTock 36:dbd39c315258 684 seconds = time(NULL);
TickTock 36:dbd39c315258 685 t = *localtime(&seconds) ;
TickTock 36:dbd39c315258 686
TickTock 36:dbd39c315258 687 tt.locate(10,10);
TickTock 43:e7f6f80590e3 688 tt.set_font((unsigned char*) Arial12x12);
TickTock 36:dbd39c315258 689 strftime(sTemp1, 32, "%a %m/%d/%Y %X \n", &t);
TickTock 36:dbd39c315258 690 printf("%s",sTemp1);
TickTock 42:4533b13b297d 691 if((sMode==1)&&showButtons){
TickTock 36:dbd39c315258 692 sprintf(sTemp2,"");
TickTock 36:dbd39c315258 693 switch(dtMode){
TickTock 36:dbd39c315258 694 case 0:
TickTock 36:dbd39c315258 695 sprintf(sTemp1,"Year");
TickTock 36:dbd39c315258 696 break;
TickTock 36:dbd39c315258 697 case 1:
TickTock 36:dbd39c315258 698 sprintf(sTemp1,"Month");
TickTock 36:dbd39c315258 699 break;
TickTock 36:dbd39c315258 700 case 2:
TickTock 36:dbd39c315258 701 sprintf(sTemp1,"Day");
TickTock 36:dbd39c315258 702 break;
TickTock 36:dbd39c315258 703 case 3:
TickTock 36:dbd39c315258 704 sprintf(sTemp1,"Hour");
TickTock 36:dbd39c315258 705 break;
TickTock 36:dbd39c315258 706 case 4:
TickTock 36:dbd39c315258 707 sprintf(sTemp1,"Minute");
TickTock 36:dbd39c315258 708 break;
TickTock 36:dbd39c315258 709 case 5:
TickTock 36:dbd39c315258 710 sprintf(sTemp1,"Second");
TickTock 36:dbd39c315258 711 break;
TickTock 36:dbd39c315258 712 case 6:
TickTock 36:dbd39c315258 713 sprintf(sTemp1,"Select");
TickTock 36:dbd39c315258 714 break;
TickTock 36:dbd39c315258 715 default:
TickTock 36:dbd39c315258 716 break;
TickTock 36:dbd39c315258 717 }
TickTock 44:6262a9fd1e56 718 tt.background(DarkCyan);
TickTock 36:dbd39c315258 719 showButton(0,1,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 720 sprintf(sTemp1," UP");
TickTock 36:dbd39c315258 721 showButton(1,1,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 722 sprintf(sTemp1," DOWN");
TickTock 36:dbd39c315258 723 showButton(2,1,sTemp1,sTemp2,3,3);
TickTock 36:dbd39c315258 724 }
TickTock 36:dbd39c315258 725 }
TickTock 36:dbd39c315258 726 }
TickTock 36:dbd39c315258 727
TickTock 42:4533b13b297d 728 void dteDisplay(bool force, bool showButtons){
TickTock 41:8d4609ea7259 729 static float lmpkWh=0;
TickTock 41:8d4609ea7259 730 static float lMPH=0;
TickTock 37:fea2c1d52c5f 731 tt.background(Navy);
TickTock 37:fea2c1d52c5f 732 if(force) tt.cls();
TickTock 41:8d4609ea7259 733 if(force||mpkWh!=lmpkWh||MPH!=lMPH){
TickTock 37:fea2c1d52c5f 734 tt.foreground(Yellow);
TickTock 37:fea2c1d52c5f 735 tt.set_font((unsigned char*) Arial28x28);
TickTock 37:fea2c1d52c5f 736 tt.locate(10,200);
TickTock 43:e7f6f80590e3 737 printf("%3.1f \n",MPH);
TickTock 37:fea2c1d52c5f 738 tt.locate(200,200);
TickTock 43:e7f6f80590e3 739 printf("%3.1f \n",mpkWh);
TickTock 41:8d4609ea7259 740 lmpkWh=mpkWh;
TickTock 41:8d4609ea7259 741 lMPH=MPH;
TickTock 37:fea2c1d52c5f 742 }
TickTock 37:fea2c1d52c5f 743 }
TickTock 37:fea2c1d52c5f 744
TickTock 36:dbd39c315258 745 void updateDisplay(char display){
TickTock 36:dbd39c315258 746 bool changed;
TickTock 36:dbd39c315258 747 changed = dMode[display]!=lastDMode[display];
TickTock 36:dbd39c315258 748 tt.set_display(display);
TickTock 36:dbd39c315258 749 switch (dMode[display]) {
TickTock 36:dbd39c315258 750 case logScreen:
TickTock 42:4533b13b297d 751 printLog(changed,(display==whichTouched));
TickTock 36:dbd39c315258 752 break;
TickTock 41:8d4609ea7259 753 case mainScreen:
TickTock 42:4533b13b297d 754 mainDisplay(changed,(display==whichTouched));
TickTock 36:dbd39c315258 755 break;
TickTock 36:dbd39c315258 756 case brakeScreen:
TickTock 42:4533b13b297d 757 braking(changed,(display==whichTouched));
TickTock 36:dbd39c315258 758 break;
TickTock 41:8d4609ea7259 759 case dteScreen:
TickTock 42:4533b13b297d 760 dteDisplay(changed,(display==whichTouched));
TickTock 37:fea2c1d52c5f 761 break;
TickTock 36:dbd39c315258 762 case monitorScreen:
TickTock 42:4533b13b297d 763 printLast(changed,(display==whichTouched));
TickTock 36:dbd39c315258 764 break;
TickTock 36:dbd39c315258 765 case changedScreen:
TickTock 42:4533b13b297d 766 printChanged(changed,(display==whichTouched));
TickTock 36:dbd39c315258 767 break;
TickTock 36:dbd39c315258 768 case cpScreen:
TickTock 42:4533b13b297d 769 cpData(changed||showCP,(display==whichTouched));
TickTock 36:dbd39c315258 770 break;
TickTock 36:dbd39c315258 771 case config1Screen:
TickTock 42:4533b13b297d 772 config1(changed,(display==whichTouched));
TickTock 36:dbd39c315258 773 break;
TickTock 38:155ec32c5e91 774 case playbackScreen:
TickTock 42:4533b13b297d 775 pbScreen(changed,(display==whichTouched));
TickTock 36:dbd39c315258 776 break;
TickTock 36:dbd39c315258 777 case dateScreen:
TickTock 42:4533b13b297d 778 showDateTime(changed,(display==whichTouched));
TickTock 36:dbd39c315258 779 break;
TickTock 44:6262a9fd1e56 780 case cpHistScreen: // gg - hist
TickTock 47:9cc7d876dd6d 781 cpHistogram(changed||showCP,(display==whichTouched));
TickTock 44:6262a9fd1e56 782 break;
TickTock 48:d1ce92104a1f 783 case cpBarScreen: // gg - cpbars
TickTock 48:d1ce92104a1f 784 cpBarPlot(changed||showCP,(display==whichTouched));
TickTock 48:d1ce92104a1f 785 break;
TickTock 36:dbd39c315258 786 default:
TickTock 43:e7f6f80590e3 787 if (changed){
TickTock 43:e7f6f80590e3 788 tt.background(Black);
TickTock 43:e7f6f80590e3 789 tt.cls();
TickTock 43:e7f6f80590e3 790 }
TickTock 36:dbd39c315258 791 break;
TickTock 36:dbd39c315258 792 }
TickTock 36:dbd39c315258 793 lastDMode[display]=dMode[display];
TickTock 36:dbd39c315258 794
TickTock 42:4533b13b297d 795 if(display==whichTouched){
TickTock 42:4533b13b297d 796 switch (sMode) {
TickTock 42:4533b13b297d 797 case 1: // Select screens
TickTock 42:4533b13b297d 798 tt.foreground(Yellow);
TickTock 42:4533b13b297d 799 tt.background(DarkCyan);
TickTock 42:4533b13b297d 800 tt.set_font((unsigned char*) Arial12x12);
TickTock 42:4533b13b297d 801 sprintf(sTemp1,"<-Prev");
TickTock 42:4533b13b297d 802 sprintf(sTemp2,"");
TickTock 42:4533b13b297d 803 showButton(0,2,sTemp1,sTemp2,3,3);
TickTock 43:e7f6f80590e3 804 sprintf(sTemp1," Next->");
TickTock 42:4533b13b297d 805 showButton(2,2,sTemp1,sTemp2,3,3);
TickTock 43:e7f6f80590e3 806 sprintf(sTemp1," Select");
TickTock 42:4533b13b297d 807 switch (dMode[display]) {
TickTock 44:6262a9fd1e56 808 case offScreen:
TickTock 43:e7f6f80590e3 809 sprintf(sTemp2," Off");
TickTock 42:4533b13b297d 810 break;
TickTock 44:6262a9fd1e56 811 case logScreen:
TickTock 43:e7f6f80590e3 812 sprintf(sTemp2," Log");
TickTock 42:4533b13b297d 813 break;
TickTock 44:6262a9fd1e56 814 case mainScreen:
TickTock 43:e7f6f80590e3 815 sprintf(sTemp2," Main");
TickTock 42:4533b13b297d 816 break;
TickTock 44:6262a9fd1e56 817 case brakeScreen:
TickTock 42:4533b13b297d 818 sprintf(sTemp2," Braking");
TickTock 42:4533b13b297d 819 break;
TickTock 44:6262a9fd1e56 820 case dteScreen:
TickTock 43:e7f6f80590e3 821 sprintf(sTemp2," DTE");
TickTock 42:4533b13b297d 822 break;
TickTock 44:6262a9fd1e56 823 case monitorScreen:
TickTock 43:e7f6f80590e3 824 sprintf(sTemp2," Monitor");
TickTock 42:4533b13b297d 825 break;
TickTock 44:6262a9fd1e56 826 case changedScreen:
TickTock 42:4533b13b297d 827 sprintf(sTemp2,"Delta Mon");
TickTock 42:4533b13b297d 828 break;
TickTock 44:6262a9fd1e56 829 case cpScreen:
TickTock 43:e7f6f80590e3 830 sprintf(sTemp2," Cell Pair");
TickTock 42:4533b13b297d 831 break;
TickTock 44:6262a9fd1e56 832 case config1Screen:
TickTock 43:e7f6f80590e3 833 sprintf(sTemp2," Config");
TickTock 42:4533b13b297d 834 break;
TickTock 44:6262a9fd1e56 835 case playbackScreen:
TickTock 43:e7f6f80590e3 836 sprintf(sTemp2," Playback");
TickTock 42:4533b13b297d 837 break;
TickTock 44:6262a9fd1e56 838 case dateScreen:
TickTock 43:e7f6f80590e3 839 sprintf(sTemp2," Set Time");
TickTock 42:4533b13b297d 840 break;
TickTock 44:6262a9fd1e56 841 case cpHistScreen: // gg - hist
TickTock 44:6262a9fd1e56 842 sprintf(sTemp2," CP Hist");
TickTock 44:6262a9fd1e56 843 break;
TickTock 48:d1ce92104a1f 844 case cpBarScreen: // gg - cpbars
TickTock 48:d1ce92104a1f 845 sprintf(sTemp2," CP Bars");
TickTock 48:d1ce92104a1f 846 break;
TickTock 42:4533b13b297d 847 }
TickTock 42:4533b13b297d 848 showButton(1,2,sTemp1,sTemp2,3,3);
TickTock 42:4533b13b297d 849 wait_ms(100); // pause a moment to reduce flicker
TickTock 42:4533b13b297d 850 break;
TickTock 42:4533b13b297d 851 case 2: // numpad
TickTock 42:4533b13b297d 852 sprintf(sTemp2,"");
TickTock 42:4533b13b297d 853 tt.foreground(Yellow);
TickTock 42:4533b13b297d 854 tt.background(DarkCyan);
TickTock 42:4533b13b297d 855 tt.set_font((unsigned char*) Arial24x23);
TickTock 42:4533b13b297d 856 sprintf(sTemp1," 1");
TickTock 42:4533b13b297d 857 showButton(0,0,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 858 sprintf(sTemp1," 2");
TickTock 42:4533b13b297d 859 showButton(1,0,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 860 sprintf(sTemp1," 3");
TickTock 42:4533b13b297d 861 showButton(2,0,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 862 sprintf(sTemp1," 4");
TickTock 42:4533b13b297d 863 showButton(0,1,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 864 sprintf(sTemp1," 5");
TickTock 42:4533b13b297d 865 showButton(1,1,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 866 sprintf(sTemp1," 6");
TickTock 42:4533b13b297d 867 showButton(2,1,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 868 sprintf(sTemp1," 7");
TickTock 42:4533b13b297d 869 showButton(0,2,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 870 sprintf(sTemp1," 8");
TickTock 42:4533b13b297d 871 showButton(1,2,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 872 sprintf(sTemp1," 9");
TickTock 42:4533b13b297d 873 showButton(2,2,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 874 sprintf(sTemp1," 0");
TickTock 42:4533b13b297d 875 showButton(1,3,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 876 sprintf(sTemp1,"<--");
TickTock 42:4533b13b297d 877 showButton(0,3,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 878 sprintf(sTemp1,"-->");
TickTock 42:4533b13b297d 879 showButton(2,3,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 880 sprintf(sTemp1,"return");
TickTock 42:4533b13b297d 881 showButton(3,3,sTemp1,sTemp2,4,4);
TickTock 42:4533b13b297d 882 case 3:
TickTock 42:4533b13b297d 883 break;
TickTock 42:4533b13b297d 884 default:
TickTock 42:4533b13b297d 885 break;
TickTock 42:4533b13b297d 886 }
TickTock 36:dbd39c315258 887 }
TickTock 36:dbd39c315258 888 }
TickTock 36:dbd39c315258 889
TickTock 36:dbd39c315258 890 void showButton(unsigned char column, unsigned char row, char * text1, char * text2, unsigned char columns, unsigned char rows){
TickTock 36:dbd39c315258 891 unsigned short x1,x2,y1,y2;
TickTock 36:dbd39c315258 892 x1=column*(320/columns)+btnGap/2;
TickTock 36:dbd39c315258 893 x2=(column+1)*(320/columns)-btnGap/2;
TickTock 36:dbd39c315258 894 y1=row*(240/rows)+btnGap/2;
TickTock 36:dbd39c315258 895 y2=(row+1)*(240/rows)-btnGap/2;
TickTock 36:dbd39c315258 896 tt.fillrect(x1,y1,x2,y2,DarkCyan);
TickTock 36:dbd39c315258 897 tt.locate(x1+btnGap,y1+btnGap);
TickTock 36:dbd39c315258 898 printf("%s\n",text1);
TickTock 36:dbd39c315258 899 tt.locate(x1+btnGap,y1+btnGap+30);
TickTock 36:dbd39c315258 900 printf("%s\n",text2);
TickTock 36:dbd39c315258 901 }
TickTock 41:8d4609ea7259 902 // below is braking screen normalized to power rather than force
TickTock 41:8d4609ea7259 903 // changed to force since power had too large a dynamic range
TickTock 42:4533b13b297d 904 /*void braking (bool force, bool showButtons, bool prdata=false){
TickTock 23:cd03f9c3395e 905 unsigned long targetBraking, regenBraking, speed;
TickTock 27:6bd073c33977 906 static unsigned long maxTarget = 20000, maxRegen = 20000, tarDivReg = 1000;
TickTock 13:62e0f7f39ff5 907 short rpm;
TickTock 13:62e0f7f39ff5 908 unsigned long temp;
TickTock 13:62e0f7f39ff5 909 static unsigned char lastPressure[4] = {200,200,200,200};
TickTock 13:62e0f7f39ff5 910 unsigned char i,r,t;
TickTock 13:62e0f7f39ff5 911 static unsigned char lr, lt;
TickTock 13:62e0f7f39ff5 912 CANMessage msg;
TickTock 13:62e0f7f39ff5 913
TickTock 13:62e0f7f39ff5 914 msg = lastMsg[indexLastMsg[0x1cb]]; //Get Target and Regen
TickTock 13:62e0f7f39ff5 915 regenBraking = (msg.data[0]<<3)+(msg.data[1]>>5);
TickTock 13:62e0f7f39ff5 916 targetBraking = (msg.data[2]<<3)+(msg.data[3]>>5);
TickTock 13:62e0f7f39ff5 917 msg = lastMsg[indexLastMsg[0x176]]; //Get rpms - not sure what this is but scales to mph with .0725
TickTock 13:62e0f7f39ff5 918 rpm = ((short)msg.data[0]<<8)+msg.data[1];
TickTock 13:62e0f7f39ff5 919 speed =rpm>0?rpm>>3:-rpm>>3; //Take absolute to get speed; div8
TickTock 23:cd03f9c3395e 920 if ((targetBraking>2039)||(speed>200)) { //Filter weird messages
TickTock 23:cd03f9c3395e 921 targetBraking = 0;
TickTock 23:cd03f9c3395e 922 regenBraking = 0;
TickTock 23:cd03f9c3395e 923 } else {
TickTock 23:cd03f9c3395e 924 if ((targetBraking>50)&&(regenBraking>50)){
TickTock 23:cd03f9c3395e 925 temp = targetBraking;
TickTock 23:cd03f9c3395e 926 temp *= 1000;
TickTock 23:cd03f9c3395e 927 temp /= regenBraking;
TickTock 23:cd03f9c3395e 928 if (temp<tarDivReg) tarDivReg=temp;
TickTock 23:cd03f9c3395e 929 }
TickTock 23:cd03f9c3395e 930 targetBraking *= speed;
TickTock 23:cd03f9c3395e 931 regenBraking *= speed;
TickTock 23:cd03f9c3395e 932 if (targetBraking>maxTarget) maxTarget=targetBraking;
TickTock 23:cd03f9c3395e 933 if (regenBraking>maxRegen) maxRegen=regenBraking;
TickTock 23:cd03f9c3395e 934 }
TickTock 23:cd03f9c3395e 935
TickTock 13:62e0f7f39ff5 936 msg = lastMsg[indexLastMsg[0x1ca]]; //Get brake pressure
TickTock 13:62e0f7f39ff5 937 tt.background(Navy);
TickTock 13:62e0f7f39ff5 938 if (force) {
TickTock 13:62e0f7f39ff5 939 tt.cls();
TickTock 13:62e0f7f39ff5 940 tt.rect(0,111,170,239,White);
TickTock 13:62e0f7f39ff5 941 tt.line(0,207,170,207,White);
TickTock 13:62e0f7f39ff5 942 tt.line(0,175,170,175,White);
TickTock 13:62e0f7f39ff5 943 tt.line(0,143,170,143,White);
TickTock 13:62e0f7f39ff5 944 lastPressure[0] = 200;
TickTock 13:62e0f7f39ff5 945 lastPressure[1] = 200;
TickTock 13:62e0f7f39ff5 946 lastPressure[2] = 200;
TickTock 13:62e0f7f39ff5 947 lastPressure[3] = 200;
TickTock 13:62e0f7f39ff5 948 }
TickTock 13:62e0f7f39ff5 949 // plot bar graph for each wheel pressure
TickTock 13:62e0f7f39ff5 950 for (i=0; i<4; i++){
TickTock 13:62e0f7f39ff5 951 if (msg.data[i]<239) {
TickTock 13:62e0f7f39ff5 952 if (msg.data[i]>lastPressure[i]){
TickTock 13:62e0f7f39ff5 953 tt.fillrect(10+40*i,239-msg.data[i],40+40*i,239,Red);
TickTock 13:62e0f7f39ff5 954 } else if (msg.data[i]<lastPressure[i]) {
TickTock 13:62e0f7f39ff5 955 tt.fillrect(10+40*i,238-lastPressure[i],40+40*i,238-msg.data[i],Navy);
TickTock 13:62e0f7f39ff5 956 }
TickTock 13:62e0f7f39ff5 957 lastPressure[i]=msg.data[i];
TickTock 13:62e0f7f39ff5 958 }
TickTock 13:62e0f7f39ff5 959 }
TickTock 13:62e0f7f39ff5 960
TickTock 27:6bd073c33977 961 temp = targetBraking;
TickTock 27:6bd073c33977 962 temp *=200;
TickTock 27:6bd073c33977 963 temp /= maxTarget;
TickTock 27:6bd073c33977 964 t = (char) temp;
TickTock 27:6bd073c33977 965 if (t>200) t=200;
TickTock 27:6bd073c33977 966 temp = regenBraking;
TickTock 27:6bd073c33977 967 temp *= tarDivReg;
TickTock 27:6bd073c33977 968 temp /= maxTarget;
TickTock 27:6bd073c33977 969 temp /= 5;
TickTock 27:6bd073c33977 970 r = (char) temp;
TickTock 27:6bd073c33977 971 if (r>200) r=200;
TickTock 27:6bd073c33977 972 if(lr!=r&&prdata){
TickTock 27:6bd073c33977 973 tt.foreground(Yellow);
TickTock 27:6bd073c33977 974 tt.set_font((unsigned char*) Arial28x28);
TickTock 27:6bd073c33977 975 tt.locate(100,40);
TickTock 27:6bd073c33977 976 printf("%d %d \n",regenBraking,maxRegen);
TickTock 27:6bd073c33977 977 tt.locate(100,70);
TickTock 27:6bd073c33977 978 printf("%3.1f (%3.1f%s) \n",(float)tarDivReg/10,(float)regenBraking*tarDivReg/targetBraking/10,"%");
TickTock 27:6bd073c33977 979 }
TickTock 27:6bd073c33977 980 if(lt!=t&&prdata){
TickTock 27:6bd073c33977 981 tt.foreground(Yellow);
TickTock 27:6bd073c33977 982 tt.set_font((unsigned char*) Arial28x28);
TickTock 27:6bd073c33977 983 tt.locate(100,10);
TickTock 27:6bd073c33977 984 printf("%d %d \n",targetBraking,maxTarget);
TickTock 13:62e0f7f39ff5 985 }
TickTock 27:6bd073c33977 986 if (r>t) t=r; //Should never happen
TickTock 27:6bd073c33977 987 if((lr!=r||lt!=t)&&!prdata){
TickTock 27:6bd073c33977 988 tt.fillrect(200,10,300,239-t,Navy);
TickTock 27:6bd073c33977 989 tt.fillrect(200,239-t,300,239-r,Red);
TickTock 27:6bd073c33977 990 tt.fillrect(200,239-r,300,239,Green);
TickTock 27:6bd073c33977 991 }
TickTock 27:6bd073c33977 992 lt=t;
TickTock 27:6bd073c33977 993 lr=r;
TickTock 36:dbd39c315258 994 }*/