Fix ESP8266 compiler error

This commit is contained in:
fvanroie 2020-04-11 20:10:54 +02:00
parent 51c9af9086
commit 6b0150a624
2 changed files with 194 additions and 191 deletions

View File

@ -8,9 +8,9 @@
#include "pins_arduino.h" #include "pins_arduino.h"
#ifdef __AVR #ifdef __AVR
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#elif defined(ESP8266) #elif defined(ESP8266)
#include <pgmspace.h> #include <pgmspace.h>
#endif #endif
#include "TouchScreen.h" #include "TouchScreen.h"
@ -22,268 +22,271 @@
#define NUMSAMPLES 2 #define NUMSAMPLES 2
TSPoint::TSPoint(void) { TSPoint::TSPoint(void)
x = y = 0; {
x = y = 0;
} }
TSPoint::TSPoint(int16_t x0, int16_t y0, int16_t z0) { TSPoint::TSPoint(int16_t x0, int16_t y0, int16_t z0)
x = x0; {
y = y0; x = x0;
z = z0; y = y0;
z = z0;
} }
bool TSPoint::operator==(TSPoint p1) { bool TSPoint::operator==(TSPoint p1)
return ((p1.x == x) && (p1.y == y) && (p1.z == z)); {
return ((p1.x == x) && (p1.y == y) && (p1.z == z));
} }
bool TSPoint::operator!=(TSPoint p1) { bool TSPoint::operator!=(TSPoint p1)
return ((p1.x != x) || (p1.y != y) || (p1.z != z)); {
return ((p1.x != x) || (p1.y != y) || (p1.z != z));
} }
#if (NUMSAMPLES > 2) #if(NUMSAMPLES > 2)
static void insert_sort(int array[], uint8_t size) { static void insert_sort(int array[], uint8_t size)
uint8_t j; {
int save; uint8_t j;
int save;
for (int i = 1; i < size; i++) {
save = array[i]; for(int i = 1; i < size; i++) {
for (j = i; j >= 1 && save < array[j - 1]; j--) save = array[i];
array[j] = array[j - 1]; for(j = i; j >= 1 && save < array[j - 1]; j--) array[j] = array[j - 1];
array[j] = save; array[j] = save;
} }
} }
#endif #endif
TSPoint TouchScreen::getPoint(void) { TSPoint TouchScreen::getPoint(void)
int x, y, z; {
int samples[NUMSAMPLES]; int x, y, z;
uint8_t i, valid; int samples[NUMSAMPLES];
uint8_t i, valid;
valid = 1; valid = 1;
pinMode(_yp, INPUT); pinMode(_yp, INPUT);
pinMode(_ym, INPUT); pinMode(_ym, INPUT);
pinMode(_xp, OUTPUT); pinMode(_xp, OUTPUT);
pinMode(_xm, OUTPUT); pinMode(_xm, OUTPUT);
#if defined (USE_FAST_PINIO) #if defined(USE_FAST_PINIO)
*xp_port |= xp_pin; *xp_port |= xp_pin;
*xm_port &= ~xm_pin; *xm_port &= ~xm_pin;
#else #else
digitalWrite(_xp, HIGH); digitalWrite(_xp, HIGH);
digitalWrite(_xm, LOW); digitalWrite(_xm, LOW);
#endif #endif
#ifdef __arm__ #ifdef __arm__
delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle
#endif #endif
for (i=0; i<NUMSAMPLES; i++) { for(i = 0; i < NUMSAMPLES; i++) {
#if defined (ESP32_WIFI_TOUCH) && defined (ESP32) #if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
samples[i] = analogRead(aYP); samples[i] = analogRead(aYP);
#else #else
samples[i] = analogRead(_yp); samples[i] = analogRead(_yp);
#endif #endif
} }
#if NUMSAMPLES > 2 #if NUMSAMPLES > 2
insert_sort(samples, NUMSAMPLES); insert_sort(samples, NUMSAMPLES);
#endif #endif
#if NUMSAMPLES == 2 #if NUMSAMPLES == 2
// Allow small amount of measurement noise, because capacitive // Allow small amount of measurement noise, because capacitive
// coupling to a TFT display's signals can induce some noise. // coupling to a TFT display's signals can induce some noise.
if (samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) { if(samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) {
valid = 0; valid = 0;
} else { } else {
samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples
} }
#endif #endif
x = (ADC_MAX-samples[NUMSAMPLES/2]); x = (ADC_MAX - samples[NUMSAMPLES / 2]);
pinMode(_xp, INPUT); pinMode(_xp, INPUT);
pinMode(_xm, INPUT); pinMode(_xm, INPUT);
pinMode(_yp, OUTPUT); pinMode(_yp, OUTPUT);
pinMode(_ym, OUTPUT); pinMode(_ym, OUTPUT);
#if defined (USE_FAST_PINIO) #if defined(USE_FAST_PINIO)
*ym_port &= ~ym_pin; *ym_port &= ~ym_pin;
*yp_port |= yp_pin; *yp_port |= yp_pin;
#else #else
digitalWrite(_ym, LOW); digitalWrite(_ym, LOW);
digitalWrite(_yp, HIGH); digitalWrite(_yp, HIGH);
#endif #endif
#ifdef __arm__ #ifdef __arm__
delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle
#endif #endif
for (i=0; i<NUMSAMPLES; i++) { for(i = 0; i < NUMSAMPLES; i++) {
#if defined (ESP32_WIFI_TOUCH) && defined (ESP32) #if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
samples[i] = analogRead(aXM); samples[i] = analogRead(aXM);
#else #else
samples[i] = analogRead(_xm); samples[i] = analogRead(_xm);
#endif #endif
} }
#if NUMSAMPLES > 2 #if NUMSAMPLES > 2
insert_sort(samples, NUMSAMPLES); insert_sort(samples, NUMSAMPLES);
#endif #endif
#if NUMSAMPLES == 2 #if NUMSAMPLES == 2
// Allow small amount of measurement noise, because capacitive // Allow small amount of measurement noise, because capacitive
// coupling to a TFT display's signals can induce some noise. // coupling to a TFT display's signals can induce some noise.
if (samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) { if(samples[0] - samples[1] < -NOISE_LEVEL || samples[0] - samples[1] > NOISE_LEVEL) {
valid = 0; valid = 0;
} else { } else {
samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples
} }
#endif #endif
y = (ADC_MAX-samples[NUMSAMPLES/2]); y = (ADC_MAX - samples[NUMSAMPLES / 2]);
// Set X+ to ground // Set X+ to ground
// Set Y- to VCC // Set Y- to VCC
// Hi-Z X- and Y+ // Hi-Z X- and Y+
pinMode(_xp, OUTPUT); pinMode(_xp, OUTPUT);
pinMode(_yp, INPUT); pinMode(_yp, INPUT);
#if defined (USE_FAST_PINIO) #if defined(USE_FAST_PINIO)
*xp_port &= ~xp_pin; *xp_port &= ~xp_pin;
*ym_port |= ym_pin; *ym_port |= ym_pin;
#else #else
digitalWrite(_xp, LOW); digitalWrite(_xp, LOW);
digitalWrite(_ym, HIGH); digitalWrite(_ym, HIGH);
#endif #endif
#if defined (ESP32_WIFI_TOUCH) && defined (ESP32) #if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
int z1 = analogRead(aXM); int z1 = analogRead(aXM);
int z2 = analogRead(aYP); int z2 = analogRead(aYP);
#else #else
int z1 = analogRead(_xm); int z1 = analogRead(_xm);
int z2 = analogRead(_yp); int z2 = analogRead(_yp);
#endif #endif
if (_rxplate != 0) { if(_rxplate != 0) {
// now read the x // now read the x
float rtouch; float rtouch;
rtouch = z2; rtouch = z2;
rtouch /= z1; rtouch /= z1;
rtouch -= 1; rtouch -= 1;
rtouch *= x; rtouch *= x;
rtouch *= _rxplate; rtouch *= _rxplate;
rtouch /= ADC_MAX+1; rtouch /= ADC_MAX + 1;
z = rtouch;
} else {
z = (ADC_MAX-(z2-z1));
}
if (! valid) { z = rtouch;
z = 0; } else {
} z = (ADC_MAX - (z2 - z1));
}
return TSPoint(x, y, z); if(!valid) {
z = 0;
}
return TSPoint(x, y, z);
} }
TouchScreen::TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, TouchScreen::TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rxplate = 0)
uint16_t rxplate=0) { {
_yp = yp; _yp = yp;
_xm = xm; _xm = xm;
_ym = ym; _ym = ym;
_xp = xp; _xp = xp;
_rxplate = rxplate; _rxplate = rxplate;
#if defined (USE_FAST_PINIO) #if defined(USE_FAST_PINIO)
xp_port = portOutputRegister(digitalPinToPort(_xp)); xp_port = portOutputRegister(digitalPinToPort(_xp));
yp_port = portOutputRegister(digitalPinToPort(_yp)); yp_port = portOutputRegister(digitalPinToPort(_yp));
xm_port = portOutputRegister(digitalPinToPort(_xm)); xm_port = portOutputRegister(digitalPinToPort(_xm));
ym_port = portOutputRegister(digitalPinToPort(_ym)); ym_port = portOutputRegister(digitalPinToPort(_ym));
xp_pin = digitalPinToBitMask(_xp); xp_pin = digitalPinToBitMask(_xp);
yp_pin = digitalPinToBitMask(_yp); yp_pin = digitalPinToBitMask(_yp);
xm_pin = digitalPinToBitMask(_xm); xm_pin = digitalPinToBitMask(_xm);
ym_pin = digitalPinToBitMask(_ym); ym_pin = digitalPinToBitMask(_ym);
#endif #endif
pressureThreshhold = 10; pressureThreshhold = 10;
} }
int TouchScreen::readTouchX(void) { int TouchScreen::readTouchX(void)
pinMode(_yp, INPUT); {
pinMode(_ym, INPUT); pinMode(_yp, INPUT);
digitalWrite(_yp, LOW); pinMode(_ym, INPUT);
digitalWrite(_ym, LOW); 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) pinMode(_xp, OUTPUT);
return (ADC_MAX-analogRead(aYP)); digitalWrite(_xp, HIGH);
pinMode(_xm, OUTPUT);
digitalWrite(_xm, LOW);
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
return (ADC_MAX - analogRead(aYP));
#else #else
return (ADC_MAX-analogRead(_yp)); return (ADC_MAX - analogRead(_yp));
#endif #endif
} }
int TouchScreen::readTouchY(void)
{
pinMode(_xp, INPUT);
pinMode(_xm, INPUT);
digitalWrite(_xp, LOW);
digitalWrite(_xm, LOW);
int TouchScreen::readTouchY(void) { pinMode(_yp, OUTPUT);
pinMode(_xp, INPUT); digitalWrite(_yp, HIGH);
pinMode(_xm, INPUT); pinMode(_ym, OUTPUT);
digitalWrite(_xp, LOW); digitalWrite(_ym, LOW);
digitalWrite(_xm, LOW);
#if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
pinMode(_yp, OUTPUT); return (ADC_MAX - analogRead(aXM));
digitalWrite(_yp, HIGH);
pinMode(_ym, OUTPUT);
digitalWrite(_ym, LOW);
#if defined (ESP32_WIFI_TOUCH) && defined (ESP32)
return (ADC_MAX-analogRead(aXM));
#else #else
return (ADC_MAX-analogRead(_xm)); return (ADC_MAX - analogRead(_xm));
#endif #endif
} }
uint16_t TouchScreen::pressure(void)
{
// Set X+ to ground
pinMode(_xp, OUTPUT);
digitalWrite(_xp, LOW);
uint16_t TouchScreen::pressure(void) { // Set Y- to VCC
// Set X+ to ground pinMode(_ym, OUTPUT);
pinMode(_xp, OUTPUT); digitalWrite(_ym, HIGH);
digitalWrite(_xp, LOW);
// Hi-Z X- and Y+
// Set Y- to VCC digitalWrite(_xm, LOW);
pinMode(_ym, OUTPUT); pinMode(_xm, INPUT);
digitalWrite(_ym, HIGH); digitalWrite(_yp, LOW);
pinMode(_yp, INPUT);
// Hi-Z X- and Y+
digitalWrite(_xm, LOW); #if defined(ESP32_WIFI_TOUCH) && defined(ESP32)
pinMode(_xm, INPUT); int z1 = analogRead(aXM);
digitalWrite(_yp, LOW); int z2 = analogRead(aYP);
pinMode(_yp, INPUT);
#if defined (ESP32_WIFI_TOUCH) && defined (ESP32)
int z1 = analogRead(aXM);
int z2 = analogRead(aYP);
#else #else
int z1 = analogRead(_xm); int z1 = analogRead(_xm);
int z2 = analogRead(_yp); int z2 = analogRead(_yp);
#endif #endif
if(_rxplate != 0) {
// now read the x
float rtouch;
rtouch = z2;
rtouch /= z1;
rtouch -= 1;
rtouch *= readTouchX();
rtouch *= _rxplate;
rtouch /= ADC_MAX + 1;
if (_rxplate != 0) { return rtouch;
// now read the x } else {
float rtouch; return (ADC_MAX - (z2 - z1));
rtouch = z2; }
rtouch /= z1;
rtouch -= 1;
rtouch *= readTouchX();
rtouch *= _rxplate;
rtouch /= ADC_MAX+1;
return rtouch;
} else {
return (ADC_MAX-(z2-z1));
}
} }

View File

@ -24,7 +24,7 @@ typedef volatile uint8_t RwReg;
#if defined(ARDUINO_STM32_FEATHER) #if defined(ARDUINO_STM32_FEATHER)
typedef volatile uint32 RwReg; typedef volatile uint32 RwReg;
#endif #endif
#if defined(ARDUINO_FEATHER52) || defined(ESP32) #if defined(ARDUINO_FEATHER52) || defined(ESP32) || defined(ESP8266)
typedef volatile uint32_t RwReg; typedef volatile uint32_t RwReg;
#endif #endif