Mission Accomplished

Dependencies:   DmTouch_UniGraphic UniGraphic mbed

Fork of DisplayModule24_demo by John Larkin

Committer:
pstephens18
Date:
Fri Jan 22 21:24:36 2016 +0000
Revision:
13:2c26e73432fb
Parent:
10:ca16a309a737
Final
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Geremia 0:2ccd65a72ab8 1 #include "stdio.h"
Geremia 0:2ccd65a72ab8 2 #include "mbed.h"
Geremia 0:2ccd65a72ab8 3 #include "string"
JLarkin 7:1dbfaba27e99 4 #include "ILI932x.h"
JLarkin 9:8917e707fe8e 5 #include "DmTouch.h"
JLarkin 9:8917e707fe8e 6
JLarkin 6:6b6e93790b4c 7
Geremia 0:2ccd65a72ab8 8 #include "Arial12x12.h"
Geremia 0:2ccd65a72ab8 9 #include "Arial24x23.h"
Geremia 4:818956c30cae 10 #include "pavement_48x34.h"
Geremia 0:2ccd65a72ab8 11
Geremia 0:2ccd65a72ab8 12 Serial pc(USBTX, USBRX);
pstephens18 13:2c26e73432fb 13 DigitalOut led1(LED1);
pstephens18 13:2c26e73432fb 14 DigitalOut led2(LED2);
pstephens18 13:2c26e73432fb 15 DigitalOut led3(LED3);
pstephens18 13:2c26e73432fb 16 DigitalOut led4(LED4);
Geremia 0:2ccd65a72ab8 17
JLarkin 7:1dbfaba27e99 18 /* Configure the DisplayModule ILI9325 2.4" display for 8-bit bus communication
JLarkin 6:6b6e93790b4c 19
JLarkin 6:6b6e93790b4c 20 mbed pin display pin
JLarkin 6:6b6e93790b4c 21 -------- -----------
JLarkin 7:1dbfaba27e99 22 p15 CS (L15)
JLarkin 7:1dbfaba27e99 23 p17 RST (L17)
JLarkin 7:1dbfaba27e99 24 p16 RS (L4)
JLarkin 7:1dbfaba27e99 25 p14 WR (L5)
JLarkin 7:1dbfaba27e99 26 p20 RD (L6)
JLarkin 6:6b6e93790b4c 27
JLarkin 7:1dbfaba27e99 28 p30 DB8 (L7)
JLarkin 7:1dbfaba27e99 29 p29 DB9 (L8)
JLarkin 7:1dbfaba27e99 30 p28 DB10 (L9)
JLarkin 7:1dbfaba27e99 31 p27 DB11 (L10)
JLarkin 7:1dbfaba27e99 32 p26 DB12 (L11)
JLarkin 7:1dbfaba27e99 33 p25 DB13 (L12)
JLarkin 7:1dbfaba27e99 34 p24 DB14 (L13)
JLarkin 7:1dbfaba27e99 35 p23 DB15 (L14)
JLarkin 6:6b6e93790b4c 36
JLarkin 7:1dbfaba27e99 37 p1 GND (L1)
JLarkin 7:1dbfaba27e99 38 p40 Vin (L2)
JLarkin 9:8917e707fe8e 39 p40 LED Backlight (L19)
JLarkin 6:6b6e93790b4c 40 */
JLarkin 7:1dbfaba27e99 41 PinName dataBus[]= {p30, p29, p28, p27, p26, p25, p24, p23};
JLarkin 7:1dbfaba27e99 42 ILI932x myLCD(BUS_8, dataBus, p15, p17, p16, p14, p20, "myLCD", 240, 320); // Bus 8 bit, bus pin array, CS, RST, DC, WR, RD, name, xpixels, ypixels
Geremia 0:2ccd65a72ab8 43
JLarkin 9:8917e707fe8e 44 /* Additional connections to add touch response
JLarkin 9:8917e707fe8e 45
JLarkin 9:8917e707fe8e 46 mbed pin display pin
JLarkin 9:8917e707fe8e 47 -------- -----------
JLarkin 9:8917e707fe8e 48 p5 T_MOSI (R11)
JLarkin 9:8917e707fe8e 49 p6 T_MISO (R13)
JLarkin 9:8917e707fe8e 50 p7 T_CLK (R9)
JLarkin 9:8917e707fe8e 51 p8 T_CS (R10)
JLarkin 9:8917e707fe8e 52 p9 T_IRQ (R14)
JLarkin 9:8917e707fe8e 53 */
JLarkin 9:8917e707fe8e 54 DmTouch touch(DmTouch::DM_TFT24_104, p5, p6, p7, p8, p9);
JLarkin 9:8917e707fe8e 55
JLarkin 10:ca16a309a737 56 char orient=3;
JLarkin 7:1dbfaba27e99 57 int x,y;
JLarkin 9:8917e707fe8e 58 uint16_t tx, ty;
JLarkin 9:8917e707fe8e 59 Timer t;
JLarkin 7:1dbfaba27e99 60
Geremia 0:2ccd65a72ab8 61 int main()
Geremia 0:2ccd65a72ab8 62 {
JLarkin 9:8917e707fe8e 63 bool down, lastDown;
JLarkin 9:8917e707fe8e 64 touch.init();
JLarkin 9:8917e707fe8e 65 t.start();
pstephens18 13:2c26e73432fb 66
Geremia 4:818956c30cae 67 myLCD.set_orientation(orient);
JLarkin 6:6b6e93790b4c 68 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 9:8917e707fe8e 69 myLCD.background(Blue); // set background to Blue
JLarkin 9:8917e707fe8e 70 myLCD.foreground(White); // set chars to White
Geremia 4:818956c30cae 71 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 72 myLCD.locate(10,30);
JLarkin 6:6b6e93790b4c 73 myLCD.printf("UniGraphics Demo\r\n");
Geremia 1:083257298075 74 wait(2);
Geremia 0:2ccd65a72ab8 75
JLarkin 6:6b6e93790b4c 76 while(1)
JLarkin 6:6b6e93790b4c 77 {
pstephens18 13:2c26e73432fb 78 /*
JLarkin 6:6b6e93790b4c 79 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 80 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 81 myLCD.locate(0,30);
JLarkin 6:6b6e93790b4c 82 myLCD.printf("Orientation mode: %x\r\n", orient%4);
JLarkin 6:6b6e93790b4c 83 wait(2);
JLarkin 6:6b6e93790b4c 84 myLCD.printf("Font is\r\n");
JLarkin 6:6b6e93790b4c 85 myLCD.printf("Arial24x23\r\n");
JLarkin 6:6b6e93790b4c 86 wait(2);
JLarkin 6:6b6e93790b4c 87
JLarkin 6:6b6e93790b4c 88 myLCD.background(Black);
JLarkin 6:6b6e93790b4c 89 myLCD.foreground(White);
JLarkin 6:6b6e93790b4c 90 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 91 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 92 myLCD.locate(0,10);
JLarkin 6:6b6e93790b4c 93 myLCD.printf("Font changed to Arial12x12\r\n");
JLarkin 6:6b6e93790b4c 94 myLCD.printf("Background and foreground color also changed.\n\r\n\r");
JLarkin 6:6b6e93790b4c 95 wait(2);
JLarkin 6:6b6e93790b4c 96 myLCD.printf("Notice that if some text is too long to fit the width of the screen that it is automatically wrapped to the next line.\r\n\r\n");
JLarkin 6:6b6e93790b4c 97 wait(2);
JLarkin 6:6b6e93790b4c 98 myLCD.set_font((unsigned char*) Terminal6x8);
JLarkin 6:6b6e93790b4c 99 myLCD.printf("Font changed to Terminal6x8\r\n");
JLarkin 6:6b6e93790b4c 100 myLCD.printf("This is pretty small!\r\n");
JLarkin 6:6b6e93790b4c 101 wait(2);
JLarkin 6:6b6e93790b4c 102
JLarkin 6:6b6e93790b4c 103 myLCD.cls();
JLarkin 6:6b6e93790b4c 104 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 105 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 106 myLCD.printf("Draw lines\n\r");
JLarkin 6:6b6e93790b4c 107 myLCD.line(0,50,myLCD.width()-1,50,Yellow);
JLarkin 6:6b6e93790b4c 108 myLCD.line(myLCD.width()-50,51,myLCD.width()-50,myLCD.height()-1,Green);
JLarkin 6:6b6e93790b4c 109 wait(2);
JLarkin 6:6b6e93790b4c 110
JLarkin 6:6b6e93790b4c 111 myLCD.cls();
JLarkin 6:6b6e93790b4c 112 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 113 myLCD.printf("Draw rectangles");
JLarkin 6:6b6e93790b4c 114 myLCD.rect(10,50,50,80,Red);
JLarkin 6:6b6e93790b4c 115 myLCD.rect(15,55,45,75,Red);
JLarkin 6:6b6e93790b4c 116 myLCD.rect(20,60,40,70,Red);
JLarkin 6:6b6e93790b4c 117 myLCD.fillrect(160,130,200,240,Blue);
JLarkin 6:6b6e93790b4c 118 wait(2);
JLarkin 6:6b6e93790b4c 119
JLarkin 6:6b6e93790b4c 120 myLCD.cls();
JLarkin 6:6b6e93790b4c 121 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 122 myLCD.printf("Draw circles");
JLarkin 6:6b6e93790b4c 123 myLCD.circle(150,132,30,Yellow);
JLarkin 6:6b6e93790b4c 124 myLCD.fillcircle(140,70,25,Cyan);
JLarkin 6:6b6e93790b4c 125 wait(2);
JLarkin 6:6b6e93790b4c 126
JLarkin 6:6b6e93790b4c 127 myLCD.cls();
JLarkin 6:6b6e93790b4c 128 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 129 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 130 myLCD.printf("Draw function with pixels");
JLarkin 6:6b6e93790b4c 131 double s;
JLarkin 6:6b6e93790b4c 132 for (unsigned short i=0; i<myLCD.width(); i++)
Geremia 0:2ccd65a72ab8 133 {
Geremia 0:2ccd65a72ab8 134 s =10 * sin((long double) i / 10 );
JLarkin 6:6b6e93790b4c 135 myLCD.pixel(i,80 + (int)s ,White);
Geremia 0:2ccd65a72ab8 136 }
JLarkin 6:6b6e93790b4c 137 wait(3);
pstephens18 13:2c26e73432fb 138 */
JLarkin 6:6b6e93790b4c 139
pstephens18 13:2c26e73432fb 140 /*
JLarkin 9:8917e707fe8e 141 // Touch screen demo
JLarkin 9:8917e707fe8e 142 myLCD.background(Blue); // set background to Blue
JLarkin 9:8917e707fe8e 143 myLCD.foreground(White); // set chars to White
JLarkin 9:8917e707fe8e 144 myLCD.cls(); // clear the screen
JLarkin 9:8917e707fe8e 145 myLCD.locate(10,30);
JLarkin 9:8917e707fe8e 146 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 9:8917e707fe8e 147 myLCD.printf("DmTouch Demo\r\n");
JLarkin 9:8917e707fe8e 148 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 9:8917e707fe8e 149 myLCD.locate(10,70);
JLarkin 9:8917e707fe8e 150 myLCD.printf("Coming soon...\r\nTouch screen and coordinates will display\r\n");
JLarkin 9:8917e707fe8e 151 myLCD.printf("Moves to next portion of demo after 30 seconds\r\n");
JLarkin 9:8917e707fe8e 152 wait(2);
pstephens18 13:2c26e73432fb 153 */
JLarkin 9:8917e707fe8e 154 myLCD.background(Black); // set background to Black
JLarkin 9:8917e707fe8e 155 myLCD.foreground(White); // set chars to White
pstephens18 13:2c26e73432fb 156 myLCD.cls();
pstephens18 13:2c26e73432fb 157 // clear the screen
pstephens18 13:2c26e73432fb 158 myLCD.fillcircle(100,70,35,Cyan);
pstephens18 13:2c26e73432fb 159 myLCD.locate(90,60);
pstephens18 13:2c26e73432fb 160 myLCD.printf("1");
pstephens18 13:2c26e73432fb 161 myLCD.fillcircle(210,70,35,Red);
pstephens18 13:2c26e73432fb 162 myLCD.locate(200,60);
pstephens18 13:2c26e73432fb 163 myLCD.printf("2");
pstephens18 13:2c26e73432fb 164 myLCD.fillcircle(100,170,35,Green);
pstephens18 13:2c26e73432fb 165 myLCD.locate(90,160);
pstephens18 13:2c26e73432fb 166 myLCD.printf("3");
pstephens18 13:2c26e73432fb 167 myLCD.fillcircle(210,170,35,Yellow);
pstephens18 13:2c26e73432fb 168 myLCD.locate(200,160);
pstephens18 13:2c26e73432fb 169 myLCD.printf("4");
JLarkin 9:8917e707fe8e 170
JLarkin 9:8917e707fe8e 171 touch.setOrientation(orient);
JLarkin 9:8917e707fe8e 172 down = false;
JLarkin 9:8917e707fe8e 173 lastDown = false;
JLarkin 9:8917e707fe8e 174 tx = (uint16_t)0;
JLarkin 9:8917e707fe8e 175 ty = (uint16_t)0;
pstephens18 13:2c26e73432fb 176 myLCD.locate(20,10);
JLarkin 9:8917e707fe8e 177 myLCD.printf("x:");
pstephens18 13:2c26e73432fb 178 myLCD.locate(180, 10);
JLarkin 9:8917e707fe8e 179 myLCD.printf("y:");
JLarkin 9:8917e707fe8e 180
JLarkin 9:8917e707fe8e 181 t.reset();
pstephens18 13:2c26e73432fb 182 while (t.read()<30)
pstephens18 13:2c26e73432fb 183 {
pstephens18 13:2c26e73432fb 184 touch.readTouchData(tx, ty, down);
pstephens18 13:2c26e73432fb 185 if (down) {
pstephens18 13:2c26e73432fb 186 myLCD.locate(40, 20);
pstephens18 13:2c26e73432fb 187 myLCD.printf("%5i", tx);
pstephens18 13:2c26e73432fb 188 myLCD.locate(120, 20);
pstephens18 13:2c26e73432fb 189 myLCD.printf("%5i", ty);
pstephens18 13:2c26e73432fb 190 //myLCD.fillcircle(tx, ty, 2, Red);
pstephens18 13:2c26e73432fb 191 } else if (lastDown) {
pstephens18 13:2c26e73432fb 192 // no longer pressed, clean text
pstephens18 13:2c26e73432fb 193 myLCD.locate(40, 20);
pstephens18 13:2c26e73432fb 194 myLCD.printf(" ", tx);
pstephens18 13:2c26e73432fb 195 myLCD.locate(120, 20);
pstephens18 13:2c26e73432fb 196 myLCD.printf(" ", ty);
pstephens18 13:2c26e73432fb 197 }
pstephens18 13:2c26e73432fb 198 led1=0;
pstephens18 13:2c26e73432fb 199 led2=0;
pstephens18 13:2c26e73432fb 200 led3=0;
pstephens18 13:2c26e73432fb 201 led4=0;
pstephens18 13:2c26e73432fb 202
pstephens18 13:2c26e73432fb 203 //////////////////////////////////////////////////////////////////////////////////////
pstephens18 13:2c26e73432fb 204
pstephens18 13:2c26e73432fb 205 while(1)
pstephens18 13:2c26e73432fb 206 {
pstephens18 13:2c26e73432fb 207 touch.readTouchData(tx, ty, down);
pstephens18 13:2c26e73432fb 208 while(down)
pstephens18 13:2c26e73432fb 209 {
pstephens18 13:2c26e73432fb 210 if(((tx-100)*(tx-100)+(ty-70)*(ty-70))<= (35*35))
pstephens18 13:2c26e73432fb 211 {
pstephens18 13:2c26e73432fb 212 led1 =!led1;
pstephens18 13:2c26e73432fb 213 }
pstephens18 13:2c26e73432fb 214 if(((tx-210)*(tx-210)+(ty-70)*(ty-70))<= (35*35))
pstephens18 13:2c26e73432fb 215 {
pstephens18 13:2c26e73432fb 216 led2 =!led2;
pstephens18 13:2c26e73432fb 217 }
pstephens18 13:2c26e73432fb 218 if(((tx-100)*(tx-100)+(ty-170)*(ty-170))<= (35*35))
pstephens18 13:2c26e73432fb 219 {
pstephens18 13:2c26e73432fb 220 led3 =!led3;
pstephens18 13:2c26e73432fb 221 }
pstephens18 13:2c26e73432fb 222 if(((tx-210)*(tx-210)+(ty-170)*(ty-170))<= (35*35))
pstephens18 13:2c26e73432fb 223 {
pstephens18 13:2c26e73432fb 224 led4 =!led4;
pstephens18 13:2c26e73432fb 225 }
pstephens18 13:2c26e73432fb 226 if (down)
pstephens18 13:2c26e73432fb 227 {
pstephens18 13:2c26e73432fb 228 myLCD.locate(10, 10);
pstephens18 13:2c26e73432fb 229 myLCD.printf("%5i", tx);
pstephens18 13:2c26e73432fb 230 myLCD.locate(170, 10);
pstephens18 13:2c26e73432fb 231 myLCD.printf("%5i", ty);
pstephens18 13:2c26e73432fb 232 //myLCD.fillcircle(tx, ty, 2, Red);
pstephens18 13:2c26e73432fb 233 }
pstephens18 13:2c26e73432fb 234
pstephens18 13:2c26e73432fb 235 while(down)
pstephens18 13:2c26e73432fb 236 {
pstephens18 13:2c26e73432fb 237 touch.readTouchData(tx, ty, down);
pstephens18 13:2c26e73432fb 238 myLCD.printf("");
pstephens18 13:2c26e73432fb 239 }
pstephens18 13:2c26e73432fb 240
pstephens18 13:2c26e73432fb 241
pstephens18 13:2c26e73432fb 242
pstephens18 13:2c26e73432fb 243 down=0;
pstephens18 13:2c26e73432fb 244 }
pstephens18 13:2c26e73432fb 245 }
JLarkin 9:8917e707fe8e 246 }
JLarkin 9:8917e707fe8e 247
pstephens18 13:2c26e73432fb 248 /*
Geremia 2:2b781c215ac0 249 // scroll test, only for TFT
Geremia 4:818956c30cae 250 myLCD.cls();
Geremia 4:818956c30cae 251 myLCD.set_font((unsigned char*) Arial24x23);
Geremia 5:c69049e461b7 252 myLCD.locate(2,10);
Geremia 4:818956c30cae 253 myLCD.printf("Scrolling");
Geremia 4:818956c30cae 254 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
Geremia 4:818956c30cae 255 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
Geremia 4:818956c30cae 256 myLCD.setscrollarea(0,myLCD.sizeY());
Geremia 2:2b781c215ac0 257 wait(1);
Geremia 4:818956c30cae 258 myLCD.scroll(1); //up 1
Geremia 2:2b781c215ac0 259 wait(1);
Geremia 4:818956c30cae 260 myLCD.scroll(0); //center
Geremia 2:2b781c215ac0 261 wait(1);
Geremia 4:818956c30cae 262 myLCD.scroll(myLCD.sizeY()-1); //down 1
Geremia 2:2b781c215ac0 263 wait(1);
Geremia 4:818956c30cae 264 myLCD.scroll(myLCD.sizeY()); // same as 0, center
Geremia 2:2b781c215ac0 265 wait(1);
Geremia 4:818956c30cae 266 myLCD.scroll(myLCD.sizeY()>>1); // half screen
Geremia 2:2b781c215ac0 267 wait(1);
Geremia 4:818956c30cae 268 myLCD.scrollreset(); // center
Geremia 2:2b781c215ac0 269 wait(1);
Geremia 4:818956c30cae 270 for(unsigned short i=1; i<=myLCD.sizeY(); i++)
pstephens18 13:2c26e73432fb 271 {
pstephens18 13:2c26e73432fb 272 myLCD.scroll(i);
pstephens18 13:2c26e73432fb 273 wait_ms(2);
pstephens18 13:2c26e73432fb 274 }
Geremia 2:2b781c215ac0 275 wait(2);
Geremia 2:2b781c215ac0 276 // color inversion
Geremia 2:2b781c215ac0 277 for(unsigned short i=0; i<=8; i++)
pstephens18 13:2c26e73432fb 278 {
pstephens18 13:2c26e73432fb 279 myLCD.invert(i&1);
pstephens18 13:2c26e73432fb 280 wait_ms(200);
pstephens18 13:2c26e73432fb 281 }
Geremia 2:2b781c215ac0 282 wait(2);
Geremia 4:818956c30cae 283 // bmp 16bit test
Geremia 4:818956c30cae 284 myLCD.cls();
Geremia 4:818956c30cae 285 for(int y=0; y<myLCD.height(); y+=34)
pstephens18 13:2c26e73432fb 286 {
pstephens18 13:2c26e73432fb 287 for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34);
pstephens18 13:2c26e73432fb 288 }
Geremia 4:818956c30cae 289 wait(2);
JLarkin 6:6b6e93790b4c 290 myLCD.set_orientation((++orient)%4);
pstephens18 13:2c26e73432fb 291 */
Geremia 0:2ccd65a72ab8 292 }
Geremia 0:2ccd65a72ab8 293 }