pong game added to the main sketch

Dependencies:   RTC-DS1307 SPI_TFT_ILI9341 TFT_fonts mbed tsi_sensor

Fork of MainSketch by IoT Ox

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?

UserRevisionLine numberNew 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 }