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

Files at this revision

API Documentation at this revision

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;
 };