Integration with potentiometer
Dependencies: BSP_DISCO_F469NI LCD_DISCO_F469NI SD_DISCO_F469NI mbed
functions.cpp@1:61fe443f9d7f, 2017-12-07 (annotated)
- Committer:
- formulas
- Date:
- Thu Dec 07 16:54:30 2017 +0000
- Revision:
- 1:61fe443f9d7f
- Parent:
- 0:e53b0806a628
sadasd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
formulas | 0:e53b0806a628 | 1 | #include "functions.h" |
formulas | 0:e53b0806a628 | 2 | #include "gears.h" |
formulas | 0:e53b0806a628 | 3 | #include "font100.h" |
formulas | 0:e53b0806a628 | 4 | #include "font50.h" |
formulas | 0:e53b0806a628 | 5 | |
formulas | 0:e53b0806a628 | 6 | extern LCD_DISCO_F469NI lcd; |
formulas | 0:e53b0806a628 | 7 | extern SD_DISCO_F469NI sd; |
formulas | 0:e53b0806a628 | 8 | extern Serial pc; |
formulas | 0:e53b0806a628 | 9 | |
formulas | 0:e53b0806a628 | 10 | GEAR Idle{'0',256,384,idleBitmap}; |
formulas | 0:e53b0806a628 | 11 | GEAR Gear1{'1',256,384,gear1Bitmap}; |
formulas | 0:e53b0806a628 | 12 | GEAR Gear2{'2',256,384,gear2Bitmap}; |
formulas | 0:e53b0806a628 | 13 | GEAR Gear3{'3',256,384,gear3Bitmap}; |
formulas | 0:e53b0806a628 | 14 | GEAR Gear4{'4',256,384,gear4Bitmap}; |
formulas | 0:e53b0806a628 | 15 | GEAR Gear5{'5',256,384,gear5Bitmap}; |
formulas | 0:e53b0806a628 | 16 | GEAR Gear6{'6',256,384,gear6Bitmap}; |
formulas | 0:e53b0806a628 | 17 | GEAR *Gears[7]={&Idle,&Gear1,&Gear2,&Gear3,&Gear4,&Gear5,&Gear6}; |
formulas | 0:e53b0806a628 | 18 | IMAGE LogoBig{800,480,LOGOBIG_START_ADDR}; |
formulas | 0:e53b0806a628 | 19 | IMAGE LogoSmall{160,64,LOGOSMALL_START_ADDR}; |
formulas | 0:e53b0806a628 | 20 | IMAGE Branko{250,480,1576960}; |
formulas | 0:e53b0806a628 | 21 | |
formulas | 0:e53b0806a628 | 22 | void DrawSpeedMeter(){ |
formulas | 0:e53b0806a628 | 23 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
formulas | 0:e53b0806a628 | 24 | double THETA1=PHI,THETA2; |
formulas | 0:e53b0806a628 | 25 | |
formulas | 0:e53b0806a628 | 26 | x1=(int)(400-530*cos(THETA1)); |
formulas | 0:e53b0806a628 | 27 | y1=(int)(550-530*sin(THETA1)); |
formulas | 0:e53b0806a628 | 28 | x2=(int)(400-500*cos(THETA1)); |
formulas | 0:e53b0806a628 | 29 | y2=(int)(550-500*sin(THETA1)); |
formulas | 0:e53b0806a628 | 30 | |
formulas | 0:e53b0806a628 | 31 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 32 | for (int V=0;V<=150;V++){ |
formulas | 0:e53b0806a628 | 33 | THETA2=THETA1+ALPHA/Vmax; |
formulas | 0:e53b0806a628 | 34 | x3=(int)(400-530*cos(THETA2)); |
formulas | 0:e53b0806a628 | 35 | y3=(int)(550-530*sin(THETA2)); |
formulas | 0:e53b0806a628 | 36 | x4=(int)(400-500*cos(THETA2)); |
formulas | 0:e53b0806a628 | 37 | y4=(int)(550-500*sin(THETA2)); |
formulas | 0:e53b0806a628 | 38 | if(V<150){ |
formulas | 0:e53b0806a628 | 39 | lcd.DrawLine(x1,y1,x3,y3); |
formulas | 0:e53b0806a628 | 40 | lcd.DrawLine(x2,y2,x4,y4); |
formulas | 0:e53b0806a628 | 41 | }; |
formulas | 0:e53b0806a628 | 42 | lcd.SetFont(&Font20); |
formulas | 0:e53b0806a628 | 43 | if(V%10==0){ |
formulas | 0:e53b0806a628 | 44 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 0:e53b0806a628 | 45 | char Vchar[3]; |
formulas | 0:e53b0806a628 | 46 | sprintf(Vchar,"%d",(int)V); |
formulas | 0:e53b0806a628 | 47 | uint16_t xnum=x2,ynum=y2; |
formulas | 0:e53b0806a628 | 48 | if (V==0 | V==10 | V==20 | V==30){ |
formulas | 0:e53b0806a628 | 49 | xnum=x2,ynum=y2+5; |
formulas | 0:e53b0806a628 | 50 | }else if (V==40 | V==50 | V==60){ |
formulas | 0:e53b0806a628 | 51 | xnum=x2-3,ynum=y2+5; |
formulas | 0:e53b0806a628 | 52 | }else if (V==70 | V==80){ |
formulas | 0:e53b0806a628 | 53 | xnum=x2-14,ynum=y2+5; |
formulas | 0:e53b0806a628 | 54 | }else if (V==90){ |
formulas | 0:e53b0806a628 | 55 | xnum=x2-20,ynum=y2+5; |
formulas | 0:e53b0806a628 | 56 | }else if (V==100 | V==110 | V==120) { |
formulas | 0:e53b0806a628 | 57 | xnum=x2-35,ynum=y2+4; |
formulas | 0:e53b0806a628 | 58 | }else if (V==130 | V==140 | V==150){ |
formulas | 0:e53b0806a628 | 59 | xnum=x2-35,ynum=y2+5; |
formulas | 0:e53b0806a628 | 60 | }; |
formulas | 0:e53b0806a628 | 61 | lcd.DisplayStringAt(xnum,ynum,(uint8_t*)Vchar,LEFT_MODE); |
formulas | 0:e53b0806a628 | 62 | }; |
formulas | 0:e53b0806a628 | 63 | x1=x3,y1=y3,x2=x4,y2=y4; |
formulas | 0:e53b0806a628 | 64 | THETA1=THETA2; |
formulas | 0:e53b0806a628 | 65 | }; |
formulas | 0:e53b0806a628 | 66 | }; |
formulas | 0:e53b0806a628 | 67 | |
formulas | 0:e53b0806a628 | 68 | void PrintChar(CHAR Char,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
formulas | 0:e53b0806a628 | 69 | uint16_t width=Char.width; |
formulas | 0:e53b0806a628 | 70 | uint16_t height=Char.height; |
formulas | 0:e53b0806a628 | 71 | uint16_t horpos,vertpos; |
formulas | 0:e53b0806a628 | 72 | uint16_t bitloc; |
formulas | 0:e53b0806a628 | 73 | uint32_t DrawColor; |
formulas | 0:e53b0806a628 | 74 | char pos[9]; |
formulas | 0:e53b0806a628 | 75 | //uint8_t dbg[50]; |
formulas | 0:e53b0806a628 | 76 | for(horpos=0;horpos<width;horpos++){ |
formulas | 0:e53b0806a628 | 77 | for(vertpos=0;vertpos<height/8;vertpos++){ |
formulas | 0:e53b0806a628 | 78 | sprintf(pos,BYTE_TO_BINARY_PATTERN,BYTE_TO_BINARY(Char.bitmap[horpos*height/8+vertpos])); |
formulas | 0:e53b0806a628 | 79 | //pc.printf("%d. %s\n",horpos*height/8+vertpos,pos); |
formulas | 0:e53b0806a628 | 80 | for(bitloc=0;bitloc<8;bitloc++) { |
formulas | 0:e53b0806a628 | 81 | if (pos[bitloc]=='1') { |
formulas | 0:e53b0806a628 | 82 | DrawColor=TextColor; |
formulas | 0:e53b0806a628 | 83 | } |
formulas | 0:e53b0806a628 | 84 | else{ |
formulas | 0:e53b0806a628 | 85 | DrawColor=lcd.GetBackColor(); |
formulas | 0:e53b0806a628 | 86 | }; |
formulas | 0:e53b0806a628 | 87 | lcd.DrawPixel(StartXPos+horpos,StartYPos+vertpos*8+bitloc,DrawColor); |
formulas | 0:e53b0806a628 | 88 | //pc.printf("%d,%d\n",StartXPos+horpos,StartYPos+vertpos*8+bitloc); |
formulas | 0:e53b0806a628 | 89 | } |
formulas | 0:e53b0806a628 | 90 | } |
formulas | 0:e53b0806a628 | 91 | } |
formulas | 0:e53b0806a628 | 92 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 93 | }; |
formulas | 0:e53b0806a628 | 94 | |
formulas | 0:e53b0806a628 | 95 | void PrintString(char str[],int font,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
formulas | 0:e53b0806a628 | 96 | //pc.printf("Function activated.\n"); |
formulas | 0:e53b0806a628 | 97 | char *a=str; |
formulas | 0:e53b0806a628 | 98 | int p=0; |
formulas | 0:e53b0806a628 | 99 | while(a[p]){ |
formulas | 0:e53b0806a628 | 100 | //pc.printf("Searching char: %c\n",a[p]); |
formulas | 0:e53b0806a628 | 101 | for(int k=0;k<68;k++){ |
formulas | 0:e53b0806a628 | 102 | //pc.printf("Character %c\n",(*font50[k]).name); |
formulas | 0:e53b0806a628 | 103 | if((*font50[k]).name==a[p]){ |
formulas | 0:e53b0806a628 | 104 | // pc.printf("Found!\n"); |
formulas | 0:e53b0806a628 | 105 | PrintChar(*font50[k],StartXPos,StartYPos,TextColor); |
formulas | 0:e53b0806a628 | 106 | StartXPos+=(*font50[k]).width; |
formulas | 0:e53b0806a628 | 107 | k=100; |
formulas | 0:e53b0806a628 | 108 | }; |
formulas | 0:e53b0806a628 | 109 | }; |
formulas | 0:e53b0806a628 | 110 | //pc.printf("End.\n"); |
formulas | 0:e53b0806a628 | 111 | p++; |
formulas | 0:e53b0806a628 | 112 | }; |
formulas | 0:e53b0806a628 | 113 | }; |
formulas | 0:e53b0806a628 | 114 | |
formulas | 0:e53b0806a628 | 115 | |
formulas | 0:e53b0806a628 | 116 | |
formulas | 0:e53b0806a628 | 117 | |
formulas | 0:e53b0806a628 | 118 | void ChangeNumber(int num,int num0,int Font,uint16_t StartXPos,uint16_t StartYPos){ |
formulas | 0:e53b0806a628 | 119 | int digit[3],digit0[3]; |
formulas | 0:e53b0806a628 | 120 | CHAR **font; |
formulas | 0:e53b0806a628 | 121 | digit[0]=num/100; |
formulas | 0:e53b0806a628 | 122 | digit[1]=num/10-digit[0]*10; |
formulas | 0:e53b0806a628 | 123 | digit[2]=num%10; |
formulas | 0:e53b0806a628 | 124 | digit0[0]=num0/100; |
formulas | 0:e53b0806a628 | 125 | digit0[1]=num0/10-digit0[0]*10; |
formulas | 0:e53b0806a628 | 126 | digit0[2]=num0%10; |
formulas | 0:e53b0806a628 | 127 | if (Font==50){ |
formulas | 0:e53b0806a628 | 128 | font=font50; |
formulas | 0:e53b0806a628 | 129 | }else if (Font=100){ |
formulas | 0:e53b0806a628 | 130 | font=font100; |
formulas | 0:e53b0806a628 | 131 | }; |
formulas | 0:e53b0806a628 | 132 | uint8_t char_width=(*font[0]).width; |
formulas | 0:e53b0806a628 | 133 | if(digit[0]!=digit0[0] || num0==0){ |
formulas | 0:e53b0806a628 | 134 | PrintChar(*font[digit[0]],StartXPos,StartYPos,lcd.GetTextColor()); |
formulas | 0:e53b0806a628 | 135 | }; |
formulas | 0:e53b0806a628 | 136 | if(digit[1]!=digit0[1] || num0==0){ |
formulas | 0:e53b0806a628 | 137 | PrintChar(*font[digit[1]],StartXPos+char_width,StartYPos,lcd.GetTextColor()); |
formulas | 0:e53b0806a628 | 138 | }; |
formulas | 0:e53b0806a628 | 139 | if(digit[2]!=digit0[2] || num0==0){ |
formulas | 0:e53b0806a628 | 140 | PrintChar(*font[digit[2]],StartXPos+char_width*2,StartYPos,lcd.GetTextColor()); |
formulas | 0:e53b0806a628 | 141 | }; |
formulas | 0:e53b0806a628 | 142 | }; |
formulas | 0:e53b0806a628 | 143 | |
formulas | 0:e53b0806a628 | 144 | |
formulas | 0:e53b0806a628 | 145 | void DrawRGBImage(IMAGE Image,uint16_t StartXPos,uint16_t StartYPos){ |
formulas | 0:e53b0806a628 | 146 | uint32_t p,q; |
formulas | 0:e53b0806a628 | 147 | uint32_t BlockBuffer[128]; |
formulas | 0:e53b0806a628 | 148 | uint16_t xpos=0,ypos=0; |
formulas | 0:e53b0806a628 | 149 | for(p=0;p<Image.width*Image.height/128;p++){ |
formulas | 0:e53b0806a628 | 150 | sd.ReadBlocks(BlockBuffer,Image.START_ADDR+p*512,1,SD_DATATIMEOUT); |
formulas | 0:e53b0806a628 | 151 | for(q=0;q<128;q++){ |
formulas | 0:e53b0806a628 | 152 | if(ypos<Image.height){ |
formulas | 0:e53b0806a628 | 153 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
formulas | 0:e53b0806a628 | 154 | } |
formulas | 0:e53b0806a628 | 155 | else{ |
formulas | 0:e53b0806a628 | 156 | xpos++; |
formulas | 0:e53b0806a628 | 157 | ypos=0; |
formulas | 0:e53b0806a628 | 158 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
formulas | 0:e53b0806a628 | 159 | } |
formulas | 0:e53b0806a628 | 160 | ypos++; |
formulas | 0:e53b0806a628 | 161 | } |
formulas | 0:e53b0806a628 | 162 | } |
formulas | 0:e53b0806a628 | 163 | }; |
formulas | 0:e53b0806a628 | 164 | |
formulas | 0:e53b0806a628 | 165 | |
formulas | 0:e53b0806a628 | 166 | void UpdateSpeedMeter(int V, int dV){ |
formulas | 0:e53b0806a628 | 167 | //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:e53b0806a628 | 168 | //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:e53b0806a628 | 169 | uint32_t OldColor,RewriteColor; |
formulas | 0:e53b0806a628 | 170 | double THETA1,THETA2; |
formulas | 0:e53b0806a628 | 171 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
formulas | 0:e53b0806a628 | 172 | uint16_t startx,starty,leftupx,rightupx,leftdownx,rightdownx,ypos; |
formulas | 0:e53b0806a628 | 173 | |
formulas | 0:e53b0806a628 | 174 | //Obradjivanje polje po polje. Svako polje prestavlja odredjenu vrednost kmh. |
formulas | 0:e53b0806a628 | 175 | for(int k=1;k<=abs(dV);k++){ |
formulas | 0:e53b0806a628 | 176 | //Uokviravanje polja koje se trenutno obradjuje. Granice su crne kako bi se jasno razgranicilo polje od ostatka bara. |
formulas | 0:e53b0806a628 | 177 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 178 | THETA1=PHI+((double)V)*ALPHA/Vmax; |
formulas | 0:e53b0806a628 | 179 | x1=(int)(400-530*cos(THETA1)); |
formulas | 0:e53b0806a628 | 180 | y1=(int)(550-530*sin(THETA1)); |
formulas | 0:e53b0806a628 | 181 | x2=(int)(400-500*cos(THETA1)); |
formulas | 0:e53b0806a628 | 182 | y2=(int)(550-500*sin(THETA1)); |
formulas | 0:e53b0806a628 | 183 | THETA2=PHI+((double)(V+dV/abs(dV)))*ALPHA/Vmax; |
formulas | 0:e53b0806a628 | 184 | x3=(int)(400-530*cos(THETA2)); |
formulas | 0:e53b0806a628 | 185 | y3=(int)(550-530*sin(THETA2)); |
formulas | 0:e53b0806a628 | 186 | x4=(int)(400-500*cos(THETA2)); |
formulas | 0:e53b0806a628 | 187 | y4=(int)(550-500*sin(THETA2)); |
formulas | 0:e53b0806a628 | 188 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 0:e53b0806a628 | 189 | lcd.DrawLine(x3,y3,x4,y4); |
formulas | 0:e53b0806a628 | 190 | lcd.DrawLine(x1,y1,x3,y3); |
formulas | 0:e53b0806a628 | 191 | lcd.DrawLine(x2,y2,x4,y4); |
formulas | 0:e53b0806a628 | 192 | |
formulas | 0:e53b0806a628 | 193 | //Odredjivanje pocetnih koordinata i kojom bojom ce se polje bojiti. |
formulas | 0:e53b0806a628 | 194 | if(dV>0){ |
formulas | 0:e53b0806a628 | 195 | startx=(x2+x3)/2; |
formulas | 0:e53b0806a628 | 196 | starty=(y2+y3)/2; |
formulas | 0:e53b0806a628 | 197 | if(V+1<=50){ |
formulas | 0:e53b0806a628 | 198 | RewriteColor=LCD_COLOR_GREEN; |
formulas | 0:e53b0806a628 | 199 | }else if (V+1>50 & V+1<=100){ |
formulas | 0:e53b0806a628 | 200 | RewriteColor=LCD_COLOR_BLUE; |
formulas | 0:e53b0806a628 | 201 | }else{ |
formulas | 0:e53b0806a628 | 202 | RewriteColor=LCD_COLOR_RED; |
formulas | 0:e53b0806a628 | 203 | }; |
formulas | 0:e53b0806a628 | 204 | OldColor=LCD_COLOR_WHITE; |
formulas | 0:e53b0806a628 | 205 | }else{ |
formulas | 0:e53b0806a628 | 206 | startx=(x1+x4)/2; |
formulas | 0:e53b0806a628 | 207 | starty=(y1+y4)/2; |
formulas | 0:e53b0806a628 | 208 | if(V<=50){ |
formulas | 0:e53b0806a628 | 209 | OldColor=LCD_COLOR_GREEN; |
formulas | 0:e53b0806a628 | 210 | }else if (V>50 & V<=100){ |
formulas | 0:e53b0806a628 | 211 | OldColor=LCD_COLOR_BLUE; |
formulas | 0:e53b0806a628 | 212 | }else{ |
formulas | 0:e53b0806a628 | 213 | OldColor=LCD_COLOR_RED; |
formulas | 0:e53b0806a628 | 214 | }; |
formulas | 0:e53b0806a628 | 215 | RewriteColor=LCD_COLOR_WHITE; |
formulas | 0:e53b0806a628 | 216 | }; |
formulas | 0:e53b0806a628 | 217 | lcd.SetTextColor(RewriteColor); |
formulas | 0:e53b0806a628 | 218 | |
formulas | 0:e53b0806a628 | 219 | //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:e53b0806a628 | 220 | //na gore pa zatim od sredine na dole. |
formulas | 0:e53b0806a628 | 221 | leftupx=startx; |
formulas | 0:e53b0806a628 | 222 | rightupx=startx+1; |
formulas | 0:e53b0806a628 | 223 | ypos=starty; |
formulas | 0:e53b0806a628 | 224 | while(leftupx<rightupx){ |
formulas | 0:e53b0806a628 | 225 | |
formulas | 0:e53b0806a628 | 226 | ypos--; |
formulas | 0:e53b0806a628 | 227 | if(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 228 | while(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 229 | leftupx++; |
formulas | 0:e53b0806a628 | 230 | } |
formulas | 0:e53b0806a628 | 231 | } else { |
formulas | 0:e53b0806a628 | 232 | while(lcd.ReadPixel(leftupx,ypos)==OldColor){ |
formulas | 0:e53b0806a628 | 233 | leftupx--; |
formulas | 0:e53b0806a628 | 234 | }; |
formulas | 0:e53b0806a628 | 235 | leftupx++; |
formulas | 0:e53b0806a628 | 236 | }; |
formulas | 0:e53b0806a628 | 237 | if(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 238 | while(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 239 | rightupx--; |
formulas | 0:e53b0806a628 | 240 | } |
formulas | 0:e53b0806a628 | 241 | } else { |
formulas | 0:e53b0806a628 | 242 | while(lcd.ReadPixel(rightupx,ypos)==OldColor){ |
formulas | 0:e53b0806a628 | 243 | rightupx++; |
formulas | 0:e53b0806a628 | 244 | }; |
formulas | 0:e53b0806a628 | 245 | rightupx--; |
formulas | 0:e53b0806a628 | 246 | }; |
formulas | 0:e53b0806a628 | 247 | |
formulas | 0:e53b0806a628 | 248 | if (leftupx<=rightupx){ |
formulas | 0:e53b0806a628 | 249 | lcd.DrawLine(leftupx,ypos,rightupx,ypos); |
formulas | 0:e53b0806a628 | 250 | }; |
formulas | 0:e53b0806a628 | 251 | }; |
formulas | 0:e53b0806a628 | 252 | |
formulas | 0:e53b0806a628 | 253 | leftdownx=startx; |
formulas | 0:e53b0806a628 | 254 | rightdownx=startx+1; |
formulas | 0:e53b0806a628 | 255 | ypos=starty-1; |
formulas | 0:e53b0806a628 | 256 | while(leftdownx<rightdownx){ |
formulas | 0:e53b0806a628 | 257 | ypos++; |
formulas | 0:e53b0806a628 | 258 | if(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 259 | while(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 260 | leftdownx++; |
formulas | 0:e53b0806a628 | 261 | } |
formulas | 0:e53b0806a628 | 262 | } else { |
formulas | 0:e53b0806a628 | 263 | while(lcd.ReadPixel(leftdownx,ypos)==OldColor){ |
formulas | 0:e53b0806a628 | 264 | leftdownx--; |
formulas | 0:e53b0806a628 | 265 | }; |
formulas | 0:e53b0806a628 | 266 | leftdownx++; |
formulas | 0:e53b0806a628 | 267 | }; |
formulas | 0:e53b0806a628 | 268 | if(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 269 | while(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
formulas | 0:e53b0806a628 | 270 | rightdownx--; |
formulas | 0:e53b0806a628 | 271 | } |
formulas | 0:e53b0806a628 | 272 | } else { |
formulas | 0:e53b0806a628 | 273 | while(lcd.ReadPixel(rightdownx,ypos)==OldColor){ |
formulas | 0:e53b0806a628 | 274 | rightdownx++; |
formulas | 0:e53b0806a628 | 275 | }; |
formulas | 0:e53b0806a628 | 276 | rightdownx--; |
formulas | 0:e53b0806a628 | 277 | }; |
formulas | 0:e53b0806a628 | 278 | |
formulas | 0:e53b0806a628 | 279 | if (leftdownx<=rightdownx){ |
formulas | 0:e53b0806a628 | 280 | lcd.DrawLine(leftdownx,ypos,rightdownx,ypos); |
formulas | 0:e53b0806a628 | 281 | }; |
formulas | 0:e53b0806a628 | 282 | }; |
formulas | 0:e53b0806a628 | 283 | |
formulas | 0:e53b0806a628 | 284 | //Brisanje granicnika. Vodi se racuna ako je granica neki od dekadnih podeoka koji treba da ostane crn. |
formulas | 0:e53b0806a628 | 285 | if(V%10!=0){ |
formulas | 0:e53b0806a628 | 286 | lcd.DrawLine(x1,y1,x2,y2); |
formulas | 0:e53b0806a628 | 287 | if (dV<0){ |
formulas | 0:e53b0806a628 | 288 | lcd.DrawPixel(x1,y1,LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 289 | lcd.DrawPixel(x2,y2,LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 290 | }; |
formulas | 0:e53b0806a628 | 291 | }; |
formulas | 0:e53b0806a628 | 292 | V+=dV/abs(dV); |
formulas | 0:e53b0806a628 | 293 | }; |
formulas | 0:e53b0806a628 | 294 | }; |
formulas | 0:e53b0806a628 | 295 | |
formulas | 0:e53b0806a628 | 296 | void UpdateLVDTScale(int D,int D0, uint16_t StartXPos, uint16_t StartYPos){ |
formulas | 0:e53b0806a628 | 297 | int dD; |
formulas | 0:e53b0806a628 | 298 | uint16_t BarWidth=80,BarHeight=8; |
formulas | 0:e53b0806a628 | 299 | int YPos; |
formulas | 0:e53b0806a628 | 300 | |
formulas | 0:e53b0806a628 | 301 | D=D/15; |
formulas | 0:e53b0806a628 | 302 | D0=D0/15; |
formulas | 0:e53b0806a628 | 303 | dD=D-D0; |
formulas | 0:e53b0806a628 | 304 | |
formulas | 0:e53b0806a628 | 305 | if (dD>0){ |
formulas | 0:e53b0806a628 | 306 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 307 | YPos=StartYPos-10*(D0+1); |
formulas | 0:e53b0806a628 | 308 | }else{ |
formulas | 0:e53b0806a628 | 309 | lcd.SetTextColor(LCD_COLOR_WHITE); |
formulas | 0:e53b0806a628 | 310 | YPos=StartYPos-D0*10; |
formulas | 0:e53b0806a628 | 311 | }; |
formulas | 0:e53b0806a628 | 312 | for (int k=1;k<=abs(dD);k++){ |
formulas | 0:e53b0806a628 | 313 | lcd.FillRect(StartXPos,YPos,BarWidth,BarHeight); |
formulas | 0:e53b0806a628 | 314 | YPos-=10*(dD/abs(dD)); |
formulas | 0:e53b0806a628 | 315 | }; |
formulas | 0:e53b0806a628 | 316 | lcd.SetTextColor(LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 317 | }; |
formulas | 0:e53b0806a628 | 318 | |
formulas | 0:e53b0806a628 | 319 | |
formulas | 0:e53b0806a628 | 320 | void BrakeSignal(int brake,int brake0){ |
formulas | 0:e53b0806a628 | 321 | if(brake!=brake0){ |
formulas | 0:e53b0806a628 | 322 | if (brake==1){ |
formulas | 0:e53b0806a628 | 323 | lcd.SetTextColor(LCD_COLOR_RED); |
formulas | 0:e53b0806a628 | 324 | lcd.SetBackColor(LCD_COLOR_RED); |
formulas | 0:e53b0806a628 | 325 | lcd.FillRect(560,340,230,68); |
formulas | 0:e53b0806a628 | 326 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 327 | }else { |
formulas | 0:e53b0806a628 | 328 | lcd.SetTextColor(LCD_COLOR_DARKRED); |
formulas | 0:e53b0806a628 | 329 | lcd.SetBackColor(LCD_COLOR_DARKRED); |
formulas | 0:e53b0806a628 | 330 | lcd.FillRect(560,340,230,68); |
formulas | 0:e53b0806a628 | 331 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
formulas | 0:e53b0806a628 | 332 | }; |
formulas | 0:e53b0806a628 | 333 | }; |
formulas | 0:e53b0806a628 | 334 | lcd.SetBackColor(LCD_COLOR_WHITE); |
formulas | 0:e53b0806a628 | 335 | }; |
formulas | 0:e53b0806a628 | 336 | |
formulas | 0:e53b0806a628 | 337 | |
formulas | 0:e53b0806a628 | 338 | void TestFont(){ |
formulas | 0:e53b0806a628 | 339 | uint16_t XPos=0,YPos=120; |
formulas | 0:e53b0806a628 | 340 | for(int k=0;k<68;k++){ |
formulas | 0:e53b0806a628 | 341 | PrintChar(*font50[k],XPos,YPos,lcd.GetTextColor()); |
formulas | 0:e53b0806a628 | 342 | XPos=XPos+(*font50[k]).width; |
formulas | 0:e53b0806a628 | 343 | wait(0.1); |
formulas | 0:e53b0806a628 | 344 | //pc.printf("%d",k); |
formulas | 0:e53b0806a628 | 345 | }; |
formulas | 0:e53b0806a628 | 346 | }; |