-
Notifications
You must be signed in to change notification settings - Fork 775
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2619 from adafruit/tft_shield
adding examples for 2.8 tft update
- Loading branch information
Showing
8 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
130 changes: 130 additions & 0 deletions
130
TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
// SPDX-FileCopyrightText: 2023 Limor Fried/Ladyada for Adafruit Industries | ||
// SPDX-License-Identifier: MIT | ||
|
||
/*************************************************** | ||
This is our touchscreen painting example for the updated Adafruit | ||
ILI9341 Shield with TSC2007 | ||
----> http://www.adafruit.com/products/1651 | ||
Check out the links above for our tutorials and wiring diagrams | ||
These displays use SPI to communicate, 4 or 5 pins are required to | ||
interface (RST is optional) | ||
Adafruit invests time and resources providing this open source code, | ||
please support Adafruit and open-source hardware by purchasing | ||
products from Adafruit! | ||
Written by Limor Fried/Ladyada for Adafruit Industries. | ||
MIT license, all text above must be included in any redistribution | ||
****************************************************/ | ||
|
||
|
||
#include <Adafruit_GFX.h> | ||
#include <SPI.h> | ||
#include <Wire.h> | ||
#include <Adafruit_ILI9341.h> | ||
#include <Adafruit_TSC2007.h> | ||
|
||
// This is calibration data for the raw touch data to the screen coordinates | ||
#define TS_MINX 150 | ||
#define TS_MINY 130 | ||
#define TS_MAXX 3800 | ||
#define TS_MAXY 4000 | ||
#define TS_MIN_PRESSURE 200 | ||
|
||
Adafruit_TSC2007 ts; | ||
|
||
// The display also uses hardware SPI, plus #9 & #10 | ||
#define TFT_CS 10 | ||
#define TFT_DC 9 | ||
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); | ||
|
||
// Size of the color selection boxes and the paintbrush size | ||
#define BOXSIZE 40 | ||
#define PENRADIUS 3 | ||
int oldcolor, currentcolor; | ||
|
||
void setup(void) { | ||
|
||
Serial.begin(115200); | ||
// while (!Serial) delay(10); | ||
|
||
tft.begin(); | ||
|
||
if (!ts.begin()) { | ||
Serial.println("Couldn't start touchscreen controller"); | ||
while (1); | ||
} | ||
Serial.println("Touchscreen started"); | ||
|
||
tft.fillScreen(ILI9341_BLACK); | ||
|
||
// make the color selection boxes | ||
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); | ||
tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); | ||
tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); | ||
tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); | ||
tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); | ||
tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); | ||
|
||
// select the current color 'red' | ||
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
currentcolor = ILI9341_RED; | ||
} | ||
|
||
void loop(){ | ||
uint16_t x, y, z1, z2; | ||
if (ts.read_touch(&x, &y, &z1, &z2) && (z1 > TS_MIN_PRESSURE)) { | ||
|
||
Serial.print("Touch point: ("); | ||
Serial.print(x); Serial.print(", "); | ||
Serial.print(y); Serial.print(", "); | ||
Serial.print(z1); Serial.print(" / "); | ||
Serial.print(z2); Serial.println(")"); | ||
|
||
// Scale from ~0->4000 to tft.width using the calibration #'s | ||
x = map(x, TS_MINX, TS_MAXX, 0, tft.width()); | ||
y = map(y, TS_MINY, TS_MAXY, 0, tft.height()); | ||
|
||
if (y < BOXSIZE) { | ||
oldcolor = currentcolor; | ||
|
||
if (x < BOXSIZE) { | ||
currentcolor = ILI9341_RED; | ||
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} else if (x < BOXSIZE*2) { | ||
currentcolor = ILI9341_YELLOW; | ||
tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} else if (x < BOXSIZE*3) { | ||
currentcolor = ILI9341_GREEN; | ||
tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} else if (x < BOXSIZE*4) { | ||
currentcolor = ILI9341_CYAN; | ||
tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} else if (x < BOXSIZE*5) { | ||
currentcolor = ILI9341_BLUE; | ||
tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} else if (x < BOXSIZE*6) { | ||
currentcolor = ILI9341_MAGENTA; | ||
tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); | ||
} | ||
|
||
if (oldcolor != currentcolor) { | ||
if (oldcolor == ILI9341_RED) | ||
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); | ||
if (oldcolor == ILI9341_YELLOW) | ||
tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); | ||
if (oldcolor == ILI9341_GREEN) | ||
tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); | ||
if (oldcolor == ILI9341_CYAN) | ||
tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); | ||
if (oldcolor == ILI9341_BLUE) | ||
tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); | ||
if (oldcolor == ILI9341_MAGENTA) | ||
tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); | ||
} | ||
} | ||
if (((y-PENRADIUS) > BOXSIZE) && ((y+PENRADIUS) < tft.height())) { | ||
tft.fillCircle(x, y, PENRADIUS, currentcolor); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries | ||
# SPDX-License-Identifier: MIT | ||
|
||
""" | ||
This test will initialize the display using displayio and display | ||
a bitmap image. The image advances when the touch screen is touched. | ||
Pinouts are for the 2.8" TFT Shield | ||
""" | ||
import os | ||
import board | ||
import displayio | ||
import adafruit_ili9341 | ||
import adafruit_tsc2007 | ||
|
||
# Release any resources currently in use for the displays | ||
displayio.release_displays() | ||
|
||
# Use Hardware SPI | ||
spi = board.SPI() | ||
|
||
# Use Software SPI if you have a shield with pins 11-13 jumpered | ||
# import busio | ||
# spi = busio.SPI(board.D11, board.D13) | ||
|
||
tft_cs = board.D10 | ||
tft_dc = board.D9 | ||
|
||
display_width = 320 | ||
display_height = 240 | ||
|
||
display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs) | ||
display = adafruit_ili9341.ILI9341(display_bus, width=display_width, height=display_height) | ||
|
||
i2c = board.I2C() | ||
|
||
irq_dio = None | ||
tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio) | ||
|
||
groups = [] | ||
images = [] | ||
for filename in os.listdir('/'): | ||
if filename.lower().endswith('.bmp') and not filename.startswith('.'): | ||
images.append("/"+filename) | ||
print(images) | ||
|
||
for i in range(len(images)): | ||
splash = displayio.Group() | ||
bitmap = displayio.OnDiskBitmap(images[i]) | ||
tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader) | ||
splash.append(tile_grid) | ||
groups.append(splash) | ||
|
||
index = 0 | ||
touch_state = False | ||
|
||
display.show(groups[index]) | ||
while True: | ||
if tsc.touched and not touch_state: | ||
point = tsc.touch | ||
touch_state = True | ||
if point["pressure"] < 200: # ignore touches with no 'pressure' as false | ||
continue | ||
print("Touchpoint: (%d, %d, %d)" % (point["x"], point["y"], point["pressure"])) | ||
# left side of the screen | ||
if point["y"] < 2000: | ||
index = (index - 1) % len(images) | ||
display.show(groups[index]) | ||
# right side of the screen | ||
else: | ||
index = (index + 1) % len(images) | ||
display.show(groups[index]) | ||
if not tsc.touched and touch_state: | ||
touch_state = False |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.