27.03.2019. revision New stuff added: -New CANlibrary -RPM LED -minor tweaks and changes
Dependencies: mbed LCD_DISCO_F469NIa SD_DISCO_F469NI BSP_DISCO_F469NIa EEPROM_DISCO_F469NI
draw_print_library.cpp@0:bcb81d0218cf, 2019-03-27 (annotated)
- Committer:
- Stefan_Sofijanic
- Date:
- Wed Mar 27 09:37:17 2019 +0000
- Revision:
- 0:bcb81d0218cf
27.03.2019. revision; New stuff added:; -New CANlibrary; -RPM LED; -minor tweaks and changes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Stefan_Sofijanic | 0:bcb81d0218cf | 1 | #include "draw_print_library.h" |
Stefan_Sofijanic | 0:bcb81d0218cf | 2 | #include "gears.h" |
Stefan_Sofijanic | 0:bcb81d0218cf | 3 | #include "font100.h" |
Stefan_Sofijanic | 0:bcb81d0218cf | 4 | #include "font50.h" |
Stefan_Sofijanic | 0:bcb81d0218cf | 5 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 6 | extern LCD_DISCO_F469NI lcd; |
Stefan_Sofijanic | 0:bcb81d0218cf | 7 | extern SD_DISCO_F469NI sd; |
Stefan_Sofijanic | 0:bcb81d0218cf | 8 | extern Serial pc; |
Stefan_Sofijanic | 0:bcb81d0218cf | 9 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 10 | extern uint8_t lvdtref; |
Stefan_Sofijanic | 0:bcb81d0218cf | 11 | extern int FL_LVDT_Ref,FR_LVDT_Ref,RL_LVDT_Ref,RR_LVDT_Ref; |
Stefan_Sofijanic | 0:bcb81d0218cf | 12 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 13 | //Gears |
Stefan_Sofijanic | 0:bcb81d0218cf | 14 | GEAR Idle{'0',256,384,idleBitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 15 | GEAR Gear1{'1',256,384,gear1Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 16 | GEAR Gear2{'2',256,384,gear2Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 17 | GEAR Gear3{'3',256,384,gear3Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 18 | GEAR Gear4{'4',256,384,gear4Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 19 | GEAR Gear5{'5',256,384,gear5Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 20 | GEAR Gear6{'6',256,384,gear6Bitmap}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 21 | GEAR *Gears[7]={&Idle,&Gear1,&Gear2,&Gear3,&Gear4,&Gear5,&Gear6}; //Gears array |
Stefan_Sofijanic | 0:bcb81d0218cf | 22 | IMAGE LogoBig{800,480,LOGOBIG_START_ADDR}; //Big Logo |
Stefan_Sofijanic | 0:bcb81d0218cf | 23 | IMAGE LogoSmall{160,64,LOGOSMALL_START_ADDR}; //Small Logo |
Stefan_Sofijanic | 0:bcb81d0218cf | 24 | IMAGE Branko{250,480,1576960}; //Branko |
Stefan_Sofijanic | 0:bcb81d0218cf | 25 | IMAGE NewYearCongat{800,480,NEW_YEAR_CONGAT_START_ADDR}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 26 | //IMAGE Miljana[250,480,---}; |
Stefan_Sofijanic | 0:bcb81d0218cf | 27 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 28 | void DrawSpeedMeter(){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 29 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
Stefan_Sofijanic | 0:bcb81d0218cf | 30 | double THETA1=PHI,THETA2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 31 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 32 | //Set starting point for drawing |
Stefan_Sofijanic | 0:bcb81d0218cf | 33 | x1=(int)(400-530*cos(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 34 | y1=(int)(550-530*sin(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 35 | x2=(int)(400-500*cos(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 36 | y2=(int)(550-500*sin(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 37 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 38 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 39 | for (int V=0;V<=150;V++){ //Draw from 0 to 150 |
Stefan_Sofijanic | 0:bcb81d0218cf | 40 | //Set angle for next speed scale value |
Stefan_Sofijanic | 0:bcb81d0218cf | 41 | THETA2=THETA1+ALPHA/Vmax; |
Stefan_Sofijanic | 0:bcb81d0218cf | 42 | x3=(int)(400-530*cos(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 43 | y3=(int)(550-530*sin(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 44 | x4=(int)(400-500*cos(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 45 | y4=(int)(550-500*sin(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 46 | if(V<150){ //Draw arch section |
Stefan_Sofijanic | 0:bcb81d0218cf | 47 | lcd.DrawLine(x1,y1,x3,y3); |
Stefan_Sofijanic | 0:bcb81d0218cf | 48 | lcd.DrawLine(x2,y2,x4,y4); |
Stefan_Sofijanic | 0:bcb81d0218cf | 49 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 50 | lcd.SetFont(&Font20); |
Stefan_Sofijanic | 0:bcb81d0218cf | 51 | if(V%10==0){ //Print round values (0,10,20,...) |
Stefan_Sofijanic | 0:bcb81d0218cf | 52 | lcd.DrawLine(x1,y1,x2,y2); //Draw round scale value |
Stefan_Sofijanic | 0:bcb81d0218cf | 53 | char Vchar[3]; |
Stefan_Sofijanic | 0:bcb81d0218cf | 54 | sprintf(Vchar,"%d",(int)V); |
Stefan_Sofijanic | 0:bcb81d0218cf | 55 | uint16_t xnum=x2,ynum=y2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 56 | if (V==0 | V==10 | V==20 | V==30){ //Position of printed value |
Stefan_Sofijanic | 0:bcb81d0218cf | 57 | xnum=x2,ynum=y2+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 58 | }else if (V==40 | V==50 | V==60){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 59 | xnum=x2-3,ynum=y2+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 60 | }else if (V==70 | V==80){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 61 | xnum=x2-14,ynum=y2+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 62 | }else if (V==90){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 63 | xnum=x2-20,ynum=y2+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 64 | }else if (V==100 | V==110 | V==120) { |
Stefan_Sofijanic | 0:bcb81d0218cf | 65 | xnum=x2-35,ynum=y2+4; |
Stefan_Sofijanic | 0:bcb81d0218cf | 66 | }else if (V==130 | V==140 | V==150){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 67 | xnum=x2-35,ynum=y2+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 68 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 69 | lcd.DisplayStringAt(xnum,ynum,(uint8_t*)Vchar,LEFT_MODE); |
Stefan_Sofijanic | 0:bcb81d0218cf | 70 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 71 | x1=x3,y1=y3,x2=x4,y2=y4; //Increment position |
Stefan_Sofijanic | 0:bcb81d0218cf | 72 | THETA1=THETA2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 73 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 74 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 75 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 76 | void PrintChar(CHAR Char,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 77 | uint16_t width=Char.width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 78 | uint16_t height=Char.height; |
Stefan_Sofijanic | 0:bcb81d0218cf | 79 | uint16_t horpos,vertpos; |
Stefan_Sofijanic | 0:bcb81d0218cf | 80 | uint16_t bitloc; |
Stefan_Sofijanic | 0:bcb81d0218cf | 81 | uint32_t DrawColor; |
Stefan_Sofijanic | 0:bcb81d0218cf | 82 | char pos[9]; |
Stefan_Sofijanic | 0:bcb81d0218cf | 83 | //uint8_t dbg[50]; |
Stefan_Sofijanic | 0:bcb81d0218cf | 84 | for(horpos=0;horpos<width;horpos++){ //Bitmaps are row after row |
Stefan_Sofijanic | 0:bcb81d0218cf | 85 | for(vertpos=0;vertpos<height/8;vertpos++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 86 | 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 |
Stefan_Sofijanic | 0:bcb81d0218cf | 87 | //pc.printf("%d. %s\n",horpos*height/8+vertpos,pos); |
Stefan_Sofijanic | 0:bcb81d0218cf | 88 | for(bitloc=0;bitloc<8;bitloc++) { |
Stefan_Sofijanic | 0:bcb81d0218cf | 89 | if (pos[bitloc]=='1') { |
Stefan_Sofijanic | 0:bcb81d0218cf | 90 | DrawColor=TextColor; |
Stefan_Sofijanic | 0:bcb81d0218cf | 91 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 92 | else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 93 | DrawColor=lcd.GetBackColor(); |
Stefan_Sofijanic | 0:bcb81d0218cf | 94 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 95 | lcd.DrawPixel(StartXPos+horpos,StartYPos+vertpos*8+bitloc,DrawColor); |
Stefan_Sofijanic | 0:bcb81d0218cf | 96 | //pc.printf("%d,%d\n",StartXPos+horpos,StartYPos+vertpos*8+bitloc); |
Stefan_Sofijanic | 0:bcb81d0218cf | 97 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 98 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 99 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 100 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 101 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 102 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 103 | void PrintString(char str[],int font,uint16_t StartXPos,uint16_t StartYPos,uint32_t TextColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 104 | //pc.printf("Function activated.\n"); |
Stefan_Sofijanic | 0:bcb81d0218cf | 105 | char *a=str; |
Stefan_Sofijanic | 0:bcb81d0218cf | 106 | int p=0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 107 | while(a[p]){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 108 | //pc.printf("Searching char: %c\n",a[p]); |
Stefan_Sofijanic | 0:bcb81d0218cf | 109 | for(int k=0;k<68;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 110 | //pc.printf("Character %c\n",(*font50[k]).name); |
Stefan_Sofijanic | 0:bcb81d0218cf | 111 | if((*font50[k]).name==a[p]){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 112 | // pc.printf("Found!\n"); |
Stefan_Sofijanic | 0:bcb81d0218cf | 113 | PrintChar(*font50[k],StartXPos,StartYPos,TextColor); |
Stefan_Sofijanic | 0:bcb81d0218cf | 114 | StartXPos+=(*font50[k]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 115 | k=100; |
Stefan_Sofijanic | 0:bcb81d0218cf | 116 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 117 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 118 | //pc.printf("End.\n"); |
Stefan_Sofijanic | 0:bcb81d0218cf | 119 | p++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 120 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 121 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 122 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 123 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 124 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 125 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 126 | void ChangeNumber(int num,int num0,int Font,uint16_t StartXPos,uint16_t StartYPos, int digits, int dec_point, int sign){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 127 | //Function only changes the decimals that change. If number changes from 146 to 147, it only changes 6 to 7. |
Stefan_Sofijanic | 0:bcb81d0218cf | 128 | int digit[digits],digit0[digits]; |
Stefan_Sofijanic | 0:bcb81d0218cf | 129 | int sum=0,sum0=0,k,aux=0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 130 | CHAR **font; |
Stefan_Sofijanic | 0:bcb81d0218cf | 131 | if(abs(num)<pow(float(10),digits)){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 132 | digit[0]=abs(num)/pow((float)10,(float)(digits-1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 133 | digit0[0]=abs(num0)/pow((float)10,(float)(digits-1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 134 | for(k=1;k<digits;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 135 | sum=(sum+digit[k-1])*10; |
Stefan_Sofijanic | 0:bcb81d0218cf | 136 | digit[k]=abs(num)/pow((float)10,(float)(digits-1-k))-sum; |
Stefan_Sofijanic | 0:bcb81d0218cf | 137 | sum0=(sum0+digit0[k-1])*10; |
Stefan_Sofijanic | 0:bcb81d0218cf | 138 | digit0[k]=abs(num0)/pow(10,(float)(digits-1-k))-sum0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 139 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 140 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 141 | if (Font==50){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 142 | font=font50; |
Stefan_Sofijanic | 0:bcb81d0218cf | 143 | }else if (Font==100){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 144 | font=font100; |
Stefan_Sofijanic | 0:bcb81d0218cf | 145 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 146 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 147 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 148 | uint8_t char_width=(*font[0]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 149 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 150 | if (sign==1){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 151 | if(num<0 & num0>=0){ //Print minus if number lower than 0 |
Stefan_Sofijanic | 0:bcb81d0218cf | 152 | PrintChar(*font[10],StartXPos,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 153 | }else if(num>=0 & num0<0){ //Print blank if number lower than 0 |
Stefan_Sofijanic | 0:bcb81d0218cf | 154 | lcd.SetTextColor(LCD_COLOR_WHITE); |
Stefan_Sofijanic | 0:bcb81d0218cf | 155 | lcd.FillRect(StartXPos,StartYPos,(*font[10]).width,(*font[10]).height); |
Stefan_Sofijanic | 0:bcb81d0218cf | 156 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 157 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 158 | aux+=(*font[10]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 159 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 160 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 161 | for(k=0;k<digits;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 162 | 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 |
Stefan_Sofijanic | 0:bcb81d0218cf | 163 | PrintChar(Chardot_50,StartXPos+dec_point*char_width,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 164 | aux+=Chardot_50.width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 165 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 166 | if(digit[k]!=digit0[k]){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 167 | PrintChar(*font[digit[k]],StartXPos+k*char_width+aux,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 168 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 169 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 170 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 171 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 172 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 173 | void SetNumber(int num,int Font,uint16_t StartXPos,uint16_t StartYPos, int digits, int dec_point, int sign){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 174 | int digit[3],sum=0,k,aux=0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 175 | CHAR **font; |
Stefan_Sofijanic | 0:bcb81d0218cf | 176 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 177 | if (Font==50){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 178 | font=font50; |
Stefan_Sofijanic | 0:bcb81d0218cf | 179 | }else if (Font==100){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 180 | font=font100; |
Stefan_Sofijanic | 0:bcb81d0218cf | 181 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 182 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 183 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 184 | uint8_t char_width=(*font[0]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 185 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 186 | if(num<pow(float(10),digits)){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 187 | digit[0]=abs(num)/pow((float)10,(float)(digits-1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 188 | for(k=1;k<digits;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 189 | sum=(sum+digit[k-1])*10; |
Stefan_Sofijanic | 0:bcb81d0218cf | 190 | digit[k]=abs(num)/pow((float)10,(float)(digits-1-k))-sum; |
Stefan_Sofijanic | 0:bcb81d0218cf | 191 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 192 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 193 | if(sign==1){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 194 | if(num<0){ //Print minus if number lower than 0 |
Stefan_Sofijanic | 0:bcb81d0218cf | 195 | PrintChar(*font[10],StartXPos,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 196 | }else if(num>=0){ //Print blank if number lower than 0 |
Stefan_Sofijanic | 0:bcb81d0218cf | 197 | lcd.SetTextColor(LCD_COLOR_WHITE); |
Stefan_Sofijanic | 0:bcb81d0218cf | 198 | lcd.FillRect(StartXPos,StartYPos,(*font[10]).width,(*font[10]).height); |
Stefan_Sofijanic | 0:bcb81d0218cf | 199 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 200 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 201 | aux+=(*font[10]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 202 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 203 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 204 | for(k=0;k<digits;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 205 | 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 |
Stefan_Sofijanic | 0:bcb81d0218cf | 206 | PrintChar(Chardot_50,StartXPos+dec_point*char_width,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 207 | aux+=Chardot_50.width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 208 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 209 | PrintChar(*font[digit[k]],StartXPos+k*char_width+aux,StartYPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 210 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 211 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 212 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 213 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 214 | void DrawRGBImage(IMAGE Image,uint16_t StartXPos,uint16_t StartYPos){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 215 | uint32_t p,q; |
Stefan_Sofijanic | 0:bcb81d0218cf | 216 | uint32_t BlockBuffer[128]; |
Stefan_Sofijanic | 0:bcb81d0218cf | 217 | uint16_t xpos=0,ypos=0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 218 | for(p=0;p<Image.width*Image.height/128;p++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 219 | sd.ReadBlocks(BlockBuffer,Image.START_ADDR+p*512,1,SD_DATATIMEOUT); |
Stefan_Sofijanic | 0:bcb81d0218cf | 220 | for(q=0;q<128;q++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 221 | if(ypos<Image.height){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 222 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
Stefan_Sofijanic | 0:bcb81d0218cf | 223 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 224 | else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 225 | xpos++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 226 | ypos=0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 227 | lcd.DrawPixel(StartXPos+xpos,StartYPos+ypos,BlockBuffer[q]); |
Stefan_Sofijanic | 0:bcb81d0218cf | 228 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 229 | ypos++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 230 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 231 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 232 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 233 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 234 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 235 | void UpdateSpeedMeter(int V, int dV){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 236 | //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. |
Stefan_Sofijanic | 0:bcb81d0218cf | 237 | //Kada bi se samo brisala stara i crtala nova vrednost na baru ukupno bi morali da obradimo 55+57=112 umesto samo 2 bara. |
Stefan_Sofijanic | 0:bcb81d0218cf | 238 | uint32_t OldColor,RewriteColor; |
Stefan_Sofijanic | 0:bcb81d0218cf | 239 | double THETA1,THETA2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 240 | uint16_t x1,y1,x2,y2,x3,y3,x4,y4; |
Stefan_Sofijanic | 0:bcb81d0218cf | 241 | uint16_t startx,starty,leftupx,rightupx,leftdownx,rightdownx,ypos; |
Stefan_Sofijanic | 0:bcb81d0218cf | 242 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 243 | //Obradjivanje polje po polje. Svako polje prestavlja odredjenu vrednost kmh. |
Stefan_Sofijanic | 0:bcb81d0218cf | 244 | for(int k=1;k<=abs(dV);k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 245 | //Uokviravanje polja koje se trenutno obradjuje. Granice su crne kako bi se jasno razgranicilo polje od ostatka bara. |
Stefan_Sofijanic | 0:bcb81d0218cf | 246 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 247 | THETA1=PHI+((double)V)*ALPHA/Vmax; |
Stefan_Sofijanic | 0:bcb81d0218cf | 248 | x1=(int)(400-530*cos(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 249 | y1=(int)(550-530*sin(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 250 | x2=(int)(400-500*cos(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 251 | y2=(int)(550-500*sin(THETA1)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 252 | THETA2=PHI+((double)(V+dV/abs(dV)))*ALPHA/Vmax; |
Stefan_Sofijanic | 0:bcb81d0218cf | 253 | x3=(int)(400-530*cos(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 254 | y3=(int)(550-530*sin(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 255 | x4=(int)(400-500*cos(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 256 | y4=(int)(550-500*sin(THETA2)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 257 | lcd.DrawLine(x1,y1,x2,y2); |
Stefan_Sofijanic | 0:bcb81d0218cf | 258 | lcd.DrawLine(x3,y3,x4,y4); |
Stefan_Sofijanic | 0:bcb81d0218cf | 259 | lcd.DrawLine(x1,y1,x3,y3); |
Stefan_Sofijanic | 0:bcb81d0218cf | 260 | lcd.DrawLine(x2,y2,x4,y4); |
Stefan_Sofijanic | 0:bcb81d0218cf | 261 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 262 | //Odredjivanje pocetnih koordinata i kojom bojom ce se polje bojiti. |
Stefan_Sofijanic | 0:bcb81d0218cf | 263 | if(dV>0){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 264 | startx=(x2+x3)/2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 265 | starty=(y2+y3)/2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 266 | if(V+1<=50){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 267 | RewriteColor=LCD_COLOR_GREEN; |
Stefan_Sofijanic | 0:bcb81d0218cf | 268 | }else if (V+1>50 & V+1<=100){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 269 | RewriteColor=LCD_COLOR_BLUE; |
Stefan_Sofijanic | 0:bcb81d0218cf | 270 | }else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 271 | RewriteColor=LCD_COLOR_RED; |
Stefan_Sofijanic | 0:bcb81d0218cf | 272 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 273 | OldColor=LCD_COLOR_WHITE; |
Stefan_Sofijanic | 0:bcb81d0218cf | 274 | }else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 275 | startx=(x1+x4)/2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 276 | starty=(y1+y4)/2; |
Stefan_Sofijanic | 0:bcb81d0218cf | 277 | if(V<=50){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 278 | OldColor=LCD_COLOR_GREEN; |
Stefan_Sofijanic | 0:bcb81d0218cf | 279 | }else if (V>50 & V<=100){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 280 | OldColor=LCD_COLOR_BLUE; |
Stefan_Sofijanic | 0:bcb81d0218cf | 281 | }else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 282 | OldColor=LCD_COLOR_RED; |
Stefan_Sofijanic | 0:bcb81d0218cf | 283 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 284 | RewriteColor=LCD_COLOR_WHITE; |
Stefan_Sofijanic | 0:bcb81d0218cf | 285 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 286 | lcd.SetTextColor(RewriteColor); |
Stefan_Sofijanic | 0:bcb81d0218cf | 287 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 288 | //Odredjivanje pocetnog piksela odakle ce bojenje poceti. Kako bi se svaki piksel obojio pocetni se postavlja u centru polja i krece se najpre |
Stefan_Sofijanic | 0:bcb81d0218cf | 289 | //na gore pa zatim od sredine na dole. |
Stefan_Sofijanic | 0:bcb81d0218cf | 290 | leftupx=startx; |
Stefan_Sofijanic | 0:bcb81d0218cf | 291 | rightupx=startx+1; |
Stefan_Sofijanic | 0:bcb81d0218cf | 292 | ypos=starty; |
Stefan_Sofijanic | 0:bcb81d0218cf | 293 | while(leftupx<rightupx){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 294 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 295 | ypos--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 296 | if(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 297 | while(lcd.ReadPixel(leftupx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 298 | leftupx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 299 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 300 | } else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 301 | while(lcd.ReadPixel(leftupx,ypos)==OldColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 302 | leftupx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 303 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 304 | leftupx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 305 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 306 | if(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 307 | while(lcd.ReadPixel(rightupx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 308 | rightupx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 309 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 310 | } else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 311 | while(lcd.ReadPixel(rightupx,ypos)==OldColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 312 | rightupx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 313 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 314 | rightupx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 315 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 316 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 317 | if (leftupx<=rightupx){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 318 | lcd.DrawLine(leftupx,ypos,rightupx,ypos); |
Stefan_Sofijanic | 0:bcb81d0218cf | 319 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 320 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 321 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 322 | leftdownx=startx; |
Stefan_Sofijanic | 0:bcb81d0218cf | 323 | rightdownx=startx+1; |
Stefan_Sofijanic | 0:bcb81d0218cf | 324 | ypos=starty-1; |
Stefan_Sofijanic | 0:bcb81d0218cf | 325 | while(leftdownx<rightdownx){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 326 | ypos++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 327 | if(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 328 | while(lcd.ReadPixel(leftdownx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 329 | leftdownx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 330 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 331 | } else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 332 | while(lcd.ReadPixel(leftdownx,ypos)==OldColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 333 | leftdownx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 334 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 335 | leftdownx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 336 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 337 | if(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 338 | while(lcd.ReadPixel(rightdownx,ypos)==LCD_COLOR_BLACK){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 339 | rightdownx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 340 | } |
Stefan_Sofijanic | 0:bcb81d0218cf | 341 | } else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 342 | while(lcd.ReadPixel(rightdownx,ypos)==OldColor){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 343 | rightdownx++; |
Stefan_Sofijanic | 0:bcb81d0218cf | 344 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 345 | rightdownx--; |
Stefan_Sofijanic | 0:bcb81d0218cf | 346 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 347 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 348 | if (leftdownx<=rightdownx){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 349 | lcd.DrawLine(leftdownx,ypos,rightdownx,ypos); |
Stefan_Sofijanic | 0:bcb81d0218cf | 350 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 351 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 352 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 353 | //Brisanje granicnika. Vodi se racuna ako je granica neki od dekadnih podeoka koji treba da ostane crn. |
Stefan_Sofijanic | 0:bcb81d0218cf | 354 | if(V%10!=0){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 355 | lcd.DrawLine(x1,y1,x2,y2); |
Stefan_Sofijanic | 0:bcb81d0218cf | 356 | if (dV<0){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 357 | lcd.DrawPixel(x1,y1,LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 358 | lcd.DrawPixel(x2,y2,LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 359 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 360 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 361 | V+=dV/abs(dV); |
Stefan_Sofijanic | 0:bcb81d0218cf | 362 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 363 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 364 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 365 | void ChangeCrank(int Crank){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 366 | PrintString(" ",50,350,400,LCD_COLOR_GREEN); |
Stefan_Sofijanic | 0:bcb81d0218cf | 367 | if (Crank){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 368 | PrintString("ERROR",50,CrankXPos,CrankYPos,LCD_COLOR_RED); |
Stefan_Sofijanic | 0:bcb81d0218cf | 369 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 370 | } else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 371 | PrintString("OK",50,CrankXPos,CrankYPos,LCD_COLOR_GREEN); |
Stefan_Sofijanic | 0:bcb81d0218cf | 372 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 373 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 374 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 375 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 376 | int UpdateLVDTScale(int H,int H0, uint16_t StartXPos, uint16_t StartYPos){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 377 | uint16_t BarWidth=80,BarHeight=8; |
Stefan_Sofijanic | 0:bcb81d0218cf | 378 | int YPos; |
Stefan_Sofijanic | 0:bcb81d0218cf | 379 | int D,D0,dD; |
Stefan_Sofijanic | 0:bcb81d0218cf | 380 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 381 | switch( ((H>=0)<<1)+(H0>0)){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 382 | case(0): |
Stefan_Sofijanic | 0:bcb81d0218cf | 383 | D=5-abs(H)/20; |
Stefan_Sofijanic | 0:bcb81d0218cf | 384 | D0=5-abs(H0)/20; |
Stefan_Sofijanic | 0:bcb81d0218cf | 385 | break; |
Stefan_Sofijanic | 0:bcb81d0218cf | 386 | case(1): |
Stefan_Sofijanic | 0:bcb81d0218cf | 387 | D=5-abs(H)/20; |
Stefan_Sofijanic | 0:bcb81d0218cf | 388 | D0=H0/20+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 389 | break; |
Stefan_Sofijanic | 0:bcb81d0218cf | 390 | case(2): |
Stefan_Sofijanic | 0:bcb81d0218cf | 391 | D=H/20+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 392 | D0=5-abs(H0)/20; |
Stefan_Sofijanic | 0:bcb81d0218cf | 393 | break; |
Stefan_Sofijanic | 0:bcb81d0218cf | 394 | case(3): |
Stefan_Sofijanic | 0:bcb81d0218cf | 395 | D=H/20+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 396 | D0=H0/20+5; |
Stefan_Sofijanic | 0:bcb81d0218cf | 397 | break; |
Stefan_Sofijanic | 0:bcb81d0218cf | 398 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 399 | dD=D-D0; |
Stefan_Sofijanic | 0:bcb81d0218cf | 400 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 401 | if (dD>0){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 402 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 403 | YPos=StartYPos-10*(D0+1); |
Stefan_Sofijanic | 0:bcb81d0218cf | 404 | }else{ |
Stefan_Sofijanic | 0:bcb81d0218cf | 405 | lcd.SetTextColor(LCD_COLOR_WHITE); |
Stefan_Sofijanic | 0:bcb81d0218cf | 406 | YPos=StartYPos-D0*10; |
Stefan_Sofijanic | 0:bcb81d0218cf | 407 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 408 | for (int k=1;k<=abs(dD);k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 409 | lcd.FillRect(StartXPos,YPos,BarWidth,BarHeight); |
Stefan_Sofijanic | 0:bcb81d0218cf | 410 | YPos-=10*(dD/abs(dD)); |
Stefan_Sofijanic | 0:bcb81d0218cf | 411 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 412 | lcd.SetTextColor(LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 413 | return 1; |
Stefan_Sofijanic | 0:bcb81d0218cf | 414 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 415 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 416 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 417 | void BrakeSignal(uint16_t brake){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 418 | if (brake!=0){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 419 | lcd.SetTextColor(LCD_COLOR_RED); |
Stefan_Sofijanic | 0:bcb81d0218cf | 420 | lcd.SetBackColor(LCD_COLOR_RED); |
Stefan_Sofijanic | 0:bcb81d0218cf | 421 | lcd.FillRect(560,340,230,68); |
Stefan_Sofijanic | 0:bcb81d0218cf | 422 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 423 | }else { |
Stefan_Sofijanic | 0:bcb81d0218cf | 424 | lcd.SetTextColor(LCD_COLOR_DARKRED); |
Stefan_Sofijanic | 0:bcb81d0218cf | 425 | lcd.SetBackColor(LCD_COLOR_DARKRED); |
Stefan_Sofijanic | 0:bcb81d0218cf | 426 | lcd.FillRect(560,340,230,68); |
Stefan_Sofijanic | 0:bcb81d0218cf | 427 | PrintString("BRAKE",50,575,350,LCD_COLOR_BLACK); |
Stefan_Sofijanic | 0:bcb81d0218cf | 428 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 429 | lcd.SetBackColor(LCD_COLOR_WHITE); |
Stefan_Sofijanic | 0:bcb81d0218cf | 430 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 431 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 432 | |
Stefan_Sofijanic | 0:bcb81d0218cf | 433 | void TestFont(){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 434 | uint16_t XPos=0,YPos=120; |
Stefan_Sofijanic | 0:bcb81d0218cf | 435 | for(int k=0;k<68;k++){ |
Stefan_Sofijanic | 0:bcb81d0218cf | 436 | PrintChar(*font50[k],XPos,YPos,lcd.GetTextColor()); |
Stefan_Sofijanic | 0:bcb81d0218cf | 437 | XPos=XPos+(*font50[k]).width; |
Stefan_Sofijanic | 0:bcb81d0218cf | 438 | wait(0.1); |
Stefan_Sofijanic | 0:bcb81d0218cf | 439 | //pc.printf("%d",k); |
Stefan_Sofijanic | 0:bcb81d0218cf | 440 | }; |
Stefan_Sofijanic | 0:bcb81d0218cf | 441 | }; |