pong game added to the main sketch
Dependencies: RTC-DS1307 SPI_TFT_ILI9341 TFT_fonts mbed tsi_sensor
Fork of MainSketch by
main.cpp@8:b9aa9fdf286b, 2017-05-23 (annotated)
- Committer:
- mlin
- Date:
- Tue May 23 23:04:03 2017 +0000
- Revision:
- 8:b9aa9fdf286b
- Parent:
- 7:c2bc477a07da
- Child:
- 9:eee503060d69
changed the way the the X and Y position are polled and adjusted
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cstevens | 4:14043cafbec7 | 1 | // example to test the TFT Display from Mikroelectronika |
dreschpe | 0:7c3b9bfd6ead | 2 | |
dreschpe | 0:7c3b9bfd6ead | 3 | #include "stdio.h" |
dreschpe | 0:7c3b9bfd6ead | 4 | #include "mbed.h" |
dreschpe | 0:7c3b9bfd6ead | 5 | #include "SPI_TFT_ILI9341.h" |
dreschpe | 0:7c3b9bfd6ead | 6 | #include "string" |
dreschpe | 0:7c3b9bfd6ead | 7 | #include "Arial12x12.h" |
dreschpe | 0:7c3b9bfd6ead | 8 | #include "Arial24x23.h" |
dreschpe | 0:7c3b9bfd6ead | 9 | #include "Arial28x28.h" |
dreschpe | 0:7c3b9bfd6ead | 10 | #include "font_big.h" |
cstevens | 4:14043cafbec7 | 11 | |
mlin | 8:b9aa9fdf286b | 12 | DigitalIn sw_w(SW3); |
mlin | 8:b9aa9fdf286b | 13 | Serial pc(USBTX,USBRX,"pc"); |
cstevens | 4:14043cafbec7 | 14 | |
dreschpe | 0:7c3b9bfd6ead | 15 | |
dreschpe | 0:7c3b9bfd6ead | 16 | |
pegcjs | 3:676adf84c914 | 17 | |
cstevens | 6:18c7288b5e00 | 18 | // the display has a backlight switch on board |
mlin | 8:b9aa9fdf286b | 19 | //DigitalOut LCD_LED(PTA4); // may not be needed on mikroelectronika board |
mlin | 8:b9aa9fdf286b | 20 | //DigitalOut pwr(PTD7); // ditto |
dreschpe | 0:7c3b9bfd6ead | 21 | |
dreschpe | 0:7c3b9bfd6ead | 22 | // the TFT is connected to SPI pin 5-7 |
pegcjs | 1:e0479f60cd48 | 23 | //SPI_TFT_ILI9341 TFT(p5, p6, p7, p8, p9, p10,"TFT"); // mosi, miso, sclk, cs, reset, dc for lpc1768 |
mlin | 8:b9aa9fdf286b | 24 | SPI_TFT_ILI9341 TFT(PTD6, PTD7, PTD5, PTD2, PTD4, PTA13,"TFT"); // mosi, miso, sclk, cs, reset, dc for frdmkl25z |
cstevens | 6:18c7288b5e00 | 25 | //NB better combination to use a coherent 2x4 block for lcd |
pegcjs | 3:676adf84c914 | 26 | // SPI_TFT_ILI9341 TFT(PTD2, PTD3, PTD1, PTA16, PTA17, PTC16,"TFT"); // mosi, miso, sclk, cs, reset, dc for frdmkl25z |
cstevens | 6:18c7288b5e00 | 27 | // DigitalOut LCD_LED(PTC17); |
cstevens | 7:c2bc477a07da | 28 | int touching=0; |
cstevens | 6:18c7288b5e00 | 29 | |
cstevens | 6:18c7288b5e00 | 30 | // Subroutine to read the x location of the touch point |
cstevens | 6:18c7288b5e00 | 31 | // need to set x+ to 3V and ground x- then read analogue voltage on ym |
cstevens | 6:18c7288b5e00 | 32 | //nb need to add a check for actual touch as opposed to random crap |
cstevens | 6:18c7288b5e00 | 33 | int readX() |
cstevens | 6:18c7288b5e00 | 34 | { |
cstevens | 7:c2bc477a07da | 35 | int delta=0,xv1=0,xv2=0,k=0; |
mlin | 8:b9aa9fdf286b | 36 | int temp1=0,temp2=0; |
cstevens | 7:c2bc477a07da | 37 | |
cstevens | 7:c2bc477a07da | 38 | AnalogIn yp(PTB3); |
cstevens | 7:c2bc477a07da | 39 | AnalogIn ym(PTB2); |
cstevens | 6:18c7288b5e00 | 40 | DigitalOut xp(PTB0); |
cstevens | 6:18c7288b5e00 | 41 | DigitalOut xm(PTB1); |
cstevens | 6:18c7288b5e00 | 42 | |
cstevens | 6:18c7288b5e00 | 43 | xp=1; // set positive sdie of x high |
cstevens | 6:18c7288b5e00 | 44 | xm=0; |
cstevens | 6:18c7288b5e00 | 45 | // dont need to do anyhting to set low side as it should be fine. |
cstevens | 6:18c7288b5e00 | 46 | // but do need to disconnect yp |
cstevens | 6:18c7288b5e00 | 47 | //yp.PinMode(PullNone) |
mlin | 8:b9aa9fdf286b | 48 | delta = 0; |
cstevens | 7:c2bc477a07da | 49 | for(k=0; k<10; k++) { // make 10 readings to average |
mlin | 8:b9aa9fdf286b | 50 | temp1= (int)ym.read_u16(); |
mlin | 8:b9aa9fdf286b | 51 | temp2 = (int)yp.read_u16(); |
mlin | 8:b9aa9fdf286b | 52 | xv1+=temp1; // get value |
mlin | 8:b9aa9fdf286b | 53 | xv2+=temp2; // get other value |
mlin | 8:b9aa9fdf286b | 54 | delta+= abs(temp1-temp2)/10; |
mlin | 8:b9aa9fdf286b | 55 | pc.printf("val1 = %d - val2 = %d-diff = %d\n\r",temp1,temp2,temp1-temp2); |
cstevens | 7:c2bc477a07da | 56 | } |
mlin | 8:b9aa9fdf286b | 57 | //delta=abs(xv2-xv1)/10; |
cstevens | 7:c2bc477a07da | 58 | if(delta<300) touching=1; |
cstevens | 7:c2bc477a07da | 59 | else touching=0; |
cstevens | 7:c2bc477a07da | 60 | pc.printf("delta=%d \t %d\n\r",delta,touching); |
cstevens | 7:c2bc477a07da | 61 | xp=0; |
cstevens | 7:c2bc477a07da | 62 | xm=0; |
cstevens | 7:c2bc477a07da | 63 | return(xv2/10); //maybe better to return the average of both.... |
cstevens | 6:18c7288b5e00 | 64 | } |
cstevens | 6:18c7288b5e00 | 65 | // subroutine to read y values - has different pin functions .. |
cstevens | 6:18c7288b5e00 | 66 | int readY() |
cstevens | 6:18c7288b5e00 | 67 | { |
cstevens | 7:c2bc477a07da | 68 | DigitalOut yp(PTB3); |
cstevens | 7:c2bc477a07da | 69 | DigitalOut ym(PTB2); |
cstevens | 6:18c7288b5e00 | 70 | AnalogIn xp(PTB0); |
cstevens | 6:18c7288b5e00 | 71 | AnalogIn xm(PTB1); |
cstevens | 6:18c7288b5e00 | 72 | |
cstevens | 6:18c7288b5e00 | 73 | yp=1; // set positive sdie of x high |
cstevens | 6:18c7288b5e00 | 74 | ym=0; |
cstevens | 6:18c7288b5e00 | 75 | // dont need to do anyhting to set low side as it should be fine. |
cstevens | 6:18c7288b5e00 | 76 | // but do need to disconnect yp |
cstevens | 6:18c7288b5e00 | 77 | //yp.PinMode(PullNone) |
cstevens | 6:18c7288b5e00 | 78 | int yval=(int)xm.read_u16(); // get value |
mlin | 8:b9aa9fdf286b | 79 | pc.printf("yval=%d",yval); |
cstevens | 7:c2bc477a07da | 80 | yp=0; |
cstevens | 7:c2bc477a07da | 81 | ym=0; |
cstevens | 6:18c7288b5e00 | 82 | return(yval); |
cstevens | 7:c2bc477a07da | 83 | |
cstevens | 6:18c7288b5e00 | 84 | } |
cstevens | 6:18c7288b5e00 | 85 | |
cstevens | 7:c2bc477a07da | 86 | void drawbuttons() |
cstevens | 7:c2bc477a07da | 87 | { |
cstevens | 7:c2bc477a07da | 88 | TFT.fillrect(0,0,50,50,Red); |
cstevens | 7:c2bc477a07da | 89 | TFT.fillrect(50,0,100,50,Green); |
cstevens | 7:c2bc477a07da | 90 | TFT.fillrect(100,0,150,50,Blue); |
cstevens | 7:c2bc477a07da | 91 | TFT.fillrect(150,0,200,50,White); |
cstevens | 7:c2bc477a07da | 92 | TFT.fillrect(200,0,240,50,Black); |
cstevens | 7:c2bc477a07da | 93 | |
cstevens | 7:c2bc477a07da | 94 | TFT.rect(0,0,50,50,White); |
cstevens | 7:c2bc477a07da | 95 | TFT.rect(50,0,100,50,White); |
cstevens | 7:c2bc477a07da | 96 | TFT.rect(100,0,150,50,White); |
cstevens | 7:c2bc477a07da | 97 | TFT.rect(150,0,200,50,White); |
cstevens | 7:c2bc477a07da | 98 | TFT.rect(200,0,240,50,White); |
cstevens | 7:c2bc477a07da | 99 | |
cstevens | 7:c2bc477a07da | 100 | } |
cstevens | 6:18c7288b5e00 | 101 | |
cstevens | 4:14043cafbec7 | 102 | |
dreschpe | 0:7c3b9bfd6ead | 103 | int main() |
dreschpe | 0:7c3b9bfd6ead | 104 | { |
mlin | 8:b9aa9fdf286b | 105 | // pc.baud(115200); |
cstevens | 7:c2bc477a07da | 106 | int color=0; |
cstevens | 7:c2bc477a07da | 107 | int xpos=0,ypos=0,xp=0,yp=0,sw=0;; |
mlin | 8:b9aa9fdf286b | 108 | //pwr=1; |
pegcjs | 3:676adf84c914 | 109 | wait(0.2); |
cstevens | 6:18c7288b5e00 | 110 | |
dreschpe | 0:7c3b9bfd6ead | 111 | int i; |
mlin | 8:b9aa9fdf286b | 112 | //LCD_LED = 1; // backlight on |
cstevens | 6:18c7288b5e00 | 113 | |
dreschpe | 0:7c3b9bfd6ead | 114 | TFT.claim(stdout); // send stdout to the TFT display |
dreschpe | 0:7c3b9bfd6ead | 115 | TFT.set_orientation(1); |
dreschpe | 0:7c3b9bfd6ead | 116 | TFT.background(Black); // set background to black |
dreschpe | 0:7c3b9bfd6ead | 117 | TFT.foreground(White); // set chars to white |
dreschpe | 0:7c3b9bfd6ead | 118 | TFT.cls(); // clear the screen |
dreschpe | 0:7c3b9bfd6ead | 119 | |
dreschpe | 0:7c3b9bfd6ead | 120 | //first show the 4 directions |
dreschpe | 0:7c3b9bfd6ead | 121 | TFT.set_orientation(0); |
dreschpe | 0:7c3b9bfd6ead | 122 | TFT.background(Black); |
dreschpe | 0:7c3b9bfd6ead | 123 | TFT.cls(); |
dreschpe | 0:7c3b9bfd6ead | 124 | |
dreschpe | 0:7c3b9bfd6ead | 125 | TFT.set_font((unsigned char*) Arial12x12); |
dreschpe | 0:7c3b9bfd6ead | 126 | TFT.locate(0,0); |
cstevens | 6:18c7288b5e00 | 127 | printf(" 0 Hello Mbed 0"); |
dreschpe | 0:7c3b9bfd6ead | 128 | TFT.set_orientation(1); |
dreschpe | 0:7c3b9bfd6ead | 129 | TFT.locate(0,0); |
cstevens | 6:18c7288b5e00 | 130 | printf(" 1 Hello Mbed 1"); |
dreschpe | 0:7c3b9bfd6ead | 131 | TFT.set_orientation(2); |
dreschpe | 0:7c3b9bfd6ead | 132 | TFT.locate(0,0); |
cstevens | 6:18c7288b5e00 | 133 | printf(" 2 Hello Mbed 2"); |
dreschpe | 0:7c3b9bfd6ead | 134 | TFT.set_orientation(3); |
dreschpe | 0:7c3b9bfd6ead | 135 | TFT.locate(0,0); |
cstevens | 6:18c7288b5e00 | 136 | printf(" 3 Hello Mbed 3"); |
pegcjs | 1:e0479f60cd48 | 137 | TFT.set_orientation(3); |
dreschpe | 0:7c3b9bfd6ead | 138 | TFT.set_font((unsigned char*) Arial24x23); |
dreschpe | 0:7c3b9bfd6ead | 139 | TFT.locate(50,100); |
cstevens | 6:18c7288b5e00 | 140 | TFT.printf("TFT orientation 3"); |
cstevens | 7:c2bc477a07da | 141 | TFT.set_orientation(0); |
cstevens | 7:c2bc477a07da | 142 | |
cstevens | 6:18c7288b5e00 | 143 | for(i=0; i<10; i++) { |
cstevens | 7:c2bc477a07da | 144 | wait(0.2); // wait one seconds |
cstevens | 6:18c7288b5e00 | 145 | TFT.locate(50,160); |
cstevens | 6:18c7288b5e00 | 146 | TFT.printf("count %d",i); |
cstevens | 6:18c7288b5e00 | 147 | } |
cstevens | 7:c2bc477a07da | 148 | TFT.set_orientation(0); |
cstevens | 6:18c7288b5e00 | 149 | TFT.cls(); |
cstevens | 6:18c7288b5e00 | 150 | // LCD_LED = 1; |
cstevens | 7:c2bc477a07da | 151 | //cornwer markers |
mlin | 8:b9aa9fdf286b | 152 | TFT.fillcircle(10,10,5,0xffff); |
mlin | 8:b9aa9fdf286b | 153 | TFT.fillcircle(230,10,5,0xffff); |
mlin | 8:b9aa9fdf286b | 154 | TFT.fillcircle(230,310,5,0xffff); |
mlin | 8:b9aa9fdf286b | 155 | TFT.fillcircle(10,310,5,0xffff); |
cstevens | 7:c2bc477a07da | 156 | drawbuttons(); |
cstevens | 6:18c7288b5e00 | 157 | while(1==1) { |
mlin | 8:b9aa9fdf286b | 158 | while (sw_w == 1) {} |
cstevens | 6:18c7288b5e00 | 159 | xpos=readX(); |
cstevens | 6:18c7288b5e00 | 160 | ypos=readY(); |
cstevens | 7:c2bc477a07da | 161 | // top chunk of the screen is the button area // |
cstevens | 7:c2bc477a07da | 162 | // 0<y<50 is palette area // |
cstevens | 7:c2bc477a07da | 163 | |
cstevens | 7:c2bc477a07da | 164 | //pc.printf("xpos=%d\t,\typo=%d",xpos,ypos); |
cstevens | 7:c2bc477a07da | 165 | xp=(240*(xpos-5800))/51200; |
cstevens | 7:c2bc477a07da | 166 | yp=320-(320*(ypos-3000))/58300; |
cstevens | 7:c2bc477a07da | 167 | if(touching==1) pc.printf("\txp=%d\t,\typo=%d\n\r",xp,yp); |
cstevens | 7:c2bc477a07da | 168 | if(xp>5 && yp>50 && touching==1) TFT.fillcircle(xp,yp,2,color); |
cstevens | 7:c2bc477a07da | 169 | if(yp<50) { // color buttons |
cstevens | 7:c2bc477a07da | 170 | sw=(int)xp/50; |
cstevens | 7:c2bc477a07da | 171 | switch(sw) { |
cstevens | 7:c2bc477a07da | 172 | case 0: |
cstevens | 7:c2bc477a07da | 173 | color=0xf800; |
cstevens | 7:c2bc477a07da | 174 | break; |
cstevens | 7:c2bc477a07da | 175 | case 1: |
cstevens | 7:c2bc477a07da | 176 | color=0x07e0; |
cstevens | 7:c2bc477a07da | 177 | break; |
cstevens | 7:c2bc477a07da | 178 | case 2: |
cstevens | 7:c2bc477a07da | 179 | color=0x001f; |
cstevens | 7:c2bc477a07da | 180 | break; |
cstevens | 7:c2bc477a07da | 181 | case 3: |
cstevens | 7:c2bc477a07da | 182 | color=0xffff; |
cstevens | 7:c2bc477a07da | 183 | break; |
cstevens | 7:c2bc477a07da | 184 | case 4: |
cstevens | 7:c2bc477a07da | 185 | color=0x0000; |
cstevens | 7:c2bc477a07da | 186 | TFT.cls(); |
cstevens | 7:c2bc477a07da | 187 | drawbuttons(); |
cstevens | 7:c2bc477a07da | 188 | break; |
cstevens | 7:c2bc477a07da | 189 | } |
cstevens | 7:c2bc477a07da | 190 | // if(xp<50) color=0xF800; |
cstevens | 7:c2bc477a07da | 191 | // if(50<xp && xp<100) color=0x07e0; |
cstevens | 7:c2bc477a07da | 192 | // if(xp>100 && xp<150) color=0x001f; |
cstevens | 7:c2bc477a07da | 193 | } |
cstevens | 7:c2bc477a07da | 194 | |
mlin | 8:b9aa9fdf286b | 195 | wait(1); |
cstevens | 6:18c7288b5e00 | 196 | |
pegcjs | 1:e0479f60cd48 | 197 | } |
cstevens | 6:18c7288b5e00 | 198 | |
dreschpe | 0:7c3b9bfd6ead | 199 | } |