• Stars
    star
    208
  • Rank 189,015 (Top 4 %)
  • Language
    C++
  • Created about 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Touchscreen Arduino Library for XPT2046 Touch Controller Chip

XPT2046 Touchscreen Arduino Library

XPT2046_Touchscreen is a library for the XPT2046 resistive touchscreen controllers used on many low cost TFT displays.

ILI9431Test Example Program

Setup Functions

First, create an instance of the library for your touchscreen. The digital pin used for chip select is required. The normal MISO, MOSI and SCK pins will be used automatically.

#define CS_PIN  8
XPT2046_Touchscreen ts(CS_PIN);

The use of the Touch interrupt pin can be optionally specified. If the Teensy pin specified is actively connected to the T_IRQ display pin then the normal touch calls will respond, but can be called more often as each call returns without hardware access when no interrupt was recorded.

#define TIRQ_PIN  2
XPT2046_Touchscreen ts(CS_PIN, TIRQ_PIN);

In setup(), use the begin() function to initialize the touchscreen, and optionally use setRotation(n), where n is 0 to 3, matching the rotation setting in ILI9341_t3, Adafruit_ILI9341 or other Adafruit compatible TFT libraries.

  ts.begin();
  ts.setRotation(1);

The begin() function can also specify communication on a different SPI port.

  ts.begin(SPI1); // use SPI1 rather than SPI

Reading Touch Info

The touched() function tells if the display is currently being touched, returning true or false.

  if (ts.touched()) {
    // do something....
  }

You can read the touch coordinates with readData()

  uint16_t x, y, z;
  ts.readData(&x, &y, &z);

or with getPoint(), which returns a TS_Point object:

  TS_Point p = ts.getPoint();
  Serial.print("x = ");
  Serial.print(p.x);
  Serial.print(", y = ");
  Serial.print(p.y);

The Z coordinate represents the amount of pressure applied to the screen.

Adafruit Library Compatibility

XPT2046_Touchscreen is meant to be a compatible with sketches written for Adafruit_STMPE610, offering the same functions, parameters and numerical ranges as Adafruit's library.

Using The Interrupt Pin : Built in support when connected nothing else is needed. When specified as above

no SPI calls are made unless a Touch was detected. On normal connections - this means the Teensy LED won't blink on every touch query.

Using The Interrupt Pin : Custom use would preclude the normal built in usage. The warning below is justified.

The XPT2046 chip has an interrupt output, which is typically labeled T_IRQ on many low cost TFT displays. No special software support is needed in this library. The interrupt pin always outputs a digital signal related to the touch controller signals, which is LOW when the display is touched. It also is driven low while software reads the touch position.

The interrupt can be used as a wakeup signal, if you put your microcontroller into a deep sleep mode. Normally, you would stop reading the touch data, then enable the interrupt pin with attachInterrupt(), and then configure your processor to wake when the interrupt occurs, before enter a deep sleep mode. Upon waking, you would normally disable the interrupt before reading the display, to prevent false interrupts caused by the process of reading touch positions.

You can also use the interrupt to respond to touch events. Setup might look similar to this:

  SPI.usingInterrupt(digitalPinToInterrupt(pin))
  attachInterrupt(digitalPinToInterrupt(pin), myFunction, FALLING);

However, inside your interrupt function, if the display is no longer being touched, any attempt to read the touch position will cause the interrupt pin to create another falling edge. This can lead to an infinite loop of falsely triggered interrupts. Special care is needed to avoid triggering more interrupts on the low signal due to reading the touch position.

For most applications, regularly reading the touch position from the main program is much simpler.

More Repositories

1

Time

Time library for Arduino
C++
1,246
star
2

Audio

Teensy Audio Library
C++
955
star
3

OneWire

Library for Dallas/Maxim 1-Wire Chips
C++
542
star
4

Encoder

Quadrature Encoder Library for Arduino
C++
489
star
5

cores

Teensy Core Libraries for Arduino
C
474
star
6

TimerOne

TimerOne Library with optimization and expanded hardware support
C++
438
star
7

CapacitiveSensor

Detect touch or proximity by capacitve sensing
C++
360
star
8

teensy_loader_cli

Command line Teensy Loader
C
316
star
9

AltSoftSerial

Software emulated serial using hardware timers for improved compatibility
C++
308
star
10

SerialFlash

Library for using SPI Flash memory with a filesystem-like interface
C++
296
star
11

OctoWS2811

Control thousands of WS2811/2812 LEDs at video refresh speeds
C++
247
star
12

RadioHead

Version of RadioHead library for Teensy boards
C++
237
star
13

ILI9341_t3

Optimized ILI9341 TFT Library
C
224
star
14

USBHost_t36

USB Host Library for Teensy 3.6 and 4.0
C++
167
star
15

TimeAlarms

Time library add-on, schedule alarms to occur at specific dates/times
C++
159
star
16

MahonyAHRS

C++
152
star
17

WS2812Serial

Non-Blocking WS2812 LED Library
C++
137
star
18

FreqCount

Measures the frequency of a signal by counting the number of pulses during a fixed time.
C
136
star
19

PS2Keyboard

PS/2 Keyboard Library for Arduino
C++
132
star
20

DS1307RTC

Use a DS1307 Real Time Clock chip with the Time library
C++
127
star
21

Ethernet

Ethernet library for Teensy (Wiznet W5100 / W5200 / W5500)
C++
125
star
22

SPI

SPI library for Teensy & Arduino IDE
C++
119
star
23

MsTimer2

Run a function using a timer
C++
104
star
24

CoreMark

Benchmark CPU Performance on Arduino Compatible Boards
C
104
star
25

DmxSimple

C++
90
star
26

EEPROM

C++
76
star
27

TimerThree

TimerThree Library with optimization and expanded hardware support
C++
75
star
28

LittleFS

C
74
star
29

Tlc5940

16 channel PWM LED driver based on the Texas Instruments TLC5940 chip.
C
71
star
30

SD

C++
67
star
31

FreqMeasure

Measures the elapsed time during each cycle of an input frequency.
C
64
star
32

MotionCal

Motion Sensor Calibration Tool
C
63
star
33

NXPMotionSense

NXP Motion Sensors for Teensy and Arduino
C++
61
star
34

ILI9341_fonts

Extra fonts for use with ILI9341_t3
C
50
star
35

hid_listen

C
47
star
36

PulsePosition

Multiple High-Res Input & Output PPM Encoded Signal Streams on Teensy 4.x, 3.x & LC
C++
45
star
37

FreqMeasureMulti

Measures the elapsed time during each cycle of up to 8 input frequencies.
C++
34
star
38

ST7735_t3

Teensy 3.x Optimized Version of Adafruit_ST7735 (1.8 inch TFT Display)
C
33
star
39

X-Plane_Plugin

TeensyControls Plugin for X-Plane Flight Simulator
C
32
star
40

O_C_T41

Ornament and Crime Optimized With Teensy 4.1
C++
26
star
41

PWMServo

Control RC Servo motors with interrupt-resilient PWM
C++
25
star
42

MakerFaire2017

Monolith Synth
C++
24
star
43

Bridge

Communicate between Teensy & Raspberry Pi - similar to Arduino Yun
Arduino
24
star
44

RSA_signature_speed

Simple CPU speed benchmark
C
24
star
45

ARM-Toolchain

Shell
23
star
46

teensy41_psram_memtest

C++
22
star
47

Teensyduino_Examples

Examples for Teensyduino, installed into Arduino's File > Examples > Teensy menu
C++
22
star
48

teensy41_extram

C
20
star
49

LedDisplay

Print text to an Avago HCMS-29xx LED display
C++
20
star
50

Wire

Wire library used on Teensy boards
C++
20
star
51

FrequencyTimer2

Create a zero jitter frequency output, and run your own function on each period.
C++
19
star
52

teensy41_ethernet

C
15
star
53

CryptoAccel

Assembly
15
star
54

TouchGuitar

Arduino
13
star
55

arm_math

C
11
star
56

k66_ethernet

Experiments with K66 Ethernet
Arduino
10
star
57

USB-Serial-Print-Speed-Test

How many lines/second can your Arduino print to the serial monitor?
C++
10
star
58

AVR_DTMF

Efficient 8 bit AVR-based DTMF Decoding
C
10
star
59

Tectonic_Pitch_Shift

C++
9
star
60

FreqCountMany

Measure 10 frequencies with Teensy 4.0 & 4.1
C++
9
star
61

ARM_Toolchain_2014q1_Source

GCC ARM Toolchain Source - for running Arduino on Raspberry Pi
Shell
9
star
62

secure_plugin

Teensy 4 Security plugin for Arduino IDE
Java
8
star
63

SoundfontDecoder

Python
8
star
64

ST7789_t3

C++
7
star
65

Arduino-1.8.9-Teensyduino

Java
7
star
66

ht1632c

Objective-C
7
star
67

Arduino-1.8.5-Teensyduino

C
7
star
68

TopOctaveGenerator

C++
6
star
69

Verify_All_Arduino_Libraries

Perl
6
star
70

teensy_size

C
6
star
71

Arduino-1.8.13-Teensyduino

Java
5
star
72

Arduino-examples-for-Teensyduino

The slightly modified examples for Teensyduino
Arduino
5
star
73

TalkieKeyboards

Five 104-key keyboards trigger speaking 520 words
C
5
star
74

LargeSamplePlayer

C++
5
star
75

Arduino-1.6.0-Teensyduino

C
5
star
76

USB_Tester

C++
5
star
77

Phazerville-Screen-Capture

C++
5
star
78

hab_tests

C
5
star
79

teardown2018

LED Visualization Shown at Teardown 2018 Hardware Conference
C++
5
star
80

Arduino-1.8.19-Teensyduino

Java
4
star
81

timecode_now

C
4
star
82

Arduino-1.8.8-Teensyduino

Java
4
star
83

Arduino-1.8.10-Teensyduino

Java
4
star
84

Lighting_Controller

C++
4
star
85

SerialDiscovery_JSON

C
4
star
86

Arduino-1.8.7-Teensyduino

Java
3
star
87

MyFault

C
3
star
88

Arduino-1.8.12-Teensyduino

Java
3
star
89

ARM_Toolchain_2016q3_Source

Shell
3
star
90

precompile_helper

Help arduino-builder to generate a precompiled Arduino.h header, to speed up compiling Arduino sketches
C
3
star
91

Arduino-1.6.4-Teensyduino

C
3
star
92

AudioWorkshop2015

Audio Workshop at Hackaday Supercon 2015
3
star
93

Arduino-1.8.14-Teensyduino

Java
3
star
94

antplus

Stand-alone Ant Plus code from Michael McElligott
C++
3
star
95

Video_Start_Button

C
2
star
96

Noritake_VFD_CUY

Noritake_VFD_CUY: C++ code library and demo files
C++
2
star
97

Arduino_Dev_List_Topics

2
star
98

Servo

C++
2
star
99

Magnetometers_Test

Simple Magnetometer Testing
C++
2
star
100

StepperPulse

Experiments with DMA to efficiently generate stepper pulse & direction
Arduino
2
star