projets de S3 s4 2021

Dependencies:   mbed TFT_fonts SPI_TFT_ILI9341

Revision:
6:13d0de9e679c
Parent:
5:80791250acb2
Child:
8:eb61367f53ce
--- a/main.cpp	Thu Jan 10 04:31:29 2019 +0000
+++ b/main.cpp	Sat Jan 12 03:48:27 2019 +0000
@@ -1,8 +1,21 @@
+/* KL25Z mbed library for ILI9341 touch devices
+ * SPI Interface
+
+ * Uses Peter Drescher ILI9341 Library
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
 #include "mbed.h"
 #include "SPI_TFT_ILI9341.h"
 #include "Arial12x12.h"
-#include "BMP565.h"
-#include "stdio.h"
 #include "touch.h"
 
 
@@ -19,17 +32,23 @@
 #define     PIN_CS_SD       PTA4
 
 
-SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_BL_TFT, PIN_DC_TFT, "TFT");
+SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_BL_TFT, PIN_DC_TFT, "TFT");   //PIN_BL_TFT does not have to be connected
 TouchScreen tft(PIN_XP, PIN_YP, PIN_XM, PIN_YM); //init TouchScreen port pins
 
 
 // Paint application - Demonstate both TFT and Touch Screen
-int ColorPaletteHigh = 15;
-int color = White;  //Paint brush color
+int ColorPaletteHigh = 15;  //Height of color palette
+int color = White;  //Paint brush initial color
 unsigned int colors[16] = {Red, Green, Blue, Cyan, Yellow, Purple, Pink, Black, Orange, Brown, BlueGreen, White, LightPink, DarkGrey, DarkGreen, Mustard};
 
-int RXPLATE = 350;
+int RXPLATE = 350;  //Set this to the resistance measured across XP and XM
 int Q = 1024;  //10 bit TSC Resolution
+float TS_MINX = 5500;   //Set this to screen x min
+float TS_MAXX = 58100;  //Set this to screen x max
+float TS_MINY = 4700;   //Set this to screen y min
+float TS_MAXY = 57600;  //Set this to screen y max
+int PRESSURE = 200;     //Set this to max pressure (z) that will register as a touch event
+int v[3] ={0,0,0};      //array to roll touches for comparison and validation, initialized at zero briefly.
 
 struct point
 {
@@ -53,10 +72,10 @@
 Point getPoint(){
 
     float z;
-    int y2 = tft.readTouch(PTB3,PTB1,PTB2,PTB0);  //a(analog),i(analog),n(digital),m(digital)
-    int x2 = tft.readTouch(PTB2,PTB0,PTB3,PTB1);
-    int z2 = tft.readTouch(PTB0,PTB3,PTB2,PTB1);
-    int z1 = tft.readTouch(PTB3,PTB0,PTB2,PTB1);
+    int y2 = tft.readTouch(PTB3,PTB1,PTB2,PTB0);    //a(analog),i(analog),n(digital),m(digital)
+    int x2 = tft.readTouch(PTB2,PTB0,PTB3,PTB1);    //Resources to help set these up
+    int z2 = tft.readTouch(PTB0,PTB3,PTB2,PTB1);    //http://electronics.stackexchange.com/questions/113223/4-wire-resisitive-touch-screen-not-working
+    int z1 = tft.readTouch(PTB3,PTB0,PTB2,PTB1);    //http://www.ti.com/lit/an/sbaa155a/sbaa155a.pdf
     
     if (z1!=0){
         z = (float)z2/(float)z1;
@@ -67,52 +86,46 @@
     int y = y2;
     return point(x,y,z);
 }
+
     
     
 int main(){
     TFT.claim(stdout);          // send stdout to the TFT display
     TFT.set_orientation(0);
-    //TFT.Bitmap(28,90,265,65,p1);
-    //wait(1);
-    //TFT.cls();
-    TFT.set_font((unsigned char*) Arial12x12);
-    TFT.foreground(Cyan);      // set chars to Cyan
-    TFT.background(Purple);      // set background to Purple
-    TFT.locate(80,90);
-    //printf("Initializing z...\r\n");
+    TFT.set_font((unsigned char*) Arial12x12);  //set font to arial 12x12
+    TFT.foreground(Cyan);      // set text chars to Cyan
+    TFT.background(Purple);      // set text background to Purple
+
     for(int i = 0; i<16; i++){
-        TFT.fillrect(i*15, 0, 15*(i+1), ColorPaletteHigh, colors[i]);
+        TFT.fillrect(i*15, 0, 15*(i+1), ColorPaletteHigh, colors[i]);   //Fill color palete with 16 colors defined in SPI_TFT_ILI9341.h
     }
-    float TS_MINX = 5500;
-    float TS_MAXX = 58100;
-    float TS_MINY = 4700;
-    float TS_MAXY = 57600;
-    int PRESSURE = 200;
     while(1){
         // a point object holds x y and z coordinates.
-        //TFT.BusEnable(false);
         Point p = getPoint();
-        //TFT.BusEnable(true);
         //map the ADC value read to into pixel co-ordinates
-        p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
-        p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
-        p.z = p.x * RXPLATE / Q * (p.z -1);
-        // we have some minimum pressure we consider 'valid'
-        // pressure of 0 means no pressing!
+        p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);   //Use map functionm to size p.x to screen size
+        p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);   //Use map functionm to size p.y to screen size
+        p.z = 20+p.x * RXPLATE / Q * (p.z -1);  //Calc p.z based on above reference links
+        
+        v[2]=v[1];  //Rotate p.z touch values in array
+        v[1]=v[0];
+        v[0]=p.z;
+
         /*TFT.locate(60,90);
-        printf("x = %d      \r\n", p.x);
+        printf("x = %d      \r\n", p.x);    //Uncomment these to see point data on screen and to obtain calibration values
         TFT.locate(60,110);
         printf("y = %d      \r\n", p.y);
         TFT.locate(60,130);
-        printf("z = %d      \r\n", p.z);
-        //TFT.locate(60,170);*/
-        //printf("Initializing z...%d      \r\n",zx);
-        if (p.z > 40 && p.z < PRESSURE) {
+        printf("z = %d      \r\n", p.z);*/
+
+        // we have some minimum pressure we consider 'valid'
+        // pressure of 0 means no pressing!
+        if (p.z > 40 && p.z < PRESSURE & p.z == (v[1]+v[2])/2) {    //Validate that p.z senses a touch event
             // Detect  paint brush color change
             if(int(p.y) < ColorPaletteHigh+2){
-                color = colors[int(p.x)/15];
+                color = colors[int(p.x)/15];    //Touch event occured in color palette, change color.
             }else{
-                TFT.fillcircle(int(p.x),int(p.y),2,color);
+                TFT.fillcircle(int(p.x),int(p.y),2,color);  //Touch event caused paint event with 2 pixel brush
             }
         }
     }