Stap 1: Scetch
#include / / core grafische bibliotheek
#include / / hardwarespecifieke bibliotheek #include
#define YP A1 / / moet worden van een analoge pin, "An" notatie gebruiken! #define XM A2 / / moet worden van een analoge pin, "An" notatie gebruiken! #define YM 7 / / kan een digital pin #define XP 6 / / kan een digital pin
#define TS_MINX 150 #define TS_MINY 120 #define TS_MAXX 920 #define TS_MAXY 940
Voor betere precisie van de druk, we willen weten van de weerstand / / tussen X + en X - gebruik een multimeter om het te lezen / / voor de ene we gebruiken, zijn 300 ohm over de X plaat TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);
Leesbare namen toewijzen aan bepaalde gemeenschappelijke waarden van de 16-bits kleuren: #define BLACK 0x0000 #define 0x001F BLUE #define rood 0xF800 #define GREEN 0x07E0 #define 0x07FF cyaan #define MAGENTA 0xF81F #define 0xFFE0 gele #define WHITE 0xFFFF
SWTFT tft;
#define BOXSIZE 40 #define PENRADIUS 3 int oldcolor, currentcolor;
void setup(void) {Serial.begin(9600); Serial.println(F("Paint!")); TFT.reset(); uint16_t id = tft.readID();
Serial.Print (F ("LCD driver chip:")); Serial.println (id, HEX);
TFT.begin(Identifier);
tft.fillScreen(BLACK);
tft.fillRect (0, 0, BOXSIZE, BOXSIZE, rood); tft.fillRect (BOXSIZE, 0, BOXSIZE, BOXSIZE, gele); tft.fillRect (BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, groen); tft.fillRect (BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, cyaan); tft.fillRect (BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, blauw); tft.fillRect (BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); tft.fillRect (BOXSIZE * 6, 0, BOXSIZE, BOXSIZE, witte); tft.drawRect (0, 0, BOXSIZE, BOXSIZE, witte); currentcolor = rood; pinMode (13, OUTPUT); }
#define MINPRESSURE 10 #define MAXPRESSURE 1000
void loop {digitalWrite (13, hoge); / / onlangs punt werd hernoemd tot TSPoint in de bibliotheek van TouchScreen / / als u een oudere versie van de bibliotheek gebruikt, gebruik de / / commentaar definitie in plaats daarvan. Punt p = ts.getPoint(); TSPoint p = ts.getPoint(); digitalWrite (13, laag);
Als deelt pennen, zult u moeten herstellen van de richtingen van de touchscreen pennen //pinMode (XP, uitvoer); pinMode (XM, uitvoer); pinMode (YP, uitvoer); pinMode (YM, uitvoer);
We hebben enkele minimale druk wij overwegen 'geldig' / / druk van 0 betekent geen dringende!
Als (p.z > MINPRESSURE & & p.z < MAXPRESSURE) {/ * Serial.print ("X ="); Serial.Print(p.x); Serial.Print ("\tY ="); Serial.Print(p.y); Serial.Print ("\tPressure ="); Serial.println(p.z); * / if (p.y < (TS_MINY-5)) {Serial.println("erase"); / / druk op de onderkant van het scherm te wissen van tft.fillRect (0, BOXSIZE, tft.width(), tft.height ()-BOXSIZE, zwarte);} / / schaal van 0 -> 1023 te tft.width p.x = tft.width ()-(kaart (p.x, TS_MINX, TS_MAXX, tft.width(), 0)); p.y = tft.height ()-(kaart (p.y, TS_MINY, TS_MAXY, tft.height(), 0)); / * Serial.print("("); Serial.Print(p.x); Serial.Print (","); Serial.Print(p.y); Serial.println(")"); * / if (p.y < BOXSIZE) {oldcolor = currentcolor;
Als (p.x < BOXSIZE) {currentcolor = rood; tft.drawRect (0, 0, BOXSIZE, BOXSIZE, witte);} anders als (p.x < BOXSIZE * 2) {currentcolor = geel; tft.drawRect (BOXSIZE, 0, BOXSIZE, BOXSIZE, witte);} anders als (p.x < BOXSIZE * 3) {currentcolor = groen; tft.drawRect (BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, witte);} anders als (p.x < BOXSIZE * 4) {currentcolor = cyaan; tft.drawRect (BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, witte);} anders als (p.x < BOXSIZE * 5) {currentcolor = blauw; tft.drawRect(BOXSIZE*4 0, BOXSIZE, BOXSIZE, WITTE); } else if (p.x < BOXSIZE * 6) {currentcolor = MAGENTA; tft.drawRect (BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, witte);}
Als (oldcolor! = currentcolor) {als (oldcolor == RED) tft.fillRect (0, 0, BOXSIZE, BOXSIZE, rood); als (oldcolor == geel) tft.fillRect (BOXSIZE, 0, BOXSIZE, BOXSIZE, gele); als (oldcolor == groen) tft.fillRect (BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, groen); als (oldcolor == cyaan) tft.fillRect (BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, cyaan); als (oldcolor == blauw) tft.fillRect (BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, blauw); als (oldcolor == MAGENTA) tft.fillRect (BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA);}} Als (((p.y-PENRADIUS) > BOXSIZE) & & ((p.y+PENRADIUS) < tft.height())) {tft.fillCircle (p.x, p.y, PENRADIUS, currentcolor);}} }