projets de S3 s4 2021
Dependencies: mbed TFT_fonts SPI_TFT_ILI9341
main.cpp@5:80791250acb2, 2019-01-10 (annotated)
- Committer:
- ecowboy
- Date:
- Thu Jan 10 04:31:29 2019 +0000
- Revision:
- 5:80791250acb2
- Parent:
- 4:87b40e5986e7
- Child:
- 6:13d0de9e679c
Final
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ecowboy | 0:42ec9a44bc24 | 1 | #include "mbed.h" |
ecowboy | 3:1396bac4ae71 | 2 | #include "SPI_TFT_ILI9341.h" |
ecowboy | 3:1396bac4ae71 | 3 | #include "Arial12x12.h" |
ecowboy | 0:42ec9a44bc24 | 4 | #include "BMP565.h" |
ecowboy | 0:42ec9a44bc24 | 5 | #include "stdio.h" |
ecowboy | 0:42ec9a44bc24 | 6 | #include "touch.h" |
ecowboy | 0:42ec9a44bc24 | 7 | |
ecowboy | 0:42ec9a44bc24 | 8 | |
ecowboy | 3:1396bac4ae71 | 9 | #define PIN_XP PTB3 |
ecowboy | 5:80791250acb2 | 10 | #define PIN_XM PTB1 |
ecowboy | 5:80791250acb2 | 11 | #define PIN_YP PTB2 |
ecowboy | 3:1396bac4ae71 | 12 | #define PIN_YM PTB0 |
ecowboy | 3:1396bac4ae71 | 13 | #define PIN_MOSI PTD2 |
ecowboy | 3:1396bac4ae71 | 14 | #define PIN_MISO PTD3 |
ecowboy | 3:1396bac4ae71 | 15 | #define PIN_SCLK PTD1 |
ecowboy | 3:1396bac4ae71 | 16 | #define PIN_CS_TFT PTA5 |
ecowboy | 3:1396bac4ae71 | 17 | #define PIN_DC_TFT PTC8 |
ecowboy | 3:1396bac4ae71 | 18 | #define PIN_BL_TFT PTC9 |
ecowboy | 3:1396bac4ae71 | 19 | #define PIN_CS_SD PTA4 |
ecowboy | 0:42ec9a44bc24 | 20 | |
ecowboy | 0:42ec9a44bc24 | 21 | |
ecowboy | 3:1396bac4ae71 | 22 | SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_BL_TFT, PIN_DC_TFT, "TFT"); |
ecowboy | 3:1396bac4ae71 | 23 | TouchScreen tft(PIN_XP, PIN_YP, PIN_XM, PIN_YM); //init TouchScreen port pins |
ecowboy | 0:42ec9a44bc24 | 24 | |
ecowboy | 0:42ec9a44bc24 | 25 | |
ecowboy | 0:42ec9a44bc24 | 26 | // Paint application - Demonstate both TFT and Touch Screen |
ecowboy | 3:1396bac4ae71 | 27 | int ColorPaletteHigh = 15; |
ecowboy | 0:42ec9a44bc24 | 28 | int color = White; //Paint brush color |
ecowboy | 3:1396bac4ae71 | 29 | unsigned int colors[16] = {Red, Green, Blue, Cyan, Yellow, Purple, Pink, Black, Orange, Brown, BlueGreen, White, LightPink, DarkGrey, DarkGreen, Mustard}; |
ecowboy | 0:42ec9a44bc24 | 30 | |
ecowboy | 3:1396bac4ae71 | 31 | int RXPLATE = 350; |
ecowboy | 3:1396bac4ae71 | 32 | int Q = 1024; //10 bit TSC Resolution |
ecowboy | 0:42ec9a44bc24 | 33 | |
ecowboy | 1:33506fcfdd95 | 34 | struct point |
ecowboy | 1:33506fcfdd95 | 35 | { |
ecowboy | 1:33506fcfdd95 | 36 | int x; |
ecowboy | 1:33506fcfdd95 | 37 | int y; |
ecowboy | 1:33506fcfdd95 | 38 | int z; |
ecowboy | 1:33506fcfdd95 | 39 | }; |
ecowboy | 1:33506fcfdd95 | 40 | |
ecowboy | 1:33506fcfdd95 | 41 | typedef struct point Point; |
ecowboy | 1:33506fcfdd95 | 42 | |
ecowboy | 1:33506fcfdd95 | 43 | |
ecowboy | 1:33506fcfdd95 | 44 | Point point(int xx, int yy, int zz){ |
ecowboy | 1:33506fcfdd95 | 45 | Point p; |
ecowboy | 1:33506fcfdd95 | 46 | p.x = xx; |
ecowboy | 1:33506fcfdd95 | 47 | p.y = yy; |
ecowboy | 1:33506fcfdd95 | 48 | p.z = zz; |
ecowboy | 1:33506fcfdd95 | 49 | return p; |
ecowboy | 3:1396bac4ae71 | 50 | } |
ecowboy | 3:1396bac4ae71 | 51 | |
ecowboy | 3:1396bac4ae71 | 52 | |
ecowboy | 1:33506fcfdd95 | 53 | Point getPoint(){ |
ecowboy | 3:1396bac4ae71 | 54 | |
ecowboy | 3:1396bac4ae71 | 55 | float z; |
ecowboy | 5:80791250acb2 | 56 | int y2 = tft.readTouch(PTB3,PTB1,PTB2,PTB0); //a(analog),i(analog),n(digital),m(digital) |
ecowboy | 5:80791250acb2 | 57 | int x2 = tft.readTouch(PTB2,PTB0,PTB3,PTB1); |
ecowboy | 5:80791250acb2 | 58 | int z2 = tft.readTouch(PTB0,PTB3,PTB2,PTB1); |
ecowboy | 5:80791250acb2 | 59 | int z1 = tft.readTouch(PTB3,PTB0,PTB2,PTB1); |
ecowboy | 3:1396bac4ae71 | 60 | |
ecowboy | 1:33506fcfdd95 | 61 | if (z1!=0){ |
ecowboy | 3:1396bac4ae71 | 62 | z = (float)z2/(float)z1; |
ecowboy | 1:33506fcfdd95 | 63 | }else{ |
ecowboy | 1:33506fcfdd95 | 64 | z = 0; |
ecowboy | 1:33506fcfdd95 | 65 | } |
ecowboy | 1:33506fcfdd95 | 66 | int x = x2; |
ecowboy | 1:33506fcfdd95 | 67 | int y = y2; |
ecowboy | 1:33506fcfdd95 | 68 | return point(x,y,z); |
ecowboy | 1:33506fcfdd95 | 69 | } |
ecowboy | 3:1396bac4ae71 | 70 | |
ecowboy | 5:80791250acb2 | 71 | |
ecowboy | 0:42ec9a44bc24 | 72 | int main(){ |
ecowboy | 0:42ec9a44bc24 | 73 | TFT.claim(stdout); // send stdout to the TFT display |
ecowboy | 0:42ec9a44bc24 | 74 | TFT.set_orientation(0); |
ecowboy | 0:42ec9a44bc24 | 75 | //TFT.Bitmap(28,90,265,65,p1); |
ecowboy | 0:42ec9a44bc24 | 76 | //wait(1); |
ecowboy | 0:42ec9a44bc24 | 77 | //TFT.cls(); |
ecowboy | 0:42ec9a44bc24 | 78 | TFT.set_font((unsigned char*) Arial12x12); |
ecowboy | 0:42ec9a44bc24 | 79 | TFT.foreground(Cyan); // set chars to Cyan |
ecowboy | 3:1396bac4ae71 | 80 | TFT.background(Purple); // set background to Purple |
ecowboy | 0:42ec9a44bc24 | 81 | TFT.locate(80,90); |
ecowboy | 0:42ec9a44bc24 | 82 | //printf("Initializing z...\r\n"); |
ecowboy | 3:1396bac4ae71 | 83 | for(int i = 0; i<16; i++){ |
ecowboy | 3:1396bac4ae71 | 84 | TFT.fillrect(i*15, 0, 15*(i+1), ColorPaletteHigh, colors[i]); |
ecowboy | 0:42ec9a44bc24 | 85 | } |
ecowboy | 3:1396bac4ae71 | 86 | float TS_MINX = 5500; |
ecowboy | 3:1396bac4ae71 | 87 | float TS_MAXX = 58100; |
ecowboy | 3:1396bac4ae71 | 88 | float TS_MINY = 4700; |
ecowboy | 3:1396bac4ae71 | 89 | float TS_MAXY = 57600; |
ecowboy | 3:1396bac4ae71 | 90 | int PRESSURE = 200; |
ecowboy | 0:42ec9a44bc24 | 91 | while(1){ |
ecowboy | 0:42ec9a44bc24 | 92 | // a point object holds x y and z coordinates. |
ecowboy | 3:1396bac4ae71 | 93 | //TFT.BusEnable(false); |
ecowboy | 2:fe018965e46c | 94 | Point p = getPoint(); |
ecowboy | 3:1396bac4ae71 | 95 | //TFT.BusEnable(true); |
ecowboy | 0:42ec9a44bc24 | 96 | //map the ADC value read to into pixel co-ordinates |
ecowboy | 2:fe018965e46c | 97 | p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240); |
ecowboy | 2:fe018965e46c | 98 | p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320); |
ecowboy | 3:1396bac4ae71 | 99 | p.z = p.x * RXPLATE / Q * (p.z -1); |
ecowboy | 0:42ec9a44bc24 | 100 | // we have some minimum pressure we consider 'valid' |
ecowboy | 0:42ec9a44bc24 | 101 | // pressure of 0 means no pressing! |
ecowboy | 3:1396bac4ae71 | 102 | /*TFT.locate(60,90); |
ecowboy | 2:fe018965e46c | 103 | printf("x = %d \r\n", p.x); |
ecowboy | 2:fe018965e46c | 104 | TFT.locate(60,110); |
ecowboy | 2:fe018965e46c | 105 | printf("y = %d \r\n", p.y); |
ecowboy | 2:fe018965e46c | 106 | TFT.locate(60,130); |
ecowboy | 2:fe018965e46c | 107 | printf("z = %d \r\n", p.z); |
ecowboy | 3:1396bac4ae71 | 108 | //TFT.locate(60,170);*/ |
ecowboy | 3:1396bac4ae71 | 109 | //printf("Initializing z...%d \r\n",zx); |
ecowboy | 3:1396bac4ae71 | 110 | if (p.z > 40 && p.z < PRESSURE) { |
ecowboy | 0:42ec9a44bc24 | 111 | // Detect paint brush color change |
ecowboy | 3:1396bac4ae71 | 112 | if(int(p.y) < ColorPaletteHigh+2){ |
ecowboy | 3:1396bac4ae71 | 113 | color = colors[int(p.x)/15]; |
ecowboy | 0:42ec9a44bc24 | 114 | }else{ |
ecowboy | 3:1396bac4ae71 | 115 | TFT.fillcircle(int(p.x),int(p.y),2,color); |
ecowboy | 0:42ec9a44bc24 | 116 | } |
ecowboy | 2:fe018965e46c | 117 | } |
ecowboy | 0:42ec9a44bc24 | 118 | } |
ecowboy | 0:42ec9a44bc24 | 119 | } |