![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
aa
Dependencies: mbed LCD_DISCO_F469NIa SD_DISCO_F469NI BSP_DISCO_F469NIa EEPROM_DISCO_F469NI
draw_print_library.cpp@6:d6e001d7cf16, 2020-02-12 (annotated)
- Committer:
- formulas
- Date:
- Wed Feb 12 18:49:12 2020 +0000
- Revision:
- 6:d6e001d7cf16
- Parent:
- 4:0e8413277df8
aaa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
formulas | 0:38c3afd99aeb | 1 | #include "draw_print_library.h" |
formulas | 0:38c3afd99aeb | 2 | #include "gears.h" |
formulas | 0:38c3afd99aeb | 3 | #include "font100.h" |
formulas | 0:38c3afd99aeb | 4 | #include "font50.h" |
formulas | 0:38c3afd99aeb | 5 | |
formulas | 0:38c3afd99aeb | 6 | extern LCD_DISCO_F469NI lcd; |
formulas | 0:38c3afd99aeb | 7 | extern SD_DISCO_F469NI sd; |
formulas | 0:38c3afd99aeb | 8 | extern Serial pc; |
formulas | 0:38c3afd99aeb | 9 | |
formulas | 0:38c3afd99aeb | 10 | extern uint8_t lvdtref; |
formulas | 0:38c3afd99aeb | 11 | extern int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref; |
formulas | 6:d6e001d7cf16 | 12 | extern uint8_t Acc_Temperature[],Acc_Temperature0[]; |
formulas | 0:38c3afd99aeb | 13 | |
formulas | 0:38c3afd99aeb | 14 | //Gears |
formulas | 0:38c3afd99aeb | 15 | GEAR Idle{'0',256,384,idleBitmap}; |
formulas | 0:38c3afd99aeb | 16 | GEAR Gear1{'1',256,384,gear1Bitmap}; |
formulas | 0:38c3afd99aeb | 17 | GEAR Gear2{'2',256,384,gear2Bitmap}; |
formulas | 0:38c3afd99aeb | 18 | GEAR Gear3{'3',256,384,gear3Bitmap}; |
formulas | 0:38c3afd99aeb | 19 | GEAR Gear4{'4',256,384,gear4Bitmap}; |
formulas | 0:38c3afd99aeb | 20 | GEAR Gear5{'5',256,384,gear5Bitmap}; |
formulas | 0:38c3afd99aeb | 21 | GEAR Gear6{'6',256,384,gear6Bitmap}; |
formulas | 6:d6e001d7cf16 | 22 | CHAR LogoSmallEA{'logosmallea',174,64,logosmallea}; |
formulas | 0:38c3afd99aeb | 23 | GEAR *Gears[7]={&Idle,&Gear1,&Gear2,&Gear3,&Gear4,&Gear5,&Gear6}; //Gears array |
formulas | 0:38c3afd99aeb | 24 | IMAGE LogoBig{800,480,LOGOBIG_START_ADDR}; //Big Logo |
formulas | 0:38c3afd99aeb | 25 | IMAGE LogoSmall{160,64,LOGOSMALL_START_ADDR}; //Small Logo |
formulas | 0:38c3afd99aeb | 26 | IMAGE Branko{250,480,1576960}; //Branko |
formulas | 0:38c3afd99aeb | 27 | IMAGE NewYearCongat{800,480,NEW_YEAR_CONGAT_START_ADDR}; |
formulas | 0:38c3afd99aeb | 28 | //IMAGE Miljana[250,480,---}; |
formulas | 0:38c3afd99aeb | 29 | |
formulas | 0:38c3afd99aeb | 30 | void DrawSpeedMeter(){ |
formulas | 0:38c3afd99aeb | 31 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
formulas | 0:38c3afd99aeb | 32 | double THETA1=PHI,THETA2; |
formulas | 0:38c3afd99aeb | 33 | |
formulas | 0:38c3afd99aeb | 34 | //Set starting point for drawing |
formulas | 0:38c3afd99aeb | 35 | x1=(int)(400-530*cos(THETA1)); |
formulas | 0:38c3afd99aeb | 36 | y1=(int)(550-530*sin(THETA1)); |
formulas | 0:38c3afd99aeb | 37 | x2=(int)(400-500*cos(THETA1)); |
formulas | 0:38c3afd99aeb | 38 | y2=(int)(550-500*sin(THETA1)); |
formulas | 0:38c3afd99aeb | 39 | |
formulas | 0:38c3afd99aeb | 40 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 41 | for (int V=0;V<=150;V++){ //Draw from 0 to 150 |
formulas | 0:38c3afd99aeb | 42 | //Set angle for next speed scale value |
formulas | 0:38c3afd99aeb | 43 | THETA2=THETA1+ALPHA/Vmax; |
formulas | 0:38c3afd99aeb | 44 | x3=(int)(400-530*cos(THETA2)); |
formulas | 0:38c3afd99aeb | 45 | y3=(int)(550-530*sin(THETA2)); |
formulas | 0:38c3afd99aeb | 46 | x4=(int)(400-500*cos(THETA2)); |
formulas | 0:38c3afd99aeb | 47 | y4=(int)(550-500*sin(THETA2)); |
formulas | 0:38c3afd99aeb | 48 | if(V<150){ //Draw arch section |
formulas | 0:38c3afd99aeb | 49 | lcd.DrawLine(x1,y1,x3,y3); |
formulas | 0:38c3afd99aeb | 50 | lcd.DrawLine(x2,y2,x4,y4); |
formulas | 0:38c3afd99aeb | 51 | }; |
formulas | 0:38c3afd99aeb | 52 | lcd.SetFont(&Font20); |
formulas | 0:38c3afd99aeb | 53 | if(V%10==0){ //Print round values (0,10,20,...) |
formulas | 0:38c3afd99aeb | 54 | lcd.DrawLine(x1,y1,x2,y2); //Draw round scale value |
formulas | 0:38c3afd99aeb | 55 | char Vchar[3]; |
formulas | 0:38c3afd99aeb | 56 | sprintf(Vchar,"%d",(int)V); |
formulas | 0:38c3afd99aeb | 57 | uint16_t xnum=x2,ynum=y2; |
formulas | 0:38c3afd99aeb | 58 | if (V==0 | V==10 | V==20 | V==30){ //Position of printed value |
formulas | 0:38c3afd99aeb | 59 | xnum=x2,ynum=y2+5; |
formulas | 0:38c3afd99aeb | 60 | }else if (V==40 | V==50 | V==60){ |
formulas | 0:38c3afd99aeb | 61 | xnum=x2-3,ynum=y2+5; |
formulas | 0:38c3afd99aeb | 62 | }else if (V==70 | V==80){ |
formulas | 0:38c3afd99aeb | 63 | xnum=x2-14,ynum=y2+5; |
formulas | 0:38c3afd99aeb | 64 | }else if (V==90){ |
formulas | 0:38c3afd99aeb | 65 | xnum=x2-20,ynum=y2+5; |
formulas | 0:38c3afd99aeb | 66 | }else if (V==100 | V==110 | V==120) { |
formulas | 0:38c3afd99aeb | 67 | xnum=x2-35,ynum=y2+4; |
formulas | 0:38c3afd99aeb | 68 | }else if (V==130 | V==140 | V==150){ |
formulas | 0:38c3afd99aeb | 69 | xnum=x2-35,ynum=y2+5; |
formulas | 0:38c3afd99aeb | 70 | }; |
formulas | 0:38c3afd99aeb | 71 | lcd.DisplayStringAt(xnum,ynum,(uint8_t*)Vchar,LEFT_MODE); |
formulas | 0:38c3afd99aeb | 72 | }; |
formulas | 0:38c3afd99aeb | 73 | x1=x3,y1=y3,x2=x4,y2=y4; //Increment position |
formulas | 0:38c3afd99aeb | 74 | THETA1=THETA2; |
formulas | 0:38c3afd99aeb | 75 | }; |
formulas | 0:38c3afd99aeb | 76 | }; |
formulas | 0:38c3afd99aeb | 77 | |
formulas | 0:38c3afd99aeb | 78 | void PrintChar(CHAR Char,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
formulas | 0:38c3afd99aeb | 79 | uint16_t width=Char.width; |
formulas | 0:38c3afd99aeb | 80 | uint16_t height=Char.height; |
formulas | 0:38c3afd99aeb | 81 | uint16_t horpos,vertpos; |
formulas | 0:38c3afd99aeb | 82 | uint16_t bitloc; |
formulas | 0:38c3afd99aeb | 83 | uint32_t DrawColor; |
formulas | 0:38c3afd99aeb | 84 | char pos[9]; |
formulas | 0:38c3afd99aeb | 85 | //uint8_t dbg[50]; |
formulas | 0:38c3afd99aeb | 86 | for(horpos=0;horpos<width;horpos++){ //Bitmaps are row after row |
formulas | 0:38c3afd99aeb | 87 | for(vertpos=0;vertpos<height/8;vertpos++){ |
formulas | 0:38c3afd99aeb | 88 | sprintf(pos,BYTE_TO_BINARY_PATTERN,BYTE_TO_BINARY(Char.bitmap[horpos*height/8+vertpos])); //Convert uint8_t from hex to binary. 1 to fill, 0 to skip |
formulas | 0:38c3afd99aeb | 89 | //pc.printf("%d. %s\n",horpos*height/8+vertpos,pos); |
formulas | 0:38c3afd99aeb | 90 | for(bitloc=0;bitloc<8;bitloc++) { |
formulas | 0:38c3afd99aeb | 91 | if (pos[bitloc]=='1') { |
formulas | 0:38c3afd99aeb | 92 | DrawColor=TextColor; |
formulas | 0:38c3afd99aeb | 93 | } |
formulas | 0:38c3afd99aeb | 94 | else{ |
formulas | 0:38c3afd99aeb | 95 | DrawColor=lcd.GetBackColor(); |
formulas | 0:38c3afd99aeb | 96 | }; |
formulas | 0:38c3afd99aeb | 97 | lcd.DrawPixel(StartXPos+horpos,StartYPos+vertpos*8+bitloc,DrawColor); |
formulas | 0:38c3afd99aeb | 98 | //pc.printf("%d,%d\n",StartXPos+horpos,StartYPos+vertpos*8+bitloc); |
formulas | 0:38c3afd99aeb | 99 | } |
formulas | 0:38c3afd99aeb | 100 | } |
formulas | 0:38c3afd99aeb | 101 | } |
formulas | 0:38c3afd99aeb | 102 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 103 | }; |
formulas | 0:38c3afd99aeb | 104 | |
formulas | 0:38c3afd99aeb | 105 | void PrintString(char str[],int font,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
formulas | 0:38c3afd99aeb | 106 | //pc.printf("Function activated.\n"); |
formulas | 0:38c3afd99aeb | 107 | char *a=str; |
formulas | 0:38c3afd99aeb | 108 | int p=0; |
formulas | 0:38c3afd99aeb | 109 | while(a[p]){ |
formulas | 0:38c3afd99aeb | 110 | //pc.printf("Searching char: %c\n",a[p]); |
formulas | 0:38c3afd99aeb | 111 | for(int k=0;k<68;k++){ |
formulas | 0:38c3afd99aeb | 112 | //pc.printf("Character %c\n",(*font50[k]).name); |
formulas | 0:38c3afd99aeb | 113 | if((*font50[k]).name==a[p]){ |
formulas | 0:38c3afd99aeb | 114 | // pc.printf("Found!\n"); |
formulas | 0:38c3afd99aeb | 115 | PrintChar(*font50[k],StartXPos,StartYPos,TextColor); |
formulas | 0:38c3afd99aeb | 116 | StartXPos+=(*font50[k]).width; |
formulas | 0:38c3afd99aeb | 117 | k=100; |
formulas | 0:38c3afd99aeb | 118 | }; |
formulas | 0:38c3afd99aeb | 119 | }; |
formulas | 0:38c3afd99aeb | 120 | //pc.printf("End.\n"); |
formulas | 0:38c3afd99aeb | 121 | p++; |
formulas | 0:38c3afd99aeb | 122 | }; |
formulas | 0:38c3afd99aeb | 123 | }; |
formulas | 0:38c3afd99aeb | 124 | |
formulas | 0:38c3afd99aeb | 125 | |
formulas | 0:38c3afd99aeb | 126 | |
formulas | 0:38c3afd99aeb | 127 | |
formulas | 0:38c3afd99aeb | 128 | void ChangeNumber(int num,int num0,int Font,uint16_t StartXPos,uint16_t StartYPos, int digits, int dec_point, int sign){ |
formulas | 0:38c3afd99aeb | 129 | //Function only changes the decimals that change. If number changes from 146 to 147, it only changes 6 to 7. |
formulas | 0:38c3afd99aeb | 130 | int digit[digits],digit0[digits]; |
formulas | 0:38c3afd99aeb | 131 | int sum=0,sum0=0,k,aux=0; |
formulas | 0:38c3afd99aeb | 132 | CHAR **font; |
formulas | 0:38c3afd99aeb | 133 | if(abs(num)<pow(float(10),digits)){ |
formulas | 0:38c3afd99aeb | 134 | digit[0]=abs(num)/pow((float)10,(float)(digits-1)); |
formulas | 0:38c3afd99aeb | 135 | digit0[0]=abs(num0)/pow((float)10,(float)(digits-1)); |
formulas | 0:38c3afd99aeb | 136 | for(k=1;k<digits;k++){ |
formulas | 0:38c3afd99aeb | 137 | sum=(sum+digit[k-1])*10; |
formulas | 0:38c3afd99aeb | 138 | digit[k]=abs(num)/pow((float)10,(float)(digits-1-k))-sum; |
formulas | 0:38c3afd99aeb | 139 | sum0=(sum0+digit0[k-1])*10; |
formulas | 0:38c3afd99aeb | 140 | digit0[k]=abs(num0)/pow(10,(float)(digits-1-k))-sum0; |
formulas | 0:38c3afd99aeb | 141 | }; |
formulas | 0:38c3afd99aeb | 142 | |
formulas | 0:38c3afd99aeb | 143 | if (Font==50){ |
formulas | 0:38c3afd99aeb | 144 | font=font50; |
formulas | 0:38c3afd99aeb | 145 | }else if (Font==100){ |
formulas | 0:38c3afd99aeb | 146 | font=font100; |
formulas | 0:38c3afd99aeb | 147 | }; |
formulas | 0:38c3afd99aeb | 148 | |
formulas | 0:38c3afd99aeb | 149 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 150 | uint8_t char_width=(*font[0]).width; |
formulas | 0:38c3afd99aeb | 151 | |
formulas | 0:38c3afd99aeb | 152 | if (sign==1){ |
formulas | 0:38c3afd99aeb | 153 | if(num<0 & num0>=0){ //Print minus if number lower than 0 |
formulas | 0:38c3afd99aeb | 154 | PrintChar(*font[10],StartXPos,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 155 | }else if(num>=0 & num0<0){ //Print blank if number lower than 0 |
formulas | 0:38c3afd99aeb | 156 | lcd.SetTextColor(LCD_COLOR_WHITE); |
formulas | 0:38c3afd99aeb | 157 | lcd.FillRect(StartXPos,StartYPos,(*font[10]).width,(*font[10]).height); |
formulas | 0:38c3afd99aeb | 158 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 159 | }; |
formulas | 0:38c3afd99aeb | 160 | aux+=(*font[10]).width; |
formulas | 0:38c3afd99aeb | 161 | }; |
formulas | 0:38c3afd99aeb | 162 | |
formulas | 0:38c3afd99aeb | 163 | for(k=0;k<digits;k++){ |
formulas | 0:38c3afd99aeb | 164 | if(dec_point==k & dec_point>0){ //Default is for font50. This is not an universal solution, but it is in use because all font 100 infos are integers |
formulas | 0:38c3afd99aeb | 165 | PrintChar(Chardot_50,StartXPos+dec_point*char_width,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 166 | aux+=Chardot_50.width; |
formulas | 0:38c3afd99aeb | 167 | }; |
formulas | 0:38c3afd99aeb | 168 | if(digit[k]!=digit0[k]){ |
formulas | 0:38c3afd99aeb | 169 | PrintChar(*font[digit[k]],StartXPos+k*char_width+aux,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 170 | }; |
formulas | 0:38c3afd99aeb | 171 | }; |
formulas | 0:38c3afd99aeb | 172 | }; |
formulas | 0:38c3afd99aeb | 173 | }; |
formulas | 0:38c3afd99aeb | 174 | |
formulas | 0:38c3afd99aeb | 175 | void SetNumber(int num,int Font,uint16_t StartXPos,uint16_t StartYPos, int digits, int dec_point, int sign){ |
formulas | 0:38c3afd99aeb | 176 | int digit[3],sum=0,k,aux=0; |
formulas | 0:38c3afd99aeb | 177 | CHAR **font; |
formulas | 0:38c3afd99aeb | 178 | |
formulas | 0:38c3afd99aeb | 179 | if (Font==50){ |
formulas | 0:38c3afd99aeb | 180 | font=font50; |
formulas | 0:38c3afd99aeb | 181 | }else if (Font==100){ |
formulas | 0:38c3afd99aeb | 182 | font=font100; |
formulas | 0:38c3afd99aeb | 183 | }; |
formulas | 0:38c3afd99aeb | 184 | |
formulas | 0:38c3afd99aeb | 185 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 186 | uint8_t char_width=(*font[0]).width; |
formulas | 0:38c3afd99aeb | 187 | |
formulas | 0:38c3afd99aeb | 188 | if(num<pow(float(10),digits)){ |
formulas | 0:38c3afd99aeb | 189 | digit[0]=abs(num)/pow((float)10,(float)(digits-1)); |
formulas | 0:38c3afd99aeb | 190 | for(k=1;k<digits;k++){ |
formulas | 0:38c3afd99aeb | 191 | sum=(sum+digit[k-1])*10; |
formulas | 0:38c3afd99aeb | 192 | digit[k]=abs(num)/pow((float)10,(float)(digits-1-k))-sum; |
formulas | 0:38c3afd99aeb | 193 | }; |
formulas | 0:38c3afd99aeb | 194 | |
formulas | 0:38c3afd99aeb | 195 | if(sign==1){ |
formulas | 0:38c3afd99aeb | 196 | if(num<0){ //Print minus if number lower than 0 |
formulas | 0:38c3afd99aeb | 197 | PrintChar(*font[10],StartXPos,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 198 | }else if(num>=0){ //Print blank if number lower than 0 |
formulas | 0:38c3afd99aeb | 199 | lcd.SetTextColor(LCD_COLOR_WHITE); |
formulas | 0:38c3afd99aeb | 200 | lcd.FillRect(StartXPos,StartYPos,(*font[10]).width,(*font[10]).height); |
formulas | 0:38c3afd99aeb | 201 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 202 | }; |
formulas | 0:38c3afd99aeb | 203 | aux+=(*font[10]).width; |
formulas | 0:38c3afd99aeb | 204 | }; |
formulas | 0:38c3afd99aeb | 205 | |
formulas | 0:38c3afd99aeb | 206 | for(k=0;k<digits;k++){ |
formulas | 0:38c3afd99aeb | 207 | if(dec_point==k & dec_point>0){ //Default is for font50. This is not an universal solution, but it is in use because all font 100 infos are integers |
formulas | 0:38c3afd99aeb | 208 | PrintChar(Chardot_50,StartXPos+dec_point*char_width,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 209 | aux+=Chardot_50.width; |
formulas | 0:38c3afd99aeb | 210 | }; |
formulas | 0:38c3afd99aeb | 211 | PrintChar(*font[digit[k]],StartXPos+k*char_width+aux,StartYPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 212 | }; |
formulas | 0:38c3afd99aeb | 213 | }; |
formulas | 0:38c3afd99aeb | 214 | }; |
formulas | 0:38c3afd99aeb | 215 | |
formulas | 0:38c3afd99aeb | 216 | void DrawRGBImage(IMAGE Image,uint16_t StartXPos,uint16_t StartYPos){ |
formulas | 0:38c3afd99aeb | 217 | uint32_t p,q; |
formulas | 0:38c3afd99aeb | 218 | uint32_t BlockBuffer[128]; |
formulas | 0:38c3afd99aeb | 219 | uint16_t xpos=0,ypos=0; |
formulas | 0:38c3afd99aeb | 220 | for(p=0;p<Image.width*Image.height/128;p++){ |
formulas | 0:38c3afd99aeb | 221 | sd.ReadBlocks(BlockBuffer,Image.START_ADDR+p*512,1,SD_DATATIMEOUT); |
formulas | 0:38c3afd99aeb | 222 | for(q=0;q<128;q++){ |
formulas | 0:38c3afd99aeb | 223 | if(ypos<Image.height){ |
formulas | 0:38c3afd99aeb | 224 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
formulas | 0:38c3afd99aeb | 225 | } |
formulas | 0:38c3afd99aeb | 226 | else{ |
formulas | 0:38c3afd99aeb | 227 | xpos++; |
formulas | 0:38c3afd99aeb | 228 | ypos=0; |
formulas | 0:38c3afd99aeb | 229 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
formulas | 0:38c3afd99aeb | 230 | } |
formulas | 0:38c3afd99aeb | 231 | ypos++; |
formulas | 0:38c3afd99aeb | 232 | }; |
formulas | 0:38c3afd99aeb | 233 | }; |
formulas | 0:38c3afd99aeb | 234 | }; |
formulas | 0:38c3afd99aeb | 235 | |
formulas | 0:38c3afd99aeb | 236 | |
formulas | 0:38c3afd99aeb | 237 | void UpdateSpeedMeter(int V, int dV){ |
formulas | 0:38c3afd99aeb | 238 | //Prednost koda je sto se docrtava samo onaj deo koji se menja. Tako ako sa 55 kmh prelazimo na 57 khm on obradjuje samo polja 55 i 56. |
formulas | 0:38c3afd99aeb | 239 | //Kada bi se samo brisala stara i crtala nova vrednost na baru ukupno bi morali da obradimo 55+57=112 umesto samo 2 bara. |
formulas | 0:38c3afd99aeb | 240 | uint32_t OldColor,RewriteColor; |
formulas | 0:38c3afd99aeb | 241 | double THETA1,THETA2; |
formulas | 0:38c3afd99aeb | 242 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
formulas | 0:38c3afd99aeb | 243 | uint16_t startx,starty,leftupx,rightupx,leftdownx,rightdownx,ypos; |
formulas | 0:38c3afd99aeb | 244 | |
formulas | 0:38c3afd99aeb | 245 | //Obradjivanje polje po polje. Svako polje prestavlja odredjenu vrednost kmh. |
formulas | 0:38c3afd99aeb | 246 | for(int k=1;k<=abs(dV);k++){ |
formulas | 0:38c3afd99aeb | 247 | //Uokviravanje polja koje se trenutno obradjuje. Granice su crne kako bi se jasno razgranicilo polje od ostatka bara. |
formulas | 0:38c3afd99aeb | 248 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 249 | THETA1=PHI+((double)V)*ALPHA/Vmax; |
formulas | 0:38c3afd99aeb | 250 | x1=(int)(400-530*cos(THETA1)); |
formulas | 0:38c3afd99aeb | 251 | y1=(int)(550-530*sin(THETA1)); |
formulas | 0:38c3afd99aeb | 252 | x2=(int)(400-500*cos(THETA1)); |
formulas | 0:38c3afd99aeb | 253 | y2=(int)(550-500*sin(THETA1)); |
formulas | 0:38c3afd99aeb | 254 | THETA2=PHI+((double)(V+dV/abs(dV)))*ALPHA/Vmax; |
formulas | 0:38c3afd99aeb | 255 | x3=(int)(400-530*cos(THETA2)); |
formulas | 0:38c3afd99aeb | 256 | y3=(int)(550-530*sin(THETA2)); |
formulas | 0:38c3afd99aeb | 257 | x4=(int)(400-500*cos(THETA2)); |
formulas | 0:38c3afd99aeb | 258 | y4=(int)(550-500*sin(THETA2)); |
formulas | 0:38c3afd99aeb | 259 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 0:38c3afd99aeb | 260 | lcd.DrawLine(x3,y3,x4,y4); |
formulas | 0:38c3afd99aeb | 261 | lcd.DrawLine(x1,y1,x3,y3); |
formulas | 0:38c3afd99aeb | 262 | lcd.DrawLine(x2,y2,x4,y4); |
formulas | 0:38c3afd99aeb | 263 | |
formulas | 0:38c3afd99aeb | 264 | //Odredjivanje pocetnih koordinata i kojom bojom ce se polje bojiti. |
formulas | 0:38c3afd99aeb | 265 | if(dV>0){ |
formulas | 0:38c3afd99aeb | 266 | startx=(x2+x3)/2; |
formulas | 0:38c3afd99aeb | 267 | starty=(y2+y3)/2; |
formulas | 0:38c3afd99aeb | 268 | if(V+1<=50){ |
formulas | 0:38c3afd99aeb | 269 | RewriteColor=LCD_COLOR_GREEN; |
formulas | 0:38c3afd99aeb | 270 | }else if (V+1>50 & V+1<=100){ |
formulas | 0:38c3afd99aeb | 271 | RewriteColor=LCD_COLOR_BLUE; |
formulas | 0:38c3afd99aeb | 272 | }else{ |
formulas | 0:38c3afd99aeb | 273 | RewriteColor=LCD_COLOR_RED; |
formulas | 0:38c3afd99aeb | 274 | }; |
formulas | 0:38c3afd99aeb | 275 | OldColor=LCD_COLOR_WHITE; |
formulas | 0:38c3afd99aeb | 276 | }else{ |
formulas | 0:38c3afd99aeb | 277 | startx=(x1+x4)/2; |
formulas | 0:38c3afd99aeb | 278 | starty=(y1+y4)/2; |
formulas | 0:38c3afd99aeb | 279 | if(V<=50){ |
formulas | 0:38c3afd99aeb | 280 | OldColor=LCD_COLOR_GREEN; |
formulas | 0:38c3afd99aeb | 281 | }else if (V>50 & V<=100){ |
formulas | 0:38c3afd99aeb | 282 | OldColor=LCD_COLOR_BLUE; |
formulas | 0:38c3afd99aeb | 283 | }else{ |
formulas | 0:38c3afd99aeb | 284 | OldColor=LCD_COLOR_RED; |
formulas | 0:38c3afd99aeb | 285 | }; |
formulas | 0:38c3afd99aeb | 286 | RewriteColor=LCD_COLOR_WHITE; |
formulas | 0:38c3afd99aeb | 287 | }; |
formulas | 0:38c3afd99aeb | 288 | lcd.SetTextColor(RewriteColor); |
formulas | 0:38c3afd99aeb | 289 | |
formulas | 0:38c3afd99aeb | 290 | //Odredjivanje pocetnog piksela odakle ce bojenje poceti. Kako bi se svaki piksel obojio pocetni se postavlja u centru polja i krece se najpre |
formulas | 0:38c3afd99aeb | 291 | //na gore pa zatim od sredine na dole. |
formulas | 0:38c3afd99aeb | 292 | leftupx=startx; |
formulas | 0:38c3afd99aeb | 293 | rightupx=startx+1; |
formulas | 0:38c3afd99aeb | 294 | ypos=starty; |
formulas | 0:38c3afd99aeb | 295 | while(leftupx<rightupx){ |
formulas | 0:38c3afd99aeb | 296 | |
formulas | 0:38c3afd99aeb | 297 | ypos--; |
formulas | 0:38c3afd99aeb | 298 | if(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 299 | while(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 300 | leftupx++; |
formulas | 0:38c3afd99aeb | 301 | } |
formulas | 0:38c3afd99aeb | 302 | } else { |
formulas | 0:38c3afd99aeb | 303 | while(lcd.ReadPixel(leftupx,ypos)==OldColor){ |
formulas | 0:38c3afd99aeb | 304 | leftupx--; |
formulas | 0:38c3afd99aeb | 305 | }; |
formulas | 0:38c3afd99aeb | 306 | leftupx++; |
formulas | 0:38c3afd99aeb | 307 | }; |
formulas | 0:38c3afd99aeb | 308 | if(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 309 | while(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 310 | rightupx--; |
formulas | 0:38c3afd99aeb | 311 | } |
formulas | 0:38c3afd99aeb | 312 | } else { |
formulas | 0:38c3afd99aeb | 313 | while(lcd.ReadPixel(rightupx,ypos)==OldColor){ |
formulas | 0:38c3afd99aeb | 314 | rightupx++; |
formulas | 0:38c3afd99aeb | 315 | }; |
formulas | 0:38c3afd99aeb | 316 | rightupx--; |
formulas | 0:38c3afd99aeb | 317 | }; |
formulas | 0:38c3afd99aeb | 318 | |
formulas | 0:38c3afd99aeb | 319 | if (leftupx<=rightupx){ |
formulas | 0:38c3afd99aeb | 320 | lcd.DrawLine(leftupx,ypos,rightupx,ypos); |
formulas | 0:38c3afd99aeb | 321 | }; |
formulas | 0:38c3afd99aeb | 322 | }; |
formulas | 0:38c3afd99aeb | 323 | |
formulas | 0:38c3afd99aeb | 324 | leftdownx=startx; |
formulas | 0:38c3afd99aeb | 325 | rightdownx=startx+1; |
formulas | 0:38c3afd99aeb | 326 | ypos=starty-1; |
formulas | 0:38c3afd99aeb | 327 | while(leftdownx<rightdownx){ |
formulas | 0:38c3afd99aeb | 328 | ypos++; |
formulas | 0:38c3afd99aeb | 329 | if(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 330 | while(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 331 | leftdownx++; |
formulas | 0:38c3afd99aeb | 332 | } |
formulas | 0:38c3afd99aeb | 333 | } else { |
formulas | 0:38c3afd99aeb | 334 | while(lcd.ReadPixel(leftdownx,ypos)==OldColor){ |
formulas | 0:38c3afd99aeb | 335 | leftdownx--; |
formulas | 0:38c3afd99aeb | 336 | }; |
formulas | 0:38c3afd99aeb | 337 | leftdownx++; |
formulas | 0:38c3afd99aeb | 338 | }; |
formulas | 0:38c3afd99aeb | 339 | if(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 340 | while(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:38c3afd99aeb | 341 | rightdownx--; |
formulas | 0:38c3afd99aeb | 342 | } |
formulas | 0:38c3afd99aeb | 343 | } else { |
formulas | 0:38c3afd99aeb | 344 | while(lcd.ReadPixel(rightdownx,ypos)==OldColor){ |
formulas | 0:38c3afd99aeb | 345 | rightdownx++; |
formulas | 0:38c3afd99aeb | 346 | }; |
formulas | 0:38c3afd99aeb | 347 | rightdownx--; |
formulas | 0:38c3afd99aeb | 348 | }; |
formulas | 0:38c3afd99aeb | 349 | |
formulas | 0:38c3afd99aeb | 350 | if (leftdownx<=rightdownx){ |
formulas | 0:38c3afd99aeb | 351 | lcd.DrawLine(leftdownx,ypos,rightdownx,ypos); |
formulas | 0:38c3afd99aeb | 352 | }; |
formulas | 0:38c3afd99aeb | 353 | }; |
formulas | 0:38c3afd99aeb | 354 | |
formulas | 0:38c3afd99aeb | 355 | //Brisanje granicnika. Vodi se racuna ako je granica neki od dekadnih podeoka koji treba da ostane crn. |
formulas | 0:38c3afd99aeb | 356 | if(V%10!=0){ |
formulas | 0:38c3afd99aeb | 357 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 0:38c3afd99aeb | 358 | if (dV<0){ |
formulas | 0:38c3afd99aeb | 359 | lcd.DrawPixel(x1,y1,LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 360 | lcd.DrawPixel(x2,y2,LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 361 | }; |
formulas | 0:38c3afd99aeb | 362 | }; |
formulas | 0:38c3afd99aeb | 363 | V+=dV/abs(dV); |
formulas | 0:38c3afd99aeb | 364 | }; |
formulas | 0:38c3afd99aeb | 365 | }; |
formulas | 0:38c3afd99aeb | 366 | |
formulas | 0:38c3afd99aeb | 367 | void ChangeCrank(int Crank){ |
formulas | 2:f54f01527ebb | 368 | PrintString(" ",50,350,400,LCD_COLOR_GREEN); |
formulas | 0:38c3afd99aeb | 369 | if (Crank){ |
formulas | 0:38c3afd99aeb | 370 | PrintString("ERROR",50,CrankXPos,CrankYPos,LCD_COLOR_RED); |
formulas | 0:38c3afd99aeb | 371 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 372 | } else { |
formulas | 0:38c3afd99aeb | 373 | PrintString("OK",50,CrankXPos,CrankYPos,LCD_COLOR_GREEN); |
formulas | 0:38c3afd99aeb | 374 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 375 | }; |
formulas | 0:38c3afd99aeb | 376 | }; |
formulas | 0:38c3afd99aeb | 377 | |
formulas | 6:d6e001d7cf16 | 378 | int UpdateCapBar(int H, int H0, uint16_t StartXPos, uint16_t StartYPos){ |
formulas | 6:d6e001d7cf16 | 379 | uint16_t BarWidth = 200, BarHeight = 300; |
formulas | 6:d6e001d7cf16 | 380 | int YPos = StartYPos + BarHeight; |
formulas | 6:d6e001d7cf16 | 381 | int percent = 3; |
formulas | 6:d6e001d7cf16 | 382 | int dH = abs(H-H0); |
formulas | 6:d6e001d7cf16 | 383 | int Hmax = 100; |
formulas | 6:d6e001d7cf16 | 384 | |
formulas | 6:d6e001d7cf16 | 385 | if(dH > 0){ |
formulas | 6:d6e001d7cf16 | 386 | lcd.SetTextColor(LCD_COLOR_GREEN); |
formulas | 6:d6e001d7cf16 | 387 | lcd.FillRect(StartXPos,StartYPos + (Hmax-H)*percent,BarWidth,dH*percent); |
formulas | 6:d6e001d7cf16 | 388 | }else{ |
formulas | 6:d6e001d7cf16 | 389 | lcd.SetTextColor(LCD_COLOR_WHITE); |
formulas | 6:d6e001d7cf16 | 390 | lcd.FillRect(StartXPos,StartYPos + (Hmax-H0)*percent,BarWidth,dH*percent); |
formulas | 6:d6e001d7cf16 | 391 | }; |
formulas | 6:d6e001d7cf16 | 392 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 393 | }; |
formulas | 6:d6e001d7cf16 | 394 | |
formulas | 0:38c3afd99aeb | 395 | int UpdateLVDTScale(int H,int H0, uint16_t StartXPos, uint16_t StartYPos){ |
formulas | 0:38c3afd99aeb | 396 | uint16_t BarWidth=80,BarHeight=8; |
formulas | 0:38c3afd99aeb | 397 | int YPos; |
formulas | 0:38c3afd99aeb | 398 | int D,D0,dD; |
formulas | 0:38c3afd99aeb | 399 | |
formulas | 0:38c3afd99aeb | 400 | switch( ((H>=0)<<1)+(H0>0)){ |
formulas | 0:38c3afd99aeb | 401 | case(0): |
formulas | 0:38c3afd99aeb | 402 | D=5-abs(H)/20; |
formulas | 0:38c3afd99aeb | 403 | D0=5-abs(H0)/20; |
formulas | 0:38c3afd99aeb | 404 | break; |
formulas | 0:38c3afd99aeb | 405 | case(1): |
formulas | 0:38c3afd99aeb | 406 | D=5-abs(H)/20; |
formulas | 0:38c3afd99aeb | 407 | D0=H0/20+5; |
formulas | 0:38c3afd99aeb | 408 | break; |
formulas | 0:38c3afd99aeb | 409 | case(2): |
formulas | 0:38c3afd99aeb | 410 | D=H/20+5; |
formulas | 0:38c3afd99aeb | 411 | D0=5-abs(H0)/20; |
formulas | 0:38c3afd99aeb | 412 | break; |
formulas | 0:38c3afd99aeb | 413 | case(3): |
formulas | 0:38c3afd99aeb | 414 | D=H/20+5; |
formulas | 0:38c3afd99aeb | 415 | D0=H0/20+5; |
formulas | 0:38c3afd99aeb | 416 | break; |
formulas | 0:38c3afd99aeb | 417 | }; |
formulas | 0:38c3afd99aeb | 418 | dD=D-D0; |
formulas | 0:38c3afd99aeb | 419 | |
formulas | 0:38c3afd99aeb | 420 | if (dD>0){ |
formulas | 0:38c3afd99aeb | 421 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 422 | YPos=StartYPos-10*(D0+1); |
formulas | 0:38c3afd99aeb | 423 | }else{ |
formulas | 0:38c3afd99aeb | 424 | lcd.SetTextColor(LCD_COLOR_WHITE); |
formulas | 0:38c3afd99aeb | 425 | YPos=StartYPos-D0*10; |
formulas | 0:38c3afd99aeb | 426 | }; |
formulas | 0:38c3afd99aeb | 427 | for (int k=1;k<=abs(dD);k++){ |
formulas | 0:38c3afd99aeb | 428 | lcd.FillRect(StartXPos,YPos,BarWidth,BarHeight); |
formulas | 0:38c3afd99aeb | 429 | YPos-=10*(dD/abs(dD)); |
formulas | 0:38c3afd99aeb | 430 | }; |
formulas | 0:38c3afd99aeb | 431 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 432 | return 1; |
formulas | 0:38c3afd99aeb | 433 | }; |
formulas | 0:38c3afd99aeb | 434 | |
formulas | 0:38c3afd99aeb | 435 | |
formulas | 4:0e8413277df8 | 436 | void BrakeSignal(uint16_t brake){ |
formulas | 4:0e8413277df8 | 437 | if (brake!=0){ |
formulas | 0:38c3afd99aeb | 438 | lcd.SetTextColor(LCD_COLOR_RED); |
formulas | 0:38c3afd99aeb | 439 | lcd.SetBackColor(LCD_COLOR_RED); |
formulas | 0:38c3afd99aeb | 440 | lcd.FillRect(560,340,230,68); |
formulas | 0:38c3afd99aeb | 441 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 442 | }else { |
formulas | 0:38c3afd99aeb | 443 | lcd.SetTextColor(LCD_COLOR_DARKRED); |
formulas | 0:38c3afd99aeb | 444 | lcd.SetBackColor(LCD_COLOR_DARKRED); |
formulas | 0:38c3afd99aeb | 445 | lcd.FillRect(560,340,230,68); |
formulas | 0:38c3afd99aeb | 446 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
formulas | 0:38c3afd99aeb | 447 | }; |
formulas | 0:38c3afd99aeb | 448 | lcd.SetBackColor(LCD_COLOR_WHITE); |
formulas | 0:38c3afd99aeb | 449 | }; |
formulas | 0:38c3afd99aeb | 450 | |
formulas | 0:38c3afd99aeb | 451 | |
formulas | 0:38c3afd99aeb | 452 | void TestFont(){ |
formulas | 0:38c3afd99aeb | 453 | uint16_t XPos=0,YPos=120; |
formulas | 0:38c3afd99aeb | 454 | for(int k=0;k<68;k++){ |
formulas | 0:38c3afd99aeb | 455 | PrintChar(*font50[k],XPos,YPos,lcd.GetTextColor()); |
formulas | 0:38c3afd99aeb | 456 | XPos=XPos+(*font50[k]).width; |
formulas | 0:38c3afd99aeb | 457 | wait(0.1); |
formulas | 0:38c3afd99aeb | 458 | //pc.printf("%d",k); |
formulas | 0:38c3afd99aeb | 459 | }; |
formulas | 6:d6e001d7cf16 | 460 | }; |
formulas | 6:d6e001d7cf16 | 461 | |
formulas | 6:d6e001d7cf16 | 462 | void DrawBatTempMap(){ |
formulas | 6:d6e001d7cf16 | 463 | |
formulas | 6:d6e001d7cf16 | 464 | uint8_t segment_num = 5; |
formulas | 6:d6e001d7cf16 | 465 | uint8_t segment_distance = 20; |
formulas | 6:d6e001d7cf16 | 466 | uint8_t StartXPos = 20, StartYPos = 20; |
formulas | 6:d6e001d7cf16 | 467 | uint8_t column_num = 2; |
formulas | 6:d6e001d7cf16 | 468 | uint8_t row_num = 7; |
formulas | 6:d6e001d7cf16 | 469 | uint8_t cell_width = 60; |
formulas | 6:d6e001d7cf16 | 470 | uint8_t cell_height = 50; |
formulas | 6:d6e001d7cf16 | 471 | uint16_t x1,y1,x2,y2; |
formulas | 6:d6e001d7cf16 | 472 | uint32_t color; |
formulas | 6:d6e001d7cf16 | 473 | uint16_t R,G,B; |
formulas | 6:d6e001d7cf16 | 474 | uint16_t BarXPos = 720, BarYPos = 20, ColorBar_width = 20, ColorBar_height = 6; |
formulas | 6:d6e001d7cf16 | 475 | |
formulas | 6:d6e001d7cf16 | 476 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 477 | PrintString("S1",50,50,380,LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 478 | PrintString("S2",50,190,380,LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 479 | PrintString("S3",50,330,380,LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 480 | PrintString("S4",50,470,380,LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 481 | PrintString("S5",50,610,380,LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 482 | |
formulas | 6:d6e001d7cf16 | 483 | for (uint8_t p = 0 ; p < segment_num ; p++){ |
formulas | 6:d6e001d7cf16 | 484 | x1 = StartXPos+p*(segment_distance+2*cell_width); |
formulas | 6:d6e001d7cf16 | 485 | y1 = StartYPos; |
formulas | 6:d6e001d7cf16 | 486 | x2 = x1; |
formulas | 6:d6e001d7cf16 | 487 | y2 = StartYPos+row_num*cell_height; |
formulas | 6:d6e001d7cf16 | 488 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 6:d6e001d7cf16 | 489 | x1 = x1 + cell_width; |
formulas | 6:d6e001d7cf16 | 490 | x2 = x1; |
formulas | 6:d6e001d7cf16 | 491 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 6:d6e001d7cf16 | 492 | x1 = x1 + cell_width; |
formulas | 6:d6e001d7cf16 | 493 | x2 = x1; |
formulas | 6:d6e001d7cf16 | 494 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 6:d6e001d7cf16 | 495 | x1 = StartXPos+p*(segment_distance+2*cell_width); |
formulas | 6:d6e001d7cf16 | 496 | x2 = x1 + 2*cell_width; |
formulas | 6:d6e001d7cf16 | 497 | y1 = StartYPos; |
formulas | 6:d6e001d7cf16 | 498 | y2 = y1; |
formulas | 6:d6e001d7cf16 | 499 | |
formulas | 6:d6e001d7cf16 | 500 | for(uint8_t q = 0 ; q <= row_num ; q++){ |
formulas | 6:d6e001d7cf16 | 501 | y1 = StartYPos + q*cell_height; |
formulas | 6:d6e001d7cf16 | 502 | y2 = y1; |
formulas | 6:d6e001d7cf16 | 503 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 6:d6e001d7cf16 | 504 | }; |
formulas | 6:d6e001d7cf16 | 505 | }; |
formulas | 6:d6e001d7cf16 | 506 | |
formulas | 6:d6e001d7cf16 | 507 | for(uint8_t temp = 10 ; temp <=70; temp++){ |
formulas | 6:d6e001d7cf16 | 508 | lcd.SetTextColor(TempColor(temp)); |
formulas | 6:d6e001d7cf16 | 509 | x1 = BarXPos; |
formulas | 6:d6e001d7cf16 | 510 | y1 = BarYPos + 360 - (temp-10)*ColorBar_height; |
formulas | 6:d6e001d7cf16 | 511 | lcd.FillRect(x1,y1,ColorBar_width,ColorBar_height); |
formulas | 6:d6e001d7cf16 | 512 | //pc.printf("%d %d %d %d\n",x1,y1,x2,y2); |
formulas | 6:d6e001d7cf16 | 513 | }; |
formulas | 6:d6e001d7cf16 | 514 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 6:d6e001d7cf16 | 515 | lcd.DisplayStringAt(BarXPos+25,BarYPos,(uint8_t*)"70",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 516 | lcd.DisplayStringAt(BarXPos+25,BarYPos+60,(uint8_t*)"60",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 517 | lcd.DisplayStringAt(BarXPos+25,BarYPos+120,(uint8_t*)"50",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 518 | lcd.DisplayStringAt(BarXPos+25,BarYPos+180,(uint8_t*)"40",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 519 | lcd.DisplayStringAt(BarXPos+25,BarYPos+240,(uint8_t*)"30",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 520 | lcd.DisplayStringAt(BarXPos+25,BarYPos+300,(uint8_t*)"20",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 521 | lcd.DisplayStringAt(BarXPos+25,BarYPos+360,(uint8_t*)"10",LEFT_MODE); |
formulas | 6:d6e001d7cf16 | 522 | |
formulas | 6:d6e001d7cf16 | 523 | }; |
formulas | 6:d6e001d7cf16 | 524 | |
formulas | 6:d6e001d7cf16 | 525 | void UpdateBatTempMap(){ |
formulas | 6:d6e001d7cf16 | 526 | uint8_t column,row; |
formulas | 6:d6e001d7cf16 | 527 | |
formulas | 6:d6e001d7cf16 | 528 | for (uint8_t cell = 1 ; cell <= 70 ; cell++ ){ |
formulas | 6:d6e001d7cf16 | 529 | if (Acc_Temperature[cell] != Acc_Temperature0[cell]){ |
formulas | 6:d6e001d7cf16 | 530 | column = cell/7 + 1; |
formulas | 6:d6e001d7cf16 | 531 | row = cell%7; |
formulas | 6:d6e001d7cf16 | 532 | if (row == 0){ |
formulas | 6:d6e001d7cf16 | 533 | column = column - 1; |
formulas | 6:d6e001d7cf16 | 534 | row = 7; |
formulas | 6:d6e001d7cf16 | 535 | }; |
formulas | 6:d6e001d7cf16 | 536 | pc.printf("column %d row %d \n",column,row); |
formulas | 6:d6e001d7cf16 | 537 | UpdateCellTemp(column,row,Acc_Temperature[cell]); |
formulas | 6:d6e001d7cf16 | 538 | Acc_Temperature0[cell] = Acc_Temperature[cell]; |
formulas | 6:d6e001d7cf16 | 539 | }; |
formulas | 6:d6e001d7cf16 | 540 | }; |
formulas | 6:d6e001d7cf16 | 541 | }; |
formulas | 6:d6e001d7cf16 | 542 | |
formulas | 6:d6e001d7cf16 | 543 | uint32_t TempColor(uint8_t temperature){ |
formulas | 6:d6e001d7cf16 | 544 | //tmin = 10 tmax = 70 |
formulas | 6:d6e001d7cf16 | 545 | uint8_t tmin = 10, tmax = 70; |
formulas | 6:d6e001d7cf16 | 546 | uint32_t k = temperature - 10; |
formulas | 6:d6e001d7cf16 | 547 | uint32_t R,G,B; |
formulas | 6:d6e001d7cf16 | 548 | uint32_t color; |
formulas | 6:d6e001d7cf16 | 549 | |
formulas | 6:d6e001d7cf16 | 550 | if (k < 20){ |
formulas | 6:d6e001d7cf16 | 551 | R = 0; |
formulas | 6:d6e001d7cf16 | 552 | G = 0xFF; |
formulas | 6:d6e001d7cf16 | 553 | B = 0xFF*k/20; |
formulas | 6:d6e001d7cf16 | 554 | if (k< 0){ |
formulas | 6:d6e001d7cf16 | 555 | B = 0; |
formulas | 6:d6e001d7cf16 | 556 | }; |
formulas | 6:d6e001d7cf16 | 557 | } |
formulas | 6:d6e001d7cf16 | 558 | else if(k < 40){ |
formulas | 6:d6e001d7cf16 | 559 | R = 0xFF*(k-20)/20; |
formulas | 6:d6e001d7cf16 | 560 | G = 0xFF*(40-k)/20; |
formulas | 6:d6e001d7cf16 | 561 | B = 0xFF; |
formulas | 6:d6e001d7cf16 | 562 | } |
formulas | 6:d6e001d7cf16 | 563 | else if(k<60){ |
formulas | 6:d6e001d7cf16 | 564 | R = 0xFF; |
formulas | 6:d6e001d7cf16 | 565 | G = 0; |
formulas | 6:d6e001d7cf16 | 566 | B = 0xFF*(60-k)/20; |
formulas | 6:d6e001d7cf16 | 567 | } |
formulas | 6:d6e001d7cf16 | 568 | else{ |
formulas | 6:d6e001d7cf16 | 569 | R = 0xFF; |
formulas | 6:d6e001d7cf16 | 570 | G = 0; |
formulas | 6:d6e001d7cf16 | 571 | B = 0; |
formulas | 6:d6e001d7cf16 | 572 | }; |
formulas | 6:d6e001d7cf16 | 573 | color = (0xFF << 24) + (R << 16) + (G << 8) + B; |
formulas | 6:d6e001d7cf16 | 574 | //color = 0xFF000000 + R*65536 + G*256 + B; |
formulas | 6:d6e001d7cf16 | 575 | return color; |
formulas | 6:d6e001d7cf16 | 576 | }; |
formulas | 6:d6e001d7cf16 | 577 | |
formulas | 6:d6e001d7cf16 | 578 | void UpdateCellTemp(uint8_t column, uint8_t row, uint8_t temp){ |
formulas | 6:d6e001d7cf16 | 579 | uint8_t segment_num = 5; |
formulas | 6:d6e001d7cf16 | 580 | uint8_t segment_distance = 20; |
formulas | 6:d6e001d7cf16 | 581 | uint8_t StartXPos = 20, StartYPos = 20; |
formulas | 6:d6e001d7cf16 | 582 | uint8_t column_num = 2; |
formulas | 6:d6e001d7cf16 | 583 | uint8_t row_num = 7; |
formulas | 6:d6e001d7cf16 | 584 | uint8_t cell_width = 60; |
formulas | 6:d6e001d7cf16 | 585 | uint8_t cell_height = 50; |
formulas | 6:d6e001d7cf16 | 586 | uint16_t x,y; |
formulas | 6:d6e001d7cf16 | 587 | |
formulas | 6:d6e001d7cf16 | 588 | switch(column){ |
formulas | 6:d6e001d7cf16 | 589 | case (1): |
formulas | 6:d6e001d7cf16 | 590 | x = StartXPos; |
formulas | 6:d6e001d7cf16 | 591 | break; |
formulas | 6:d6e001d7cf16 | 592 | case (2): |
formulas | 6:d6e001d7cf16 | 593 | x = StartXPos + cell_width; |
formulas | 6:d6e001d7cf16 | 594 | break; |
formulas | 6:d6e001d7cf16 | 595 | case (3): |
formulas | 6:d6e001d7cf16 | 596 | x = StartXPos + 2*cell_width + segment_distance; |
formulas | 6:d6e001d7cf16 | 597 | break; |
formulas | 6:d6e001d7cf16 | 598 | case (4): |
formulas | 6:d6e001d7cf16 | 599 | x = StartXPos + 3*cell_width + segment_distance; |
formulas | 6:d6e001d7cf16 | 600 | break; |
formulas | 6:d6e001d7cf16 | 601 | case (5): |
formulas | 6:d6e001d7cf16 | 602 | x = StartXPos + 4*cell_width + 2*segment_distance; |
formulas | 6:d6e001d7cf16 | 603 | break; |
formulas | 6:d6e001d7cf16 | 604 | case (6): |
formulas | 6:d6e001d7cf16 | 605 | x = StartXPos + 5*cell_width + 2*segment_distance; |
formulas | 6:d6e001d7cf16 | 606 | break; |
formulas | 6:d6e001d7cf16 | 607 | case (7): |
formulas | 6:d6e001d7cf16 | 608 | x = StartXPos + 6*cell_width + 3*segment_distance; |
formulas | 6:d6e001d7cf16 | 609 | break; |
formulas | 6:d6e001d7cf16 | 610 | case (8): |
formulas | 6:d6e001d7cf16 | 611 | x = StartXPos + 7*cell_width + 3*segment_distance; |
formulas | 6:d6e001d7cf16 | 612 | break; |
formulas | 6:d6e001d7cf16 | 613 | case (9): |
formulas | 6:d6e001d7cf16 | 614 | x = StartXPos + 8*cell_width + 4*segment_distance; |
formulas | 6:d6e001d7cf16 | 615 | break; |
formulas | 6:d6e001d7cf16 | 616 | case (10): |
formulas | 6:d6e001d7cf16 | 617 | x = StartXPos + 9*cell_width + 4*segment_distance; |
formulas | 6:d6e001d7cf16 | 618 | break; |
formulas | 6:d6e001d7cf16 | 619 | }; |
formulas | 6:d6e001d7cf16 | 620 | y = StartYPos + (row - 1)*cell_height; |
formulas | 6:d6e001d7cf16 | 621 | lcd.SetTextColor(TempColor(temp)); |
formulas | 6:d6e001d7cf16 | 622 | lcd.FillRect(x+1, y+1, cell_width - 2, cell_height - 2); |
formulas | 6:d6e001d7cf16 | 623 | }; |
formulas | 6:d6e001d7cf16 | 624 | |
formulas | 6:d6e001d7cf16 | 625 | void SetFixedAccTemp(){ |
formulas | 6:d6e001d7cf16 | 626 | Acc_Temperature[1] = 28; |
formulas | 6:d6e001d7cf16 | 627 | Acc_Temperature[2] = 28; |
formulas | 6:d6e001d7cf16 | 628 | Acc_Temperature[3] = 29; |
formulas | 6:d6e001d7cf16 | 629 | Acc_Temperature[4] = 28; |
formulas | 6:d6e001d7cf16 | 630 | Acc_Temperature[5] = 29; |
formulas | 6:d6e001d7cf16 | 631 | Acc_Temperature[6] = 30; |
formulas | 6:d6e001d7cf16 | 632 | Acc_Temperature[7] = 28; |
formulas | 6:d6e001d7cf16 | 633 | Acc_Temperature[8] = 28; |
formulas | 6:d6e001d7cf16 | 634 | Acc_Temperature[9] = 29; |
formulas | 6:d6e001d7cf16 | 635 | Acc_Temperature[10] = 30; |
formulas | 6:d6e001d7cf16 | 636 | Acc_Temperature[11] = 30; |
formulas | 6:d6e001d7cf16 | 637 | Acc_Temperature[12] = 32; |
formulas | 6:d6e001d7cf16 | 638 | Acc_Temperature[13] = 30; |
formulas | 6:d6e001d7cf16 | 639 | Acc_Temperature[14] = 29; |
formulas | 6:d6e001d7cf16 | 640 | Acc_Temperature[15] = 29; |
formulas | 6:d6e001d7cf16 | 641 | Acc_Temperature[16] = 31; |
formulas | 6:d6e001d7cf16 | 642 | Acc_Temperature[17] = 30; |
formulas | 6:d6e001d7cf16 | 643 | Acc_Temperature[18] = 31; |
formulas | 6:d6e001d7cf16 | 644 | Acc_Temperature[19] = 30; |
formulas | 6:d6e001d7cf16 | 645 | Acc_Temperature[20] = 33; |
formulas | 6:d6e001d7cf16 | 646 | Acc_Temperature[21] = 30; |
formulas | 6:d6e001d7cf16 | 647 | Acc_Temperature[22] = 31; |
formulas | 6:d6e001d7cf16 | 648 | Acc_Temperature[23] = 32; |
formulas | 6:d6e001d7cf16 | 649 | Acc_Temperature[24] = 33; |
formulas | 6:d6e001d7cf16 | 650 | Acc_Temperature[25] = 33; |
formulas | 6:d6e001d7cf16 | 651 | Acc_Temperature[26] = 35; |
formulas | 6:d6e001d7cf16 | 652 | Acc_Temperature[27] = 34; |
formulas | 6:d6e001d7cf16 | 653 | Acc_Temperature[28] = 34; |
formulas | 6:d6e001d7cf16 | 654 | Acc_Temperature[29] = 32; |
formulas | 6:d6e001d7cf16 | 655 | Acc_Temperature[30] = 33; |
formulas | 6:d6e001d7cf16 | 656 | Acc_Temperature[31] = 33; |
formulas | 6:d6e001d7cf16 | 657 | Acc_Temperature[32] = 35; |
formulas | 6:d6e001d7cf16 | 658 | Acc_Temperature[33] = 34; |
formulas | 6:d6e001d7cf16 | 659 | Acc_Temperature[34] = 32; |
formulas | 6:d6e001d7cf16 | 660 | Acc_Temperature[35] = 33; |
formulas | 6:d6e001d7cf16 | 661 | Acc_Temperature[36] = 36; |
formulas | 6:d6e001d7cf16 | 662 | Acc_Temperature[37] = 36; |
formulas | 6:d6e001d7cf16 | 663 | Acc_Temperature[38] = 38; |
formulas | 6:d6e001d7cf16 | 664 | Acc_Temperature[39] = 39; |
formulas | 6:d6e001d7cf16 | 665 | Acc_Temperature[40] = 39; |
formulas | 6:d6e001d7cf16 | 666 | Acc_Temperature[41] = 38; |
formulas | 6:d6e001d7cf16 | 667 | Acc_Temperature[42] = 37; |
formulas | 6:d6e001d7cf16 | 668 | Acc_Temperature[43] = 33; |
formulas | 6:d6e001d7cf16 | 669 | Acc_Temperature[44] = 34; |
formulas | 6:d6e001d7cf16 | 670 | Acc_Temperature[45] = 33; |
formulas | 6:d6e001d7cf16 | 671 | Acc_Temperature[46] = 33; |
formulas | 6:d6e001d7cf16 | 672 | Acc_Temperature[47] = 32; |
formulas | 6:d6e001d7cf16 | 673 | Acc_Temperature[48] = 33; |
formulas | 6:d6e001d7cf16 | 674 | Acc_Temperature[49] = 34; |
formulas | 6:d6e001d7cf16 | 675 | Acc_Temperature[50] = 34; |
formulas | 6:d6e001d7cf16 | 676 | Acc_Temperature[51] = 35; |
formulas | 6:d6e001d7cf16 | 677 | Acc_Temperature[52] = 33; |
formulas | 6:d6e001d7cf16 | 678 | Acc_Temperature[53] = 34; |
formulas | 6:d6e001d7cf16 | 679 | Acc_Temperature[54] = 34; |
formulas | 6:d6e001d7cf16 | 680 | Acc_Temperature[55] = 35; |
formulas | 6:d6e001d7cf16 | 681 | Acc_Temperature[56] = 35; |
formulas | 6:d6e001d7cf16 | 682 | Acc_Temperature[57] = 33; |
formulas | 6:d6e001d7cf16 | 683 | Acc_Temperature[58] = 33; |
formulas | 6:d6e001d7cf16 | 684 | Acc_Temperature[59] = 37; |
formulas | 6:d6e001d7cf16 | 685 | Acc_Temperature[60] = 32; |
formulas | 6:d6e001d7cf16 | 686 | Acc_Temperature[61] = 34; |
formulas | 6:d6e001d7cf16 | 687 | Acc_Temperature[62] = 34; |
formulas | 6:d6e001d7cf16 | 688 | Acc_Temperature[63] = 33; |
formulas | 6:d6e001d7cf16 | 689 | Acc_Temperature[64] = 34; |
formulas | 6:d6e001d7cf16 | 690 | Acc_Temperature[65] = 36; |
formulas | 6:d6e001d7cf16 | 691 | Acc_Temperature[66] = 35; |
formulas | 6:d6e001d7cf16 | 692 | Acc_Temperature[67] = 35; |
formulas | 6:d6e001d7cf16 | 693 | Acc_Temperature[68] = 35; |
formulas | 6:d6e001d7cf16 | 694 | Acc_Temperature[69] = 34; |
formulas | 6:d6e001d7cf16 | 695 | Acc_Temperature[70] = 34; |
formulas | 6:d6e001d7cf16 | 696 | |
formulas | 0:38c3afd99aeb | 697 | }; |