Resistive TouchScreen e.g. for MCUFRIEND Display Shields
Dependents: TFT_Touch_botao_v1 TFT_Touch_exemplo5_git_touch TESTE_1 TFT_Touch_exemplo6_git_touch_button_3_ ... more
Revision 1:849734501e5a, committed 2021-04-26
- Comitter:
- davidprentice
- Date:
- Mon Apr 26 16:27:29 2021 +0000
- Parent:
- 0:84f0f29e4695
- Child:
- 2:f23dd0aaa0ec
- Commit message:
- add conditional pinModeVal() etc
Changed in this revision
TouchScreen_kbv_mbed.cpp | Show annotated file Show diff for this revision Revisions of this file |
TouchScreen_kbv_mbed.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/TouchScreen_kbv_mbed.cpp Mon Apr 26 15:15:38 2021 +0000 +++ b/TouchScreen_kbv_mbed.cpp Mon Apr 26 16:27:29 2021 +0000 @@ -7,7 +7,7 @@ #include "TouchScreen_kbv_mbed.h" #define NUMSAMPLES 3 //.kbv -#if defined(__STM32F1__) || defined(ESP32) || defined(___arm__) //Maple core +#if defined(__STM32F1__) || defined(ESP32) //Maple core #define ADC_ADJUST >>2 #else #define ADC_ADJUST @@ -48,10 +48,23 @@ } } +// ***** conditional for MBED ***** +#if defined(__MBED__) +TouchScreen_kbv::TouchScreen_kbv(PinName xp, PinName yp, PinName xm, PinName ym, uint16_t rxplate) +{ + _yp = yp; + _xm = xm; + _ym = ym; + _xp = xp; + _rxplate = rxplate; + + pressureThreshhold = 10; +} + uint16_t TouchScreen_kbv::analogRead(PinName p) { AnalogIn _adc(p); - return _adc.read_u16() >> 6; + return _adc.read_u16() >> 6; // MBED gives 16-bit } void TouchScreen_kbv::pinModeVal(PinName p, uint8_t mode, uint8_t val) @@ -65,29 +78,37 @@ _out.mode(PullNone); } } +#else +TouchScreen_kbv::TouchScreen_kbv(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rxplate) +{ + _yp = yp; + _xm = xm; + _ym = ym; + _xp = xp; + _rxplate = rxplate; + + pressureThreshhold = 10; +} + +void TouchScreen_kbv::pinModeVal(uint8_t p, uint8_t mode, uint8_t val) +{ + pinMode(p, mode); + digitalWrite(p, val); +} +#endif +// ******** end of conditional **** TSPoint_kbv TouchScreen_kbv::getPoint(void) { int x, y, z; int samples[NUMSAMPLES]; uint8_t i, valid = 1; - DigitalInOut _xpout(_xp), _xmout(_xm), _ypout(_yp), _ymout(_ym); -#if 1 + pinModeVal(_yp, 0, 0); pinModeVal(_ym, 0, 0); pinModeVal(_xp, 1, 1); pinModeVal(_xm, 1, 0); -#else - _ypout.input(); - _ymout.input(); - _ypout.mode(PullNone); - _ymout.mode(PullNone); - _xpout.output(); - _xmout.output(); - _xpout.write(1); - _xmout.write(0); -#endif for (i = 0; i < NUMSAMPLES; i++) { samples[i] = analogRead(_yp) ADC_ADJUST; } @@ -117,75 +138,42 @@ z = (1023 - (z2 - z1)); - return TSPoint_kbv(x, y, z); //XM, YP still in ANALOG mode -} - + // *** these two lines would ensure XM, YP are in Digital mode *** + //pinModeVal(_xm, 1, 1); // OUTPUT HIGH + //pinModeVal(_yp, 1, 1); // OUTPUT HIGH -TouchScreen_kbv::TouchScreen_kbv(PinName xp, PinName yp, PinName xm, PinName ym, uint16_t rxplate) -{ - _yp = yp; - _xm = xm; - _ym = ym; - _xp = xp; - _rxplate = rxplate; - - pressureThreshhold = 10; + return TSPoint_kbv(x, y, z); //XM, YP still in ANALOG mode } int TouchScreen_kbv::readTouchX(void) { - DigitalInOut _xpout(_xp), _xmout(_xm), _ypout(_yp), _ymout(_ym); - - _ypout.input(); - _ymout.input(); - _ypout.mode(PullNone); - _ymout.mode(PullNone); - - _xpout.output(); - _xmout.output(); - _xpout.write(1); - _xmout.write(0); + pinModeVal(_yp, 0, 0); + pinModeVal(_ym, 0, 0); + pinModeVal(_xp, 1, 1); + pinModeVal(_xm, 1, 0); return (1023 - (analogRead(_yp)) ADC_ADJUST); } - int TouchScreen_kbv::readTouchY(void) { - DigitalInOut _xpout(_xp), _xmout(_xm), _ypout(_yp), _ymout(_ym); - _xpout.input(); - _xmout.input(); - _xpout.mode(PullNone); - _xmout.mode(PullNone); - _ypout.output(); - _ymout.output(); - _ypout.write(1); - _ymout.write(0); + pinModeVal(_xp, 0, 0); + pinModeVal(_xm, 0, 0); + pinModeVal(_yp, 1, 1); + pinModeVal(_ym, 1, 0); return (1023 - (analogRead(_xm)) ADC_ADJUST); } - uint16_t TouchScreen_kbv::pressure(void) { - DigitalInOut _xpout(_xp), _xmout(_xm), _ypout(_yp), _ymout(_ym); - // Set X+ to ground - _xpout.output(); - _xpout.write(0); - - // Set Y- to VCC - _ymout.output(); //.kbv - _ymout.write(1); - // Hi-Z X- and Y+ - _xmout.write(0); //.kbv - _xmout.input(); //.kbv - _ypout.write(0); - _ypout.input(); + pinModeVal(_xp, 1, 0); // Set X+ to ground + pinModeVal(_xm, 0, 0); // Hi-Z + pinModeVal(_yp, 0, 0); // Hi-Z + pinModeVal(_ym, 1, 1); // Set Y- to VCC int z1 = analogRead(_xm) ADC_ADJUST; int z2 = analogRead(_yp) ADC_ADJUST; return (1023 - (z2 - z1)); } - -
--- a/TouchScreen_kbv_mbed.h Mon Apr 26 15:15:38 2021 +0000 +++ b/TouchScreen_kbv_mbed.h Mon Apr 26 16:27:29 2021 +0000 @@ -20,8 +20,11 @@ class TouchScreen_kbv { public: +#if defined(__MBED__) TouchScreen_kbv(PinName xp, PinName yp, PinName xm, PinName ym, uint16_t rx = 0); - +#else + TouchScreen_kbv(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rx = 0); +#endif // bool isTouching(void); uint16_t pressure(void); int readTouchY(); @@ -30,9 +33,14 @@ int16_t pressureThreshhold; private: +#if defined(__MBED__) uint16_t analogRead(PinName p); void pinModeVal(PinName p, uint8_t mode, uint8_t val); PinName _yp, _ym, _xm, _xp; +#else + void pinModeVal(uint8_t p, uint8_t mode, uint8_t val); + uint8_t _yp, _ym, _xm, _xp; +#endif uint16_t _rxplate; };