mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
Remove Adafruit Touchscreen
This commit is contained in:
parent
1cbeb1bc53
commit
702afb12e8
46
lib/TouchScreen/.github/ISSUE_TEMPLATE.md
vendored
46
lib/TouchScreen/.github/ISSUE_TEMPLATE.md
vendored
@ -1,46 +0,0 @@
|
|||||||
Thank you for opening an issue on an Adafruit Arduino library repository. To
|
|
||||||
improve the speed of resolution please review the following guidelines and
|
|
||||||
common troubleshooting steps below before creating the issue:
|
|
||||||
|
|
||||||
- **Do not use GitHub issues for troubleshooting projects and issues.** Instead use
|
|
||||||
the forums at http://forums.adafruit.com to ask questions and troubleshoot why
|
|
||||||
something isn't working as expected. In many cases the problem is a common issue
|
|
||||||
that you will more quickly receive help from the forum community. GitHub issues
|
|
||||||
are meant for known defects in the code. If you don't know if there is a defect
|
|
||||||
in the code then start with troubleshooting on the forum first.
|
|
||||||
|
|
||||||
- **If following a tutorial or guide be sure you didn't miss a step.** Carefully
|
|
||||||
check all of the steps and commands to run have been followed. Consult the
|
|
||||||
forum if you're unsure or have questions about steps in a guide/tutorial.
|
|
||||||
|
|
||||||
- **For Arduino projects check these very common issues to ensure they don't apply**:
|
|
||||||
|
|
||||||
- For uploading sketches or communicating with the board make sure you're using
|
|
||||||
a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes
|
|
||||||
very hard to tell the difference between a data and charge cable! Try using the
|
|
||||||
cable with other devices or swapping to another cable to confirm it is not
|
|
||||||
the problem.
|
|
||||||
|
|
||||||
- **Be sure you are supplying adequate power to the board.** Check the specs of
|
|
||||||
your board and plug in an external power supply. In many cases just
|
|
||||||
plugging a board into your computer is not enough to power it and other
|
|
||||||
peripherals.
|
|
||||||
|
|
||||||
- **Double check all soldering joints and connections.** Flakey connections
|
|
||||||
cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints.
|
|
||||||
|
|
||||||
- **Ensure you are using an official Arduino or Adafruit board.** We can't
|
|
||||||
guarantee a clone board will have the same functionality and work as expected
|
|
||||||
with this code and don't support them.
|
|
||||||
|
|
||||||
If you're sure this issue is a defect in the code and checked the steps above
|
|
||||||
please fill in the following fields to provide enough troubleshooting information.
|
|
||||||
You may delete the guideline and text above to just leave the following details:
|
|
||||||
|
|
||||||
- Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE**
|
|
||||||
|
|
||||||
- Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO
|
|
||||||
VERSION HERE**
|
|
||||||
|
|
||||||
- List the steps to reproduce the problem below (if possible attach a sketch or
|
|
||||||
copy the sketch code in too): **LIST REPRO STEPS BELOW**
|
|
26
lib/TouchScreen/.github/PULL_REQUEST_TEMPLATE.md
vendored
26
lib/TouchScreen/.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -1,26 +0,0 @@
|
|||||||
Thank you for creating a pull request to contribute to Adafruit's GitHub code!
|
|
||||||
Before you open the request please review the following guidelines and tips to
|
|
||||||
help it be more easily integrated:
|
|
||||||
|
|
||||||
- **Describe the scope of your change--i.e. what the change does and what parts
|
|
||||||
of the code were modified.** This will help us understand any risks of integrating
|
|
||||||
the code.
|
|
||||||
|
|
||||||
- **Describe any known limitations with your change.** For example if the change
|
|
||||||
doesn't apply to a supported platform of the library please mention it.
|
|
||||||
|
|
||||||
- **Please run any tests or examples that can exercise your modified code.** We
|
|
||||||
strive to not break users of the code and running tests/examples helps with this
|
|
||||||
process.
|
|
||||||
|
|
||||||
Thank you again for contributing! We will try to test and integrate the change
|
|
||||||
as soon as we can, but be aware we have many GitHub repositories to manage and
|
|
||||||
can't immediately respond to every request. There is no need to bump or check in
|
|
||||||
on a pull request (it will clutter the discussion of the request).
|
|
||||||
|
|
||||||
Also don't be worried if the request is closed or not integrated--sometimes the
|
|
||||||
priorities of Adafruit's GitHub code (education, ease of use) might not match the
|
|
||||||
priorities of the pull request. Don't fret, the open source community thrives on
|
|
||||||
forks and GitHub makes it easy to keep your changes in a forked repo.
|
|
||||||
|
|
||||||
After reviewing the guidelines above you can delete this text from the pull request.
|
|
@ -1,52 +0,0 @@
|
|||||||
# Adafruit TouchScreen with mod for ESP32 UNO
|
|
||||||
|
|
||||||
This is the 4-wire resistive touch screen firmware for Arduino. Works with all Arduinos and Teensy
|
|
||||||
|
|
||||||
|
|
||||||
To install, click DOWNLOAD SOURCE in the top right corner, and rename the uncompressed folder "TouchScreen". See our tutorial at http://www.ladyada.net/library/arduino/libraries.html on Arduino Library installation
|
|
||||||
|
|
||||||
Added modification to allow the 4-wire resistive touchscreen of MCU Friend LCDs with parallel data interfaces to be used with ESP32 UNO style boards whilst WiFi is enabled. Tested on a red board MCU Friend with default touchscreen wiring.
|
|
||||||
|
|
||||||
|
|
||||||
## Reason for Modification
|
|
||||||
|
|
||||||
ESP32 WiFi removes access to ADC2 channel so pins 4 and 15 attached to the touchscreen no longer have analog input capability. Pin 15 already shares a connection with analog pin 35, so an additional connection is made between pin 4 and analog pin 39. Pins 35 and 39 now provide the analog input. Pins 35 and 39 are input only so always present a high impedance to avoid the risk of two outputs shorting.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
An extra wiring mod is needed in addition to those shown in the [TFT_eSPI](https://github.com/Bodmer/TFT_eSPI) instructions, but do not affect the software functionality or configuration.
|
|
||||||
|
|
||||||
Wiring for ESP UNO type board, with extra wire shown in green:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
Download and install the library using your IDE, eg Arduino.
|
|
||||||
The modification uses conditional compilation. To enable the changes, modify TouchScreen.h to uncomment #define ESP32_WIFI_TOUCH
|
|
||||||
|
|
||||||
```
|
|
||||||
// ESP32 specific
|
|
||||||
//#define ESP32_WIFI_TOUCH // uncomment to use parallel MCU Friend LCD touchscreen with ESP32 UNO Wifi
|
|
||||||
#ifdef ESP32
|
|
||||||
#define ADC_MAX 4095 // maximum value for ESP32 ADC (default 11db, 12 bits)
|
|
||||||
#define aXM 35 // analog input pin connected to LCD_RS
|
|
||||||
#define aYP 39 // analog input pin connected to LCD_WR
|
|
||||||
#else
|
|
||||||
#define ADC_MAX 1023 // Arduino
|
|
||||||
#endif
|
|
||||||
#define NOISE_LEVEL 4 // Allow small amount of measurement noise
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Using
|
|
||||||
|
|
||||||
No changes are required to existing sketches, just recompilation.
|
|
||||||
|
|
||||||
Compatible with both [TFT_eSPI](https://github.com/Bodmer/TFT_eSPI) and [MCUFRIEND_kbv](https://github.com/prenticedavid/MCUFRIEND_kbv/) libraries
|
|
||||||
|
|
||||||
Touchscreen needs to be calibrated before use, either manually using included [ESP32testTouch](examples/ESP32testTouch) or eg [TouchScreen_Calibr_native](https://github.com/prenticedavid/MCUFRIEND_kbv/tree/master/examples/TouchScreen_Calibr_native)
|
|
||||||
|
|
||||||

|
|
@ -1,4 +0,0 @@
|
|||||||
This is the 4-wire resistive touch screen firmware for Arduino. Works with all Arduinos and Teensy
|
|
||||||
|
|
||||||
|
|
||||||
To install, click DOWNLOAD SOURCE in the top right corner, and rename the uncompressed folder "TouchScreen". See our tutorial at http://www.ladyada.net/library/arduino/libraries.html on Arduino Library installation
|
|
@ -1,292 +0,0 @@
|
|||||||
// Touch screen library with X Y and Z (pressure) readings as well
|
|
||||||
// as oversampling to avoid 'bouncing'
|
|
||||||
// (c) ladyada / adafruit
|
|
||||||
// Code under MIT License
|
|
||||||
// Code under MIT License
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include "pins_arduino.h"
|
|
||||||
|
|
||||||
#ifdef __AVR
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#elif defined(ESP8266)
|
|
||||||
#include <pgmspace.h>
|
|
||||||
#endif
|
|
||||||
#include "TouchScreen.h"
|
|
||||||
|
|
||||||
// increase or decrease the touchscreen oversampling. This is a little different than you make think:
|
|
||||||
// 1 is no oversampling, whatever data we get is immediately returned
|
|
||||||
// 2 is double-sampling and we only return valid data if both points are the same
|
|
||||||
// 3+ uses insert sort to get the median value.
|
|
||||||
// We found 2 is precise yet not too slow so we suggest sticking with it!
|
|
||||||
|
|
||||||
#define NUMSAMPLES 2
|
|
||||||
|
|
||||||
TSPoint::TSPoint(void)
|
|
||||||
{
|
|
||||||
x = y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TSPoint::TSPoint(int16_t x0, int16_t y0, int16_t z0)
|
|
||||||
{
|
|
||||||
x = x0;
|
|
||||||
y = y0;
|
|
||||||
z = z0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TSPoint::operator==(TSPoint p1)
|
|
||||||
{
|
|
||||||
return ((p1.x == x) && (p1.y == y) && (p1.z == z));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TSPoint::operator!=(TSPoint p1)
|
|
||||||
{
|
|
||||||
return ((p1.x != x) || (p1.y != y) || (p1.z != z));
|
|
||||||
}
|
|
||||||
|
|
||||||
#if(NUMSAMPLES > 2)
|
|
||||||
static void insert_sort(int array[], uint8_t size)
|
|
||||||
{
|
|
||||||
uint8_t j;
|
|
||||||
int save;
|
|
||||||
|
|
||||||
for(int i = 1; i < size; i++) {
|
|
||||||
save = array[i];
|
|
||||||
for(j = i; j >= 1 && save < array[j - 1]; j--) array[j] = array[j - 1];
|
|
||||||
array[j] = save;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TSPoint TouchScreen::getPoint(void)
|
|
||||||
{
|
|
||||||
int x, y, z;
|
|
||||||
int samples[NUMSAMPLES];
|
|
||||||
uint8_t i, valid;
|
|
||||||
|
|
||||||
valid = 1;
|
|
||||||
|
|
||||||
pinMode(_yp, INPUT);
|
|
||||||
pinMode(_ym, INPUT);
|
|
||||||
pinMode(_xp, OUTPUT);
|
|
||||||
pinMode(_xm, OUTPUT);
|
|
||||||
|
|
||||||
#if defined(USE_FAST_PINIO)
|
|
||||||
*xp_port |= xp_pin;
|
|
||||||
*xm_port &= ~xm_pin;
|
|
||||||
#else
|
|
||||||
digitalWrite(_xp, HIGH);
|
|
||||||
digitalWrite(_xm, LOW);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __arm__
|
|
||||||
delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(i = 0; i < NUMSAMPLES; i++) {
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
samples[i] = analogRead(aYP);
|
|
||||||
#else
|
|
||||||
samples[i] = analogRead(_yp);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if NUMSAMPLES > 2
|
|
||||||
insert_sort(samples, NUMSAMPLES);
|
|
||||||
#endif
|
|
||||||
#if NUMSAMPLES == 2
|
|
||||||
// Allow small amount of measurement noise, because capacitive
|
|
||||||
// coupling to a TFT display's signals can induce some noise.
|
|
||||||
if(samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) {
|
|
||||||
valid = 0;
|
|
||||||
} else {
|
|
||||||
samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
x = (ADC_MAX - samples[NUMSAMPLES / 2]);
|
|
||||||
|
|
||||||
pinMode(_xp, INPUT);
|
|
||||||
pinMode(_xm, INPUT);
|
|
||||||
pinMode(_yp, OUTPUT);
|
|
||||||
pinMode(_ym, OUTPUT);
|
|
||||||
|
|
||||||
#if defined(USE_FAST_PINIO)
|
|
||||||
*ym_port &= ~ym_pin;
|
|
||||||
*yp_port |= yp_pin;
|
|
||||||
#else
|
|
||||||
digitalWrite(_ym, LOW);
|
|
||||||
digitalWrite(_yp, HIGH);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __arm__
|
|
||||||
delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for(i = 0; i < NUMSAMPLES; i++) {
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
samples[i] = analogRead(aXM);
|
|
||||||
#else
|
|
||||||
samples[i] = analogRead(_xm);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if NUMSAMPLES > 2
|
|
||||||
insert_sort(samples, NUMSAMPLES);
|
|
||||||
#endif
|
|
||||||
#if NUMSAMPLES == 2
|
|
||||||
// Allow small amount of measurement noise, because capacitive
|
|
||||||
// coupling to a TFT display's signals can induce some noise.
|
|
||||||
if(samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) {
|
|
||||||
valid = 0;
|
|
||||||
} else {
|
|
||||||
samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
y = (ADC_MAX - samples[NUMSAMPLES / 2]);
|
|
||||||
|
|
||||||
// Set X+ to ground
|
|
||||||
// Set Y- to VCC
|
|
||||||
// Hi-Z X- and Y+
|
|
||||||
pinMode(_xp, OUTPUT);
|
|
||||||
pinMode(_yp, INPUT);
|
|
||||||
|
|
||||||
#if defined(USE_FAST_PINIO)
|
|
||||||
*xp_port &= ~xp_pin;
|
|
||||||
*ym_port |= ym_pin;
|
|
||||||
#else
|
|
||||||
digitalWrite(_xp, LOW);
|
|
||||||
digitalWrite(_ym, HIGH);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
int z1 = analogRead(aXM);
|
|
||||||
int z2 = analogRead(aYP);
|
|
||||||
#else
|
|
||||||
int z1 = analogRead(_xm);
|
|
||||||
int z2 = analogRead(_yp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(_rxplate != 0) {
|
|
||||||
// now read the x
|
|
||||||
float rtouch;
|
|
||||||
rtouch = z2;
|
|
||||||
rtouch /= z1;
|
|
||||||
rtouch -= 1;
|
|
||||||
rtouch *= x;
|
|
||||||
rtouch *= _rxplate;
|
|
||||||
rtouch /= ADC_MAX + 1;
|
|
||||||
|
|
||||||
z = rtouch;
|
|
||||||
} else {
|
|
||||||
z = (ADC_MAX - (z2 - z1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!valid) {
|
|
||||||
z = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TSPoint(x, y, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
TouchScreen::TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rxplate = 0)
|
|
||||||
{
|
|
||||||
_yp = yp;
|
|
||||||
_xm = xm;
|
|
||||||
_ym = ym;
|
|
||||||
_xp = xp;
|
|
||||||
_rxplate = rxplate;
|
|
||||||
|
|
||||||
#if defined(USE_FAST_PINIO)
|
|
||||||
xp_port = portOutputRegister(digitalPinToPort(_xp));
|
|
||||||
yp_port = portOutputRegister(digitalPinToPort(_yp));
|
|
||||||
xm_port = portOutputRegister(digitalPinToPort(_xm));
|
|
||||||
ym_port = portOutputRegister(digitalPinToPort(_ym));
|
|
||||||
|
|
||||||
xp_pin = digitalPinToBitMask(_xp);
|
|
||||||
yp_pin = digitalPinToBitMask(_yp);
|
|
||||||
xm_pin = digitalPinToBitMask(_xm);
|
|
||||||
ym_pin = digitalPinToBitMask(_ym);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pressureThreshhold = 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TouchScreen::readTouchX(void)
|
|
||||||
{
|
|
||||||
pinMode(_yp, INPUT);
|
|
||||||
pinMode(_ym, INPUT);
|
|
||||||
digitalWrite(_yp, LOW);
|
|
||||||
digitalWrite(_ym, LOW);
|
|
||||||
|
|
||||||
pinMode(_xp, OUTPUT);
|
|
||||||
digitalWrite(_xp, HIGH);
|
|
||||||
pinMode(_xm, OUTPUT);
|
|
||||||
digitalWrite(_xm, LOW);
|
|
||||||
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
return (ADC_MAX - analogRead(aYP));
|
|
||||||
#else
|
|
||||||
return (ADC_MAX - analogRead(_yp));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
int TouchScreen::readTouchY(void)
|
|
||||||
{
|
|
||||||
pinMode(_xp, INPUT);
|
|
||||||
pinMode(_xm, INPUT);
|
|
||||||
digitalWrite(_xp, LOW);
|
|
||||||
digitalWrite(_xm, LOW);
|
|
||||||
|
|
||||||
pinMode(_yp, OUTPUT);
|
|
||||||
digitalWrite(_yp, HIGH);
|
|
||||||
pinMode(_ym, OUTPUT);
|
|
||||||
digitalWrite(_ym, LOW);
|
|
||||||
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
return (ADC_MAX - analogRead(aXM));
|
|
||||||
#else
|
|
||||||
return (ADC_MAX - analogRead(_xm));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t TouchScreen::pressure(void)
|
|
||||||
{
|
|
||||||
// Set X+ to ground
|
|
||||||
pinMode(_xp, OUTPUT);
|
|
||||||
digitalWrite(_xp, LOW);
|
|
||||||
|
|
||||||
// Set Y- to VCC
|
|
||||||
pinMode(_ym, OUTPUT);
|
|
||||||
digitalWrite(_ym, HIGH);
|
|
||||||
|
|
||||||
// Hi-Z X- and Y+
|
|
||||||
digitalWrite(_xm, LOW);
|
|
||||||
pinMode(_xm, INPUT);
|
|
||||||
digitalWrite(_yp, LOW);
|
|
||||||
pinMode(_yp, INPUT);
|
|
||||||
|
|
||||||
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
|
|
||||||
int z1 = analogRead(aXM);
|
|
||||||
int z2 = analogRead(aYP);
|
|
||||||
#else
|
|
||||||
int z1 = analogRead(_xm);
|
|
||||||
int z2 = analogRead(_yp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(_rxplate != 0) {
|
|
||||||
// now read the x
|
|
||||||
float rtouch;
|
|
||||||
rtouch = z2;
|
|
||||||
rtouch /= z1;
|
|
||||||
rtouch -= 1;
|
|
||||||
rtouch *= readTouchX();
|
|
||||||
rtouch *= _rxplate;
|
|
||||||
rtouch /= ADC_MAX + 1;
|
|
||||||
|
|
||||||
return rtouch;
|
|
||||||
} else {
|
|
||||||
return (ADC_MAX - (z2 - z1));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
// Touch screen library with X Y and Z (pressure) readings as well
|
|
||||||
// as oversampling to avoid 'bouncing'
|
|
||||||
// (c) ladyada / adafruit
|
|
||||||
// Code under MIT License
|
|
||||||
|
|
||||||
#ifndef _ADAFRUIT_TOUCHSCREEN_H_
|
|
||||||
#define _ADAFRUIT_TOUCHSCREEN_H_
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// ESP32 specific
|
|
||||||
#define ESP32_WIFI_TOUCH // uncomment to use parallel MCU Friend LCD touchscreen with ESP32 UNO Wifi
|
|
||||||
#ifdef ESP32
|
|
||||||
#define ADC_MAX 4095 // maximum value for ESP32 ADC (default 11db, 12 bits)
|
|
||||||
#define aXM 35 // analog input pin connected to LCD_RS
|
|
||||||
#define aYP 39 // analog input pin connected to LCD_WR
|
|
||||||
#else
|
|
||||||
#define ADC_MAX 1023 // Arduino
|
|
||||||
#endif
|
|
||||||
#define NOISE_LEVEL 4 // Allow small amount of measurement noise
|
|
||||||
|
|
||||||
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32U4__) || defined(TEENSYDUINO) || defined(__AVR_ATmega2560__)
|
|
||||||
typedef volatile uint8_t RwReg;
|
|
||||||
#endif
|
|
||||||
#if defined(ARDUINO_STM32_FEATHER)
|
|
||||||
typedef volatile uint32 RwReg;
|
|
||||||
#endif
|
|
||||||
#if defined(ARDUINO_FEATHER52) || defined(ESP32) || defined(ESP8266)
|
|
||||||
typedef volatile uint32_t RwReg;
|
|
||||||
#endif
|
|
||||||
#if defined(STM32F4)
|
|
||||||
typedef volatile uint32_t RwReg;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__AVR__) || defined(TEENSYDUINO) || defined(ARDUINO_ARCH_SAMD)
|
|
||||||
#define USE_FAST_PINIO
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class TSPoint {
|
|
||||||
public:
|
|
||||||
TSPoint(void);
|
|
||||||
TSPoint(int16_t x, int16_t y, int16_t z);
|
|
||||||
|
|
||||||
bool operator==(TSPoint);
|
|
||||||
bool operator!=(TSPoint);
|
|
||||||
|
|
||||||
int16_t x, y, z;
|
|
||||||
};
|
|
||||||
|
|
||||||
class TouchScreen {
|
|
||||||
public:
|
|
||||||
TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rx);
|
|
||||||
|
|
||||||
bool isTouching(void);
|
|
||||||
uint16_t pressure(void);
|
|
||||||
int readTouchY();
|
|
||||||
int readTouchX();
|
|
||||||
TSPoint getPoint();
|
|
||||||
int16_t pressureThreshhold;
|
|
||||||
|
|
||||||
private:
|
|
||||||
uint8_t _yp, _ym, _xm, _xp;
|
|
||||||
uint16_t _rxplate;
|
|
||||||
|
|
||||||
volatile RwReg *xp_port, *yp_port, *xm_port, *ym_port;
|
|
||||||
RwReg xp_pin, xm_pin, yp_pin, ym_pin;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,126 +0,0 @@
|
|||||||
/*
|
|
||||||
Test MCU Friend parallel display and resistive touchscreen by drawing touch points
|
|
||||||
on screen, use something pointed for more accuracy
|
|
||||||
|
|
||||||
Need this modified Touchscreen library and one of:
|
|
||||||
- TFT_eSPI much faster for ESP32, must select correct display driver
|
|
||||||
- MCUFRIEND_kbv more display driver support, auto detects display driver
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define TFT_eSPIlib // comment out to use MCUFRIEND_kbv
|
|
||||||
|
|
||||||
#ifdef TFT_eSPIlib
|
|
||||||
#include <TFT_eSPI.h>
|
|
||||||
TFT_eSPI tft = TFT_eSPI();
|
|
||||||
#else
|
|
||||||
#include <MCUFRIEND_kbv.h>
|
|
||||||
MCUFRIEND_kbv tft;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <TouchScreen.h>
|
|
||||||
|
|
||||||
// adjust pressure sensitivity - note works 'backwards'
|
|
||||||
#define MINPRESSURE 200
|
|
||||||
#define MAXPRESSURE 1000
|
|
||||||
|
|
||||||
// some colours to play with
|
|
||||||
#define BLACK 0x0000
|
|
||||||
#define BLUE 0x001F
|
|
||||||
#define RED 0xF800
|
|
||||||
#define GREEN 0x07E0
|
|
||||||
#define CYAN 0x07FF
|
|
||||||
#define MAGENTA 0xF81F
|
|
||||||
#define YELLOW 0xFFE0
|
|
||||||
#define WHITE 0xFFFF
|
|
||||||
|
|
||||||
// Either run TouchScreen_Calibr_native.ino and apply results to the arrays below
|
|
||||||
// or just use trial and error from drawing on screen
|
|
||||||
// ESP32 coordinates at default 12 bit resolution have range 0 - 4095
|
|
||||||
// however the ADC cannot read voltages below 150mv and tops out around 3.15V
|
|
||||||
// so the actual coordinates will not be at the extremes
|
|
||||||
// each library and driver may have different coordination and rotation sequence
|
|
||||||
const int coords[] = {3800, 500, 300, 3800}; // portrait - left, right, top, bottom
|
|
||||||
|
|
||||||
const int rotation = 0; // in rotation order - portrait, landscape, etc
|
|
||||||
|
|
||||||
const int XP = 27, XM = 15, YP = 4, YM = 14; // default ESP32 Uno touchscreen pins
|
|
||||||
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
|
|
||||||
|
|
||||||
void setup() {
|
|
||||||
Serial.begin(115200);
|
|
||||||
#ifdef TFT_eSPIlib
|
|
||||||
Serial.println("TFT_eSPI library");
|
|
||||||
tft.begin();
|
|
||||||
#else
|
|
||||||
Serial.println("MCUFRIEND_kbv library");
|
|
||||||
idDisplay();
|
|
||||||
#endif
|
|
||||||
// screen orientation and background
|
|
||||||
String orientation;
|
|
||||||
switch (rotation) {
|
|
||||||
case 0:
|
|
||||||
orientation = "Portrait";
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
orientation = "Landscape";
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
orientation = "Portrait Inverted";
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
orientation = "Landscape Inverted";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Serial.println(orientation);
|
|
||||||
tft.setRotation(rotation);
|
|
||||||
tft.fillScreen(BLACK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop() {
|
|
||||||
// display touched point with colored dot
|
|
||||||
uint16_t pixel_x, pixel_y;
|
|
||||||
boolean pressed = Touch_getXY(&pixel_x, &pixel_y, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean Touch_getXY(uint16_t *x, uint16_t *y, boolean showTouch) {
|
|
||||||
TSPoint p = ts.getPoint();
|
|
||||||
pinMode(YP, OUTPUT); //restore shared pins
|
|
||||||
pinMode(XM, OUTPUT);
|
|
||||||
digitalWrite(YP, HIGH); //because TFT control pins
|
|
||||||
digitalWrite(XM, HIGH);
|
|
||||||
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
|
|
||||||
if (pressed) {
|
|
||||||
switch (rotation) {
|
|
||||||
case 0: // portrait
|
|
||||||
*x = map(p.x, coords[0], coords[1], 0, tft.width());
|
|
||||||
*y = map(p.y, coords[2], coords[3], 0, tft.height());
|
|
||||||
break;
|
|
||||||
case 1: // landscape
|
|
||||||
*x = map(p.y, coords[1], coords[0], 0, tft.width());
|
|
||||||
*y = map(p.x, coords[2], coords[3], 0, tft.height());
|
|
||||||
break;
|
|
||||||
case 2: // portrait inverted
|
|
||||||
*x = map(p.x, coords[1], coords[0], 0, tft.width());
|
|
||||||
*y = map(p.y, coords[3], coords[2], 0, tft.height());
|
|
||||||
break;
|
|
||||||
case 3: // landscape inverted
|
|
||||||
*x = map(p.y, coords[0], coords[1], 0, tft.width());
|
|
||||||
*y = map(p.x, coords[3], coords[2], 0, tft.height());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (showTouch) tft.fillCircle(*x, *y, 2, YELLOW);
|
|
||||||
}
|
|
||||||
return pressed;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef TFT_eSPIlib
|
|
||||||
void idDisplay() {
|
|
||||||
// MCUFRIEND_kbv library only
|
|
||||||
uint16_t ID = tft.readID();
|
|
||||||
Serial.print("TFT ID = 0x");
|
|
||||||
Serial.println(ID, HEX);
|
|
||||||
if (ID == 0xD3D3) ID = 0x9486; // write-only shield
|
|
||||||
tft.begin(ID);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
// Touch screen library with X Y and Z (pressure) readings as well
|
|
||||||
// as oversampling to avoid 'bouncing'
|
|
||||||
// This demo code returns raw readings, public domain
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "TouchScreen.h"
|
|
||||||
|
|
||||||
#define YP A2 // must be an analog pin, use "An" notation!
|
|
||||||
#define XM A3 // must be an analog pin, use "An" notation!
|
|
||||||
#define YM 8 // can be a digital pin
|
|
||||||
#define XP 9 // can be a digital pin
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
void setup(void) {
|
|
||||||
Serial.begin(9600);
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop(void) {
|
|
||||||
// a point object holds x y and z coordinates
|
|
||||||
TSPoint p = ts.getPoint();
|
|
||||||
|
|
||||||
// we have some minimum pressure we consider 'valid'
|
|
||||||
// pressure of 0 means no pressing!
|
|
||||||
if (p.z > ts.pressureThreshhold) {
|
|
||||||
Serial.print("X = "); Serial.print(p.x);
|
|
||||||
Serial.print("\tY = "); Serial.print(p.y);
|
|
||||||
Serial.print("\tPressure = "); Serial.println(p.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
delay(100);
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
// Touch screen library with X Y and Z (pressure) readings as well
|
|
||||||
// as oversampling to avoid 'bouncing'
|
|
||||||
// This demo code returns raw readings, public domain
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "TouchScreen.h"
|
|
||||||
|
|
||||||
// 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 MINPRESSURE 10
|
|
||||||
#define MAXPRESSURE 1000
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
void setup(void) {
|
|
||||||
Serial.begin(9600);
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop(void) {
|
|
||||||
// a point object holds x y and z coordinates
|
|
||||||
TSPoint p = ts.getPoint();
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 435 KiB |
Binary file not shown.
Before Width: | Height: | Size: 94 KiB |
@ -1,9 +0,0 @@
|
|||||||
name=Adafruit TouchScreen
|
|
||||||
version=1.0.1
|
|
||||||
author=Adafruit
|
|
||||||
maintainer=Adafruit <info@adafruit.com>
|
|
||||||
sentence=Adafruit TouchScreen display library.
|
|
||||||
paragraph=Adafruit TouchScreen display library.
|
|
||||||
category=Display
|
|
||||||
url=https://github.com/s60sc/Adafruit_TouchScreen
|
|
||||||
architectures=*
|
|
@ -24,21 +24,6 @@ int max_x = 4095, max_y = 4095;
|
|||||||
|
|
||||||
static TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
|
static TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
|
||||||
|
|
||||||
// IRAM_ATTR bool touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
|
||||||
// {
|
|
||||||
// static TSPoint tp;
|
|
||||||
// tp = ts.getPoint();
|
|
||||||
// if(tp.z < MINPRESSURE) {
|
|
||||||
// data->state = LV_INDEV_STATE_REL;
|
|
||||||
// } else {
|
|
||||||
// data->point.x = map(tp.x, TS_LEFT, TS_RT, 0, max_x);
|
|
||||||
// data->point.y = map(tp.y, TS_BOT, TS_TOP, max_y, 0);
|
|
||||||
// data->state = LV_INDEV_STATE_PR;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
namespace dev {
|
namespace dev {
|
||||||
|
|
||||||
class AnalogTouch : public BaseTouch {
|
class AnalogTouch : public BaseTouch {
|
||||||
|
@ -16,20 +16,6 @@
|
|||||||
#include "../../hasp/hasp.h" // for hasp_sleep_state
|
#include "../../hasp/hasp.h" // for hasp_sleep_state
|
||||||
extern uint8_t hasp_sleep_state;
|
extern uint8_t hasp_sleep_state;
|
||||||
|
|
||||||
// IRAM_ATTR bool touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data)
|
|
||||||
// {
|
|
||||||
// if(haspTft.tft.getTouch((uint16_t*)&data->point.x, (uint16_t*)&data->point.y, 300)) {
|
|
||||||
// if(hasp_sleep_state != HASP_SLEEP_OFF) hasp_update_sleep_state(); // update Idle
|
|
||||||
// data->state = LV_INDEV_STATE_PR;
|
|
||||||
|
|
||||||
// } else {
|
|
||||||
// data->state = LV_INDEV_STATE_REL;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /*Return `false` because we are not buffering and no more data to read*/
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
namespace dev {
|
namespace dev {
|
||||||
|
|
||||||
class TouchLovyanGfx : public BaseTouch {
|
class TouchLovyanGfx : public BaseTouch {
|
||||||
|
@ -52,7 +52,6 @@ build_flags =
|
|||||||
lib_ignore =
|
lib_ignore =
|
||||||
GxTFT
|
GxTFT
|
||||||
XPT2046_Touchscreen
|
XPT2046_Touchscreen
|
||||||
Adafruit TouchScreen
|
|
||||||
Adafruit BusIO
|
Adafruit BusIO
|
||||||
Adafruit GFX Library
|
Adafruit GFX Library
|
||||||
sstaub/Ticker
|
sstaub/Ticker
|
||||||
|
@ -12,6 +12,7 @@ build_flags =
|
|||||||
${env.build_flags}
|
${env.build_flags}
|
||||||
${esp32.build_flags}
|
${esp32.build_flags}
|
||||||
${esp32.no_ps_ram}
|
${esp32.no_ps_ram}
|
||||||
|
-D HASP_USE_OTA=0 ; No ArduinoOTA on port 3232
|
||||||
|
|
||||||
;region -- TFT_eSPI build options ------------------------
|
;region -- TFT_eSPI build options ------------------------
|
||||||
${esp32.vspi} ; Use VSPI hardware SPI bus
|
${esp32.vspi} ; Use VSPI hardware SPI bus
|
||||||
@ -51,13 +52,13 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
${esp32.lib_deps}
|
${esp32.lib_deps}
|
||||||
bodmer/TFT_eSPI @ 2.4.32
|
; bodmer/TFT_eSPI @ 2.4.32
|
||||||
; ${tft_espi.lib_deps}
|
; ${tft_espi.lib_deps}
|
||||||
; https://github.com/lovyan03/LovyanGFX.git#1be6600
|
; lorol/LittleFS_esp32@^1.0.6 ; for v1
|
||||||
lorol/LittleFS_esp32@^1.0.6 ; for v1
|
${lovyangfx.lib_deps}
|
||||||
|
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
${env.lib_ignore}
|
${env.lib_ignore}
|
||||||
;${esp32.lib_ignore}
|
;${esp32.lib_ignore}
|
||||||
; TFT_eSPI
|
TFT_eSPI
|
||||||
;endregion
|
;endregion
|
@ -44,7 +44,6 @@ lib_ignore =
|
|||||||
${env.lib_ignore}
|
${env.lib_ignore}
|
||||||
GxTFT
|
GxTFT
|
||||||
XPT2046_Touchscreen
|
XPT2046_Touchscreen
|
||||||
Adafruit TouchScreen
|
|
||||||
Adafruit BusIO
|
Adafruit BusIO
|
||||||
Adafruit GFX Library
|
Adafruit GFX Library
|
||||||
sstaub/Ticker
|
sstaub/Ticker
|
||||||
|
@ -47,7 +47,6 @@ lib_ignore =
|
|||||||
${env.lib_ignore}
|
${env.lib_ignore}
|
||||||
GxTFT
|
GxTFT
|
||||||
XPT2046_Touchscreen
|
XPT2046_Touchscreen
|
||||||
Adafruit TouchScreen
|
|
||||||
Adafruit BusIO
|
Adafruit BusIO
|
||||||
Adafruit GFX Library
|
Adafruit GFX Library
|
||||||
sstaub/Ticker
|
sstaub/Ticker
|
||||||
|
@ -58,7 +58,6 @@ build_flags =
|
|||||||
lib_ignore =
|
lib_ignore =
|
||||||
GxTFT
|
GxTFT
|
||||||
XPT2046_Touchscreen
|
XPT2046_Touchscreen
|
||||||
Adafruit TouchScreen
|
|
||||||
Adafruit BusIO
|
Adafruit BusIO
|
||||||
Adafruit GFX Library
|
Adafruit GFX Library
|
||||||
sstaub/Ticker
|
sstaub/Ticker
|
||||||
|
@ -71,7 +71,6 @@ lib_deps =
|
|||||||
lib_ignore =
|
lib_ignore =
|
||||||
GxTFT
|
GxTFT
|
||||||
XPT2046_Touchscreen
|
XPT2046_Touchscreen
|
||||||
Adafruit TouchScreen
|
|
||||||
Adafruit BusIO
|
Adafruit BusIO
|
||||||
Adafruit GFX Library
|
Adafruit GFX Library
|
||||||
sstaub/Ticker
|
sstaub/Ticker
|
||||||
|
Loading…
x
Reference in New Issue
Block a user