My first trial of using UniGraphic library.
Dependencies: MMA8451Q SPI_STMPE610 UniGraphic mbed
main.cpp
00001 #include "mbed.h" 00002 #include "MMA8451Q.h" 00003 #include <ILI9341.h> 00004 #include "Arial12x12.h" 00005 #include "Arial24x23.h" 00006 #include "Arial28x28.h" 00007 #include "Arial43x48_numb.h" 00008 #include "SPI_STMPE610.h" 00009 #include "main.h" 00010 00011 DigitalOut myled(LED1); 00012 ILI9341 TFT(SPI_8, 10000000, 00013 PIN_MOSI, PIN_MISO, PIN_SCLK, 00014 PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ; 00015 00016 SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ; 00017 00018 DigitalOut backlight(PIN_BL_TFT) ; 00019 00020 #define MMA8451_I2C_ADDRESS (0x1d<<1) 00021 MMA8451Q *acc = 0 ; 00022 00023 int page = 0 ; 00024 int numPage = 3 ; 00025 00026 void initTFT(void) 00027 { 00028 //Configure the display driver 00029 TFT.FastWindow(true) ; 00030 TFT.background(Black); 00031 TFT.foreground(White); 00032 wait(0.01) ; 00033 TFT.cls(); 00034 } 00035 00036 void screen1(void) // Welcome Screen 00037 { 00038 backlight = 0 ; 00039 TFT.BusEnable(true) ; 00040 TFT.background(White) ; 00041 TFT.cls() ; 00042 00043 wait(0.1) ; 00044 TFT.set_font((unsigned char*) Arial24x23); 00045 TFT.foreground(Red) ; 00046 TFT.locate(80, 30) ; 00047 TFT.printf("MBED") ; 00048 TFT.foreground(Blue); 00049 TFT.locate(60, 60) ; 00050 TFT.printf("2.8\"TFT") ; 00051 TFT.locate(40, 90) ; 00052 TFT.printf("with touch") ; 00053 TFT.foreground(Green) ; 00054 TFT.locate(10, 130) ; 00055 TFT.printf("UniGraphic Ver.") ; 00056 TFT.foreground(Black); 00057 TFT.set_font((unsigned char*) Arial12x12); 00058 TFT.foreground(Blue) ; 00059 TFT.locate(20, 180) ; 00060 TFT.printf("This program is running on") ; 00061 TFT.locate(20, 200) ; 00062 TFT.printf("freescale FRDM-KL25Z with") ; 00063 TFT.locate(20, 220) ; 00064 TFT.printf("a program developed on mbed") ; 00065 TFT.foreground(Green) ; 00066 TFT.locate(20, 260) ; 00067 TFT.printf("To advance demo page, touch") ; 00068 TFT.locate(20, 280) ; 00069 TFT.printf("and hold right side of screen") ; 00070 TFT.locate(20, 300) ; 00071 TFT.printf("until the next screen starts") ; 00072 TFT.BusEnable(false) ; 00073 backlight = 1 ; 00074 } 00075 00076 void screen2(void) // Graphics 00077 { 00078 //Draw some graphics 00079 int i, x[2], y[2] ; 00080 backlight = 0 ; 00081 TFT.BusEnable(true) ; 00082 00083 TFT.background(Black); 00084 TFT.foreground(White); 00085 TFT.cls() ; 00086 TFT.set_font((unsigned char*) Arial12x12); 00087 TFT.locate(90,0); 00088 TFT.printf("Graphics"); 00089 00090 x[0] = 25 ; x[1] = 224 ; 00091 y[0] = 20 ; y[1] = 219 ; 00092 for (i = 20 ; i < 220 ; i += 10) { 00093 TFT.line(i+5, y[0], i+5, y[1], Blue) ; 00094 TFT.line(x[0], i, x[1], i, Blue) ; 00095 } 00096 TFT.line(125, y[0], 125, y[1], Green) ; 00097 TFT.line(x[0], 120, x[1], 120, Green) ; 00098 TFT.rect(x[0],y[0], x[1], y[1], Green) ; 00099 TFT.locate(10, 20) ; 00100 TFT.printf("V") ; 00101 TFT.locate(0, 115) ; 00102 TFT.printf("0.0") ; 00103 TFT.locate(115, 225) ; 00104 TFT.printf("0.0") ; 00105 TFT.locate(215, 225) ; 00106 TFT.printf("T") ; 00107 00108 double s; 00109 for (int i = x[0]; i < 225; i++) { 00110 s = 40 * sin((long double)i / 20); 00111 TFT.pixel(i, 120 + (int)s, White); 00112 } 00113 00114 TFT.fillrect(10, 240, 229, 309, White) ; 00115 TFT.rect(10, 240, 229, 309, Red) ; 00116 TFT.rect(11, 241, 228, 308, Red) ; 00117 00118 TFT.background(White) ; 00119 TFT.foreground(Black) ; 00120 TFT.locate(20, 250) ; 00121 TFT.printf("With QVGA resolution") ; 00122 TFT.locate(20, 270) ; 00123 TFT.printf("simple graphics drawing") ; 00124 TFT.locate(20, 290) ; 00125 TFT.printf("capability is provided") ; 00126 00127 TFT.BusEnable(false) ; 00128 backlight = 1 ; 00129 } 00130 00131 double clip(double src) 00132 { 00133 double value ; 00134 value = src ; 00135 if (value < 0.0) { 00136 value = 0.0 ; 00137 } else if (value > 2.0) { 00138 value = 2.0 ; 00139 } 00140 return( value ) ; 00141 } 00142 00143 void screen3(void) 00144 { 00145 int t = 0 ; 00146 int pt = 0 ; // previous t 00147 int i, x, y ; 00148 unsigned int data[3] ; // for x, y, z 00149 unsigned int prev[3] ; 00150 unsigned short signalHeight = 39 ; 00151 unsigned short xoffset = 30 ; 00152 unsigned short yoffset = 120 ; 00153 unsigned short zoffset = 210 ; 00154 unsigned short paneX[2] = {20, 235} ; 00155 unsigned short paneH = 81 ; 00156 00157 backlight = 0 ; 00158 TFT.BusEnable(true) ; 00159 TFT.background(Black) ; 00160 TFT.foreground(White) ; 00161 // TFT.cls() ; 00162 00163 00164 TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ; 00165 TFT.fillrect(paneX[0], yoffset, paneX[1], yoffset+paneH, Black) ; 00166 TFT.fillrect(paneX[0], zoffset, paneX[1], zoffset+paneH, Black) ; 00167 TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ; 00168 for (i = 0 ; i < 10 ; i++ ) { 00169 y = i * 8 ; 00170 TFT.line(paneX[0], xoffset + y, paneX[1], xoffset + y, Blue) ; 00171 TFT.line(paneX[0], yoffset + y, paneX[1], yoffset + y, Blue) ; 00172 TFT.line(paneX[0], zoffset + y, paneX[1], zoffset + y, Blue) ; 00173 } 00174 for (x = 30 ; x < paneX[1] ; x += 10 ) { 00175 TFT.line(x, xoffset, x, xoffset+paneH, Blue) ; 00176 TFT.line(x, yoffset, x, yoffset+paneH, Blue) ; 00177 TFT.line(x, zoffset, x, zoffset+paneH, Blue) ; 00178 } 00179 TFT.rect(paneX[0], xoffset, paneX[1], xoffset+paneH, White) ; 00180 TFT.rect(paneX[0], yoffset, paneX[1], yoffset+paneH, White) ; 00181 TFT.rect(paneX[0], zoffset, paneX[1], zoffset+paneH, White) ; 00182 TFT.set_font((unsigned char*) Arial12x12); 00183 TFT.locate(5, xoffset+30) ; 00184 TFT.printf("X") ; 00185 TFT.locate(5, yoffset+30) ; 00186 TFT.printf("Y") ; 00187 TFT.locate(5, zoffset+30) ; 00188 TFT.printf("Z") ; 00189 TFT.locate(50, 10) ; 00190 TFT.printf("Xtrinsic Accelerometer") ; 00191 TFT.locate(90, 300) ; 00192 TFT.printf("MMA8451Q") ; 00193 00194 prev[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ; 00195 prev[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ; 00196 prev[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ; 00197 pt = paneX[0] ; 00198 backlight = 1 ; 00199 for(t = 21 ; t < paneX[1] ; t++) { 00200 data[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ; 00201 data[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ; 00202 data[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ; 00203 TFT.line(pt, prev[0], t, data[0], Red) ; 00204 TFT.line(pt, prev[1], t, data[1], Green) ; 00205 TFT.line(pt, prev[2], t, data[2], Yellow) ; 00206 prev[0] = data[0] ; 00207 prev[1] = data[1] ; 00208 prev[2] = data[2] ; 00209 pt = t ; 00210 wait(0.01) ; 00211 } 00212 TFT.BusEnable(false) ; 00213 } 00214 00215 void incPage(void) 00216 { 00217 page++ ; 00218 if (page >= numPage) { 00219 page = 0 ; 00220 } 00221 } 00222 00223 void decPage(void) 00224 { 00225 page-- ; 00226 if (page < 0) { 00227 page = numPage - 1 ; 00228 } 00229 } 00230 00231 int main() { 00232 uint16_t x, y, z ; 00233 int prevPage = 0 ; 00234 00235 acc = new MMA8451Q(PTE25, PTE24, MMA8451_I2C_ADDRESS) ; 00236 00237 initTFT() ; 00238 00239 screen1() ; 00240 00241 printf("Program Started!\n\r") ; 00242 00243 for(;;) { 00244 // printf("TFT width = %d, height = %d\n\r", TFT.width(), TFT.height()) ; 00245 switch(page) { 00246 case 0: 00247 if (prevPage != page) { 00248 screen1() ; 00249 } 00250 break ; 00251 case 1: 00252 if (prevPage != page) { 00253 screen2() ; 00254 } 00255 break ; 00256 case 2: 00257 if (prevPage != page) { 00258 TFT.BusEnable(true) ; 00259 TFT.background(Black) ; 00260 TFT.foreground(White) ; 00261 TFT.cls() ; 00262 TFT.BusEnable(false) ; 00263 } 00264 screen3() ; 00265 wait(2) ; 00266 break ; 00267 default: 00268 page = 0 ; 00269 break ; 00270 } 00271 prevPage = page ; 00272 00273 TSC.getRAWPoint(&x, &y, &z) ; 00274 if ((x != 0)||(y != 0) || (z != 0)) { 00275 if (x < 1000) { // left 00276 decPage() ; 00277 } else if (x > 3000) { // right 00278 incPage() ; 00279 } 00280 } 00281 // wait(1) ; 00282 } 00283 }
Generated on Thu Jul 14 2022 03:09:23 by 1.7.2