Fixed PROGMEM string-printing issues

This commit is contained in:
Phillip Burgess
2012-11-21 16:51:07 -08:00
parent f74dd70f2c
commit e4b0fa892d
7 changed files with 175 additions and 257 deletions
+41 -27
View File
@@ -45,12 +45,12 @@ Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
Serial.begin(9600);
Serial.println("TFT LCD test");
progmemPrintln(PSTR("TFT LCD test"));
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
Serial.println("Using Adafruit 2.8\" TFT Arduino Shield Pinout");
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
Serial.println("Using Adafruit 2.8\" TFT Breakout Board Pinout");
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif
tft.reset();
@@ -58,75 +58,75 @@ void setup(void) {
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println(PSTR("Found ILI9325 LCD driver"));
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println(PSTR("Found ILI9328 LCD driver"));
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println(PSTR("Found HX8347G LCD driver"));
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print(PSTR("Unknown LCD driver chip: "));
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
Serial.println(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(PSTR("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(PSTR("If using the breakout board, it should NOT be #defined!"));
Serial.println(PSTR("Also if using the breakout, double-check that all wiring"));
Serial.println(PSTR("matches the tutorial."));
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
return;
}
tft.begin(identifier);
Serial.println("Benchmark Time (microseconds)");
progmemPrintln(PSTR("Benchmark Time (microseconds)"));
Serial.print("Screen fill ");
progmemPrint(PSTR("Screen fill "));
Serial.println(testFillScreen());
delay(500);
Serial.print("Text ");
progmemPrint(PSTR("Text "));
Serial.println(testText());
delay(3000);
Serial.print("Lines ");
progmemPrint(PSTR("Lines "));
Serial.println(testLines(CYAN));
delay(500);
Serial.print("Horiz/Vert Lines ");
progmemPrint(PSTR("Horiz/Vert Lines "));
Serial.println(testFastLines(RED, BLUE));
delay(500);
Serial.print("Rectangles (outline) ");
progmemPrint(PSTR("Rectangles (outline) "));
Serial.println(testRects(GREEN));
delay(500);
Serial.print("Rectangles (filled) ");
progmemPrint(PSTR("Rectangles (filled) "));
Serial.println(testFilledRects(YELLOW, MAGENTA));
delay(500);
Serial.print("Circles (filled) ");
progmemPrint(PSTR("Circles (filled) "));
Serial.println(testFilledCircles(10, MAGENTA));
Serial.print("Circles (outline) ");
progmemPrint(PSTR("Circles (outline) "));
Serial.println(testCircles(10, WHITE));
delay(500);
Serial.print("Triangles (outline) ");
progmemPrint(PSTR("Triangles (outline) "));
Serial.println(testTriangles());
delay(500);
Serial.print("Triangles (filled) ");
progmemPrint(PSTR("Triangles (filled) "));
Serial.println(testFilledTriangles());
delay(500);
Serial.print("Rounded rects (outline) ");
progmemPrint(PSTR("Rounded rects (outline) "));
Serial.println(testRoundRects());
delay(500);
Serial.print("Rounded rects (filled) ");
progmemPrint(PSTR("Rounded rects (filled) "));
Serial.println(testFilledRoundRects());
delay(500);
Serial.println("Done!");
progmemPrintln(PSTR("Done!"));
}
void loop(void) {
@@ -377,3 +377,17 @@ unsigned long testFilledRoundRects() {
return micros() - start;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+29 -15
View File
@@ -45,12 +45,12 @@ Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
Serial.begin(9600);
Serial.println("TFT LCD test");
progmemPrintln(PSTR("TFT LCD test"));
#ifdef USE_ADAFRUIT_SHIELD_PINOUT
Serial.println("Using Adafruit 2.8\" TFT Arduino Shield Pinout");
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
#else
Serial.println("Using Adafruit 2.8\" TFT Breakout Board Pinout");
progmemPrintln(PSTR("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
#endif
tft.reset();
@@ -58,20 +58,20 @@ void setup(void) {
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println("Found ILI9325 LCD driver");
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println("Found ILI9328 LCD driver");
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println("Found HX8347G LCD driver");
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print("Unknown LCD driver chip: ");
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
Serial.println("If using the Adafruit 2.8\" TFT Arduino shield, the line:");
Serial.println(" #define USE_ADAFRUIT_SHIELD_PINOUT");
Serial.println("should appear in the library header (Adafruit_TFT.h).");
Serial.println("If using the breakout board, it should NOT be #defined!");
Serial.println("Also if using the breakout, double-check that all wiring");
Serial.println("matches the tutorial.");
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
return;
}
@@ -79,8 +79,8 @@ void setup(void) {
tft.fillScreen(BLACK);
Serial.println("This is a test of the rotation capabilities of the TFT library!");
Serial.println("Press <SEND> (or type a character) to advance");
progmemPrintln(PSTR("This is a test of the rotation capabilities of the TFT library!"));
progmemPrintln(PSTR("Press <SEND> (or type a character) to advance"));
}
void loop(void) {
@@ -216,3 +216,17 @@ void rotatePixel(void) {
tft.setRotation(tft.getRotation()+1);
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+35 -22
View File
@@ -48,31 +48,31 @@ void setup()
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println(PSTR("Found ILI9325 LCD driver"));
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println(PSTR("Found ILI9328 LCD driver"));
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println(PSTR("Found HX8347G LCD driver"));
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print(PSTR("Unknown LCD driver chip: "));
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
Serial.println(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(PSTR("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(PSTR("If using the breakout board, it should NOT be #defined!"));
Serial.println(PSTR("Also if using the breakout, double-check that all wiring"));
Serial.println(PSTR("matches the tutorial."));
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
return;
}
tft.begin(identifier);
Serial.print("Initializing SD card...");
progmemPrint(PSTR("Initializing SD card..."));
if (!SD.begin(SD_CS)) {
Serial.println("failed!");
progmemPrintln(PSTR("failed!"));
return;
}
Serial.println("OK!");
progmemPrintln(PSTR("OK!"));
bmpDraw("woof.bmp", 0, 0);
delay(1000);
@@ -121,32 +121,32 @@ void bmpDraw(char *filename, int x, int y) {
if((x >= tft.width()) || (y >= tft.height())) return;
Serial.println();
Serial.print("Loading image '");
progmemPrint(PSTR("Loading image '"));
Serial.print(filename);
Serial.println('\'');
// Open requested file on SD card
if ((bmpFile = SD.open(filename)) == NULL) {
Serial.print("File not found");
progmemPrintln(PSTR("File not found"));
return;
}
// Parse BMP header
if(read16(bmpFile) == 0x4D42) { // BMP signature
Serial.print("File size: "); Serial.println(read32(bmpFile));
progmemPrint(PSTR("File size: ")); Serial.println(read32(bmpFile));
(void)read32(bmpFile); // Read & ignore creator bytes
bmpImageoffset = read32(bmpFile); // Start of image data
Serial.print("Image Offset: "); Serial.println(bmpImageoffset, DEC);
progmemPrint(PSTR("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
// Read DIB header
Serial.print("Header size: "); Serial.println(read32(bmpFile));
progmemPrint(PSTR("Header size: ")); Serial.println(read32(bmpFile));
bmpWidth = read32(bmpFile);
bmpHeight = read32(bmpFile);
if(read16(bmpFile) == 1) { // # planes -- must be '1'
bmpDepth = read16(bmpFile); // bits per pixel
Serial.print("Bit Depth: "); Serial.println(bmpDepth);
progmemPrint(PSTR("Bit Depth: ")); Serial.println(bmpDepth);
if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
goodBmp = true; // Supported BMP format -- proceed!
Serial.print("Image size: ");
progmemPrint(PSTR("Image size: "));
Serial.print(bmpWidth);
Serial.print('x');
Serial.println(bmpHeight);
@@ -210,7 +210,7 @@ void bmpDraw(char *filename, int x, int y) {
if(lcdidx > 0) {
tft.pushColors(lcdbuffer, lcdidx, first);
}
Serial.print("Loaded in ");
progmemPrint(PSTR("Loaded in "));
Serial.print(millis() - startTime);
Serial.println(" ms");
} // end goodBmp
@@ -218,7 +218,7 @@ void bmpDraw(char *filename, int x, int y) {
}
bmpFile.close();
if(!goodBmp) Serial.println("BMP format not recognized.");
if(!goodBmp) progmemPrintln(PSTR("BMP format not recognized."));
}
// These read 16- and 32-bit types from the SD card file.
@@ -241,3 +241,16 @@ uint32_t read32(File f) {
return result;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+32 -19
View File
@@ -24,31 +24,31 @@ void setup()
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println(PSTR("Found ILI9325 LCD driver"));
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println(PSTR("Found ILI9328 LCD driver"));
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println(PSTR("Found HX8347G LCD driver"));
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print(PSTR("Unknown LCD driver chip: "));
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
Serial.println(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
Serial.println(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
Serial.println(PSTR("should appear in the library header (Adafruit_TFT.h)."));
Serial.println(PSTR("If using the breakout board, it should NOT be #defined!"));
Serial.println(PSTR("Also if using the breakout, double-check that all wiring"));
Serial.println(PSTR("matches the tutorial."));
progmemPrintln(PSTR("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
progmemPrintln(PSTR(" #define USE_ADAFRUIT_SHIELD_PINOUT"));
progmemPrintln(PSTR("should appear in the library header (Adafruit_TFT.h)."));
progmemPrintln(PSTR("If using the breakout board, it should NOT be #defined!"));
progmemPrintln(PSTR("Also if using the breakout, double-check that all wiring"));
progmemPrintln(PSTR("matches the tutorial."));
return;
}
tft.begin(identifier);
Serial.print("Initializing SD card...");
progmemPrint(PSTR("Initializing SD card..."));
if (!SD.begin(SD_CS)) {
Serial.println("failed!");
progmemPrintln(PSTR("failed!"));
return;
}
Serial.println("OK!");
progmemPrintln(PSTR("OK!"));
spi_save = SPCR;
bmpDraw("woof.bmp", 0, 0);
@@ -109,21 +109,21 @@ void bmpDraw(char *filename, int x, int y) {
// Parse BMP header
if(read16(bmpFile) == 0x4D42) { // BMP signature
Serial.print("File size: "); Serial.println(read32(bmpFile));
progmemPrint(PSTR("File size: ")); Serial.println(read32(bmpFile));
(void)read32(bmpFile); // Read & ignore creator bytes
bmpImageoffset = read32(bmpFile); // Start of image data
Serial.print("Image Offset: "); Serial.println(bmpImageoffset, DEC);
progmemPrint(PSTR("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
// Read DIB header
Serial.print("Header size: "); Serial.println(read32(bmpFile));
progmemPrint(PSTR("Header size: ")); Serial.println(read32(bmpFile));
bmpWidth = read32(bmpFile);
bmpHeight = read32(bmpFile);
if(read16(bmpFile) == 1) { // # planes -- must be '1'
bmpDepth = read16(bmpFile); // bits per pixel
Serial.print("Bit Depth: "); Serial.println(bmpDepth);
progmemPrint(PSTR("Bit Depth: ")); Serial.println(bmpDepth);
if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed
goodBmp = true; // Supported BMP format -- proceed!
Serial.print("Image size: ");
progmemPrint(PSTR("Image size: "));
Serial.print(bmpWidth);
Serial.print('x');
Serial.println(bmpHeight);
@@ -192,7 +192,7 @@ void bmpDraw(char *filename, int x, int y) {
SPCR = 0;
tft.pushColors(lcdbuffer, lcdidx, first);
}
Serial.print("Loaded in ");
progmemPrint(PSTR("Loaded in "));
Serial.print(millis() - startTime);
Serial.println(" ms");
} // end goodBmp
@@ -223,3 +223,16 @@ uint32_t read32(File f) {
return result;
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+19 -5
View File
@@ -60,20 +60,20 @@ int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
Serial.println("Paint!");
progmemPrintln(PSTR("Paint!"));
tft.reset();
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println("Found ILI9325 LCD driver");
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println("Found ILI9328 LCD driver");
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println("Found HX8347G LCD driver");
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print("Unknown LCD driver chip: ");
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
return;
}
@@ -171,3 +171,17 @@ void loop()
}
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
+19 -5
View File
@@ -49,20 +49,20 @@ int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
Serial.println("Paint!");
progmemPrintln(PSTR("Paint!"));
tft.reset();
uint16_t identifier = tft.readID();
if(identifier == 0x9325) {
Serial.println("Found ILI9325 LCD driver");
progmemPrintln(PSTR("Found ILI9325 LCD driver"));
} else if(identifier == 0x9328) {
Serial.println("Found ILI9328 LCD driver");
progmemPrintln(PSTR("Found ILI9328 LCD driver"));
} else if(identifier == 0x7575) {
Serial.println("Found HX8347G LCD driver");
progmemPrintln(PSTR("Found HX8347G LCD driver"));
} else {
Serial.print("Unknown LCD driver chip: ");
progmemPrint(PSTR("Unknown LCD driver chip: "));
Serial.println(identifier, HEX);
return;
}
@@ -160,3 +160,17 @@ void loop()
}
}
}
// Copy string from flash to serial port
// Source string MUST be inside a PSTR() declaration!
void progmemPrint(const char *str) {
char c;
while(c = pgm_read_byte(str++)) Serial.print(c);
}
// Same as above, with trailing newline
void progmemPrintln(const char *str) {
progmemPrint(str);
Serial.println();
}
-164
View File
@@ -1,164 +0,0 @@
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>
#if not defined USE_ADAFRUIT_SHIELD_PINOUT
#error "For use with the shield, make sure to #define USE_ADAFRUIT_SHIELD_PINOUT in the TFTLCD.h library file"
#endif
// These are the pins for the shield!
#define YP A1 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 7 // can be a digital pin
#define XP 6 // can be a digital pin
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
// Color definitions
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, 0);
#define BOXSIZE 40
#define PENRADIUS 4
int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
Serial.println("Paint!");
tft.reset();
uint16_t identifier = tft.readRegister(0x0);
if (identifier == 0x9325) {
Serial.println("Found ILI9325");
} else if (identifier == 0x9328) {
Serial.println("Found ILI9328");
} else if (identifier == 0x7575) {
Serial.println("Found HX8347G");
} else {
Serial.print("Unknown driver chip ");
Serial.println(identifier, HEX);
while (1);
}
tft.begin(identifier);
tft.fillScreen(BLACK);
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, GREEN);
tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, CYAN);
tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, BLUE);
tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, MAGENTA);
// tft.fillRect(BOXSIZE*6, 0, BOXSIZE, BOXSIZE, WHITE);
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
currentcolor = RED;
pinMode(13, OUTPUT);
}
#define MINPRESSURE 10
#define MAXPRESSURE 1000
void loop()
{
digitalWrite(13, HIGH);
Point p = ts.getPoint();
digitalWrite(13, LOW);
// if you're sharing pins, you'll need to fix the directions of the touchscreen pins!
//pinMode(XP, OUTPUT);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
//pinMode(YM, OUTPUT);
// we have some minimum pressure we consider 'valid'
// pressure of 0 means no pressing!
if (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");
// press the bottom of the screen to erase
tft.fillRect(0, BOXSIZE, tft.width(), tft.height()-BOXSIZE, BLACK);
}
// turn from 0->1023 to tft.width
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(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;
if (p.x < BOXSIZE) {
currentcolor = RED;
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
}
else if (p.x < BOXSIZE*2) {
currentcolor = YELLOW;
tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE);
}
else if (p.x < BOXSIZE*3) {
currentcolor = GREEN;
tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, WHITE);
}
else if (p.x < BOXSIZE*4) {
currentcolor = CYAN;
tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, WHITE);
}
else if (p.x < BOXSIZE*5) {
currentcolor = BLUE;
tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, WHITE);
}
else if (p.x < BOXSIZE*6) {
currentcolor = MAGENTA;
tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, WHITE);
}
if (oldcolor != currentcolor) {
if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
if (oldcolor == GREEN) tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, GREEN);
if (oldcolor == CYAN) tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, CYAN);
if (oldcolor == BLUE) tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, BLUE);
if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, MAGENTA);
}
}
if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) {
tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
}
}
}