diff --git a/TouchScreen.cpp b/TouchScreen.cpp old mode 100644 new mode 100755 index 98b56cf..65574ef --- a/TouchScreen.cpp +++ b/TouchScreen.cpp @@ -3,8 +3,9 @@ // (c) ladyada / adafruit // Code under MIT License +#include "Arduino.h" #include "pins_arduino.h" -#include "wiring_private.h" + #ifdef __AVR #include #elif defined(ESP8266) @@ -57,16 +58,37 @@ TSPoint TouchScreen::getPoint(void) { int samples[NUMSAMPLES]; uint8_t i, valid; +#if defined(ARDUINO_ARCH_SAM) + Pio* xp_port = digitalPinToPort(_xp); + Pio* yp_port = digitalPinToPort(_yp); + Pio* xm_port = digitalPinToPort(_xm); + Pio* ym_port = digitalPinToPort(_ym); + + uint32_t xp_pin = digitalPinToBitMask(_xp); + uint32_t yp_pin = digitalPinToBitMask(_yp); + uint32_t xm_pin = digitalPinToBitMask(_xm); + uint32_t ym_pin = digitalPinToBitMask(_ym); +#elif defined(ARDUINO_ARCH_SAMD) + PortGroup* xp_port = digitalPinToPort(_xp); + PortGroup* yp_port = digitalPinToPort(_yp); + PortGroup* xm_port = digitalPinToPort(_xm); + PortGroup* ym_port = digitalPinToPort(_ym); + + uint32_t xp_pin = digitalPinToBitMask(_xp); + uint32_t yp_pin = digitalPinToBitMask(_yp); + uint32_t xm_pin = digitalPinToBitMask(_xm); + uint32_t ym_pin = digitalPinToBitMask(_ym); +#else + uint8_t xp_port = digitalPinToPort(_xp); + uint8_t yp_port = digitalPinToPort(_yp); + uint8_t xm_port = digitalPinToPort(_xm); + uint8_t ym_port = digitalPinToPort(_ym); - uint8_t xp_port = digitalPinToPort(_xp); - uint8_t yp_port = digitalPinToPort(_yp); - uint8_t xm_port = digitalPinToPort(_xm); - uint8_t ym_port = digitalPinToPort(_ym); - - uint8_t xp_pin = digitalPinToBitMask(_xp); - uint8_t yp_pin = digitalPinToBitMask(_yp); - uint8_t xm_pin = digitalPinToBitMask(_xm); - uint8_t ym_pin = digitalPinToBitMask(_ym); + uint8_t xp_pin = digitalPinToBitMask(_xp); + uint8_t yp_pin = digitalPinToBitMask(_yp); + uint8_t xm_pin = digitalPinToBitMask(_xm); + uint8_t ym_pin = digitalPinToBitMask(_ym); +#endif valid = 1; @@ -86,6 +108,9 @@ TSPoint TouchScreen::getPoint(void) { *portOutputRegister(xp_port) |= xp_pin; *portOutputRegister(xm_port) &= ~xm_pin; +#ifdef __arm__ + delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle +#endif for (i=0; i 4) { + valid = 0; + } else { + samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples + } #endif x = (1023-samples[NUMSAMPLES/2]); @@ -107,6 +138,9 @@ TSPoint TouchScreen::getPoint(void) { //digitalWrite(_yp, HIGH); pinMode(_ym, OUTPUT); +#ifdef __arm__ + delayMicroseconds(20); // Fast ARM chips need to allow voltages to settle +#endif for (i=0; i 4) { + valid = 0; + } else { + samples[1] = (samples[0] + samples[1]) >> 1; // average 2 samples + } #endif y = (1023-samples[NUMSAMPLES/2]); diff --git a/TouchScreen.h b/TouchScreen.h old mode 100644 new mode 100755