Paint for the FRDM-KL25Z

Dependencies:   mbed TFT_fonts SPI_TFT_ILI9341

main.cpp

Committer:
ecowboy
Date:
2019-01-08
Revision:
2:fe018965e46c
Parent:
1:33506fcfdd95
Child:
3:1396bac4ae71

File content as of revision 2:fe018965e46c:

#include "mbed.h"
#include "ILI932x.h"

//#include "SDFileSystem.h"
//#include "SPI.h"
#include "BMP565.h"
#include "Arial12x12.h"
#include "stdio.h"
#include "touch.h"
 
// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// The 2.8" TFT Touch shield has 300 ohms across the X plate
    
//Measured ADC values for (0,0) and (210-1,320-1)
//TS_MINX corresponds to ADC value when X = 0
//TS_MINY corresponds to ADC value when Y = 0
//TS_MAXX corresponds to ADC value when X = 240 -1
//TS_MAXY corresponds to ADC value when Y = 320 -1

#define PIN_YP PTB3  // must be an analog pin, use "An" notation!
#define PIN_XM PTB2  // must be an analog pin, use "An" notation!
#define PIN_YM PTD5   // can be a digital pin
#define PIN_XP PTA13  // can be a digital pin

#define PIN_CS_TFT      PTB3
#define PIN_RST_TFT     PTC2
#define PIN_DC_TFT      PTB2
#define PIN_WR_TFT      PTB1
#define PIN_RD_TFT      PTB0

#if 0
#define PIN_CS_SD       PTD0
#define PIN_MOSI        PTD2
#define PIN_MISO        PTD3
#define PIN_SCLK        PTD1
#endif

#define PIN_CS_TSC      PTD0
#define PIN_MOSI        PTD2
#define PIN_MISO        PTD3
#define PIN_SCLK        PTD1

PinName dataBus[] = {PTA13,PTD5,PTD4,PTA12,PTA4,PTA5,PTC8,PTC9};

ILI932x TFT(BUS_8, dataBus, PIN_CS_TFT, PIN_RST_TFT, PIN_DC_TFT, PIN_WR_TFT, PIN_RD_TFT, "TFT", 240, 320);

//SDFileSystem sd(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_SD, "sd");

// Paint application - Demonstate both TFT and Touch Screen
int ColorPaletteHigh = 30;
int color = White;  //Paint brush color
unsigned int colors[8] = {Red, Green, Blue, Cyan, Yellow, Black, White, LightGrey};


TouchScreen tft(PIN_XP, PIN_YP, PIN_XM, PIN_YM); //init TouchScreen port pins

struct point
{
    int x;
    int y;
    int z;
};

typedef struct point Point;


Point point(int xx, int yy, int zz){
    Point p;
    p.x = xx;
    p.y = yy;
    p.z = zz;
    return p;
}    
    
Point getPoint(){
    PinName _yp, _ym, _xm, _xp;
    int z;
    int RXPLATE = 350;
    int Q = 1024;  //10 bit TSC Resolution
    /*int y2 = tft.readTouch(PIN_XP, PIN_YP, PIN_XM, PIN_YM);
    /*int x2 = tft.readTouch(_yp,_ym,_xm,_xp);
    int y1 = tft.readTouch(_xp,_xm,_ym,_yp);
    int x1 = tft.readTouch(_yp,_ym,_xp,_xm);
    int z2 = tft.readTouch(_ym,_xp,_yp,_xm);
    int z1 = tft.readTouch(_ym,_xp,_xm,_yp);*/
    
    int y2 = 700;
    int x2 = 600;
    int z2 = 110;
    int z1 = 100;
    

    if (z1!=0){
        z = (float)RXPLATE/(float)Q*x2*((float)z2/(float)z1-1);
    }else{
        z = 0;
    }
    int x = x2;
    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.locate(80,90);
    //printf("Initializing z...\r\n");
    for(int i = 0; i<8; i++){
        TFT.fillrect(i*30, 0, 30*(i+1), ColorPaletteHigh, colors[i]);
    }
    int zx=0;
    float TS_MINX = 116;
    float TS_MAXX = 890;
    float TS_MINY = 83;
    float TS_MAXY = 913;
    int PRESSURE = 10;
    while(1){
        zx = zx + 1;
        // a point object holds x y and z coordinates.
        Point p = getPoint();
        //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);

        // we have some minimum pressure we consider 'valid'
        // pressure of 0 means no pressing!
        TFT.locate(60,90);
        printf("x = %d      \r\n", p.x);
        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 > PRESSURE) {
            // Detect  paint brush color change
            if(p.y < ColorPaletteHigh+2){
                color = colors[p.x/30];
            }else{
                TFT.fillcircle(p.x,p.y,2,color);
            }
        }
    }
}