A 5-wire resistive touch screen controller.

Committer:
Generic
Date:
Wed Oct 26 10:39:37 2016 +0000
Revision:
4:140d6bff4860
Parent:
3:3e240b27bd4a
Updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kerneels Bezuidenhout 1:51bde7ae4a65 1 #ifndef RESISTIVE_TOUCH_CONTROLLER_HPP
Kerneels Bezuidenhout 1:51bde7ae4a65 2 #define RESISTIVE_TOUCH_CONTROLLER_HPP
Kerneels Bezuidenhout 1:51bde7ae4a65 3
Kerneels Bezuidenhout 1:51bde7ae4a65 4 //-- Macros for calibration function
Kerneels Bezuidenhout 1:51bde7ae4a65 5 #define X_T1 t[0][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 6 #define X_T2 t[1][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 7 #define X_T3 t[2][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 8
Kerneels Bezuidenhout 1:51bde7ae4a65 9 #define Y_T1 t[0][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 10 #define Y_T2 t[1][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 11 #define Y_T3 t[2][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 12
Kerneels Bezuidenhout 1:51bde7ae4a65 13 #define X_D1 d[0][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 14 #define X_D2 d[1][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 15 #define X_D3 d[2][0]
Kerneels Bezuidenhout 1:51bde7ae4a65 16
Kerneels Bezuidenhout 1:51bde7ae4a65 17 #define Y_D1 d[0][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 18 #define Y_D2 d[1][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 19 #define Y_D3 d[2][1]
Kerneels Bezuidenhout 1:51bde7ae4a65 20
Kerneels Bezuidenhout 1:51bde7ae4a65 21 #include "mbed.h"
Kerneels Bezuidenhout 1:51bde7ae4a65 22
Kerneels Bezuidenhout 3:3e240b27bd4a 23 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 24 * A library to get xy-coordinates from a 5-wire resistive touchc screen
Kerneels Bezuidenhout 3:3e240b27bd4a 25 *
Kerneels Bezuidenhout 3:3e240b27bd4a 26 * @author CA Bezuidenhout
Kerneels Bezuidenhout 3:3e240b27bd4a 27 */
Kerneels Bezuidenhout 1:51bde7ae4a65 28 class ResistiveTouchController
Kerneels Bezuidenhout 1:51bde7ae4a65 29 {
Kerneels Bezuidenhout 1:51bde7ae4a65 30 public:
Kerneels Bezuidenhout 3:3e240b27bd4a 31 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 32 * @param ur : Upper right pin of screen (Digital)
Kerneels Bezuidenhout 3:3e240b27bd4a 33 * @param lr : Lower right pin of screen (Digital)
Kerneels Bezuidenhout 3:3e240b27bd4a 34 * @param s : Wiper pin of screen (Analog)
Kerneels Bezuidenhout 3:3e240b27bd4a 35 * @param ul : Upper left pin of screen (Digital)
Kerneels Bezuidenhout 3:3e240b27bd4a 36 * @param ll : Lower left pin of screen (Digital)
Kerneels Bezuidenhout 3:3e240b27bd4a 37 * @param num_of_samples : Number of samples used to calculate average analog value (default 5)
Kerneels Bezuidenhout 3:3e240b27bd4a 38 * @param settle : Time in seconds required for the electric field to settle (default 2ms)
Kerneels Bezuidenhout 3:3e240b27bd4a 39 */
Generic 2:a4ebeb3ba49c 40 ResistiveTouchController(PinName ur, PinName lr, PinName s, PinName ul, PinName ll, int num_of_samples = 5, float settle = 0.002);
Kerneels Bezuidenhout 1:51bde7ae4a65 41
Kerneels Bezuidenhout 3:3e240b27bd4a 42 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 43 Determines if screen is touched.
Kerneels Bezuidenhout 3:3e240b27bd4a 44 *
Kerneels Bezuidenhout 3:3e240b27bd4a 45 * @returns 1 if touch is detected, 0 if not.
Kerneels Bezuidenhout 3:3e240b27bd4a 46 */
Kerneels Bezuidenhout 1:51bde7ae4a65 47 int TouchDetected();
Kerneels Bezuidenhout 3:3e240b27bd4a 48
Kerneels Bezuidenhout 3:3e240b27bd4a 49 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 50 * Measured the analog values for x and y coordinates
Kerneels Bezuidenhout 3:3e240b27bd4a 51 */
Kerneels Bezuidenhout 1:51bde7ae4a65 52 void Measure();
Kerneels Bezuidenhout 1:51bde7ae4a65 53
Kerneels Bezuidenhout 3:3e240b27bd4a 54 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 55 * Get the raw analog value of the x coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 56 *
Kerneels Bezuidenhout 3:3e240b27bd4a 57 * @returns Raw analog value of x coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 58 */
Generic 2:a4ebeb3ba49c 59 float RawX();
Kerneels Bezuidenhout 3:3e240b27bd4a 60
Kerneels Bezuidenhout 3:3e240b27bd4a 61 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 62 * Get the raw analog value of the y coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 63 *
Kerneels Bezuidenhout 3:3e240b27bd4a 64 * @returns Raw analog value of y coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 65 */
Kerneels Bezuidenhout 1:51bde7ae4a65 66 float RawY();
Kerneels Bezuidenhout 1:51bde7ae4a65 67
Kerneels Bezuidenhout 3:3e240b27bd4a 68 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 69 *Get the digital value of the x coordinate, calculated using \f$x = Ax_t + By_t+C\f$
Kerneels Bezuidenhout 3:3e240b27bd4a 70 *
Kerneels Bezuidenhout 3:3e240b27bd4a 71 * @returns Digital value of x coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 72 */
Generic 2:a4ebeb3ba49c 73 float X();
Kerneels Bezuidenhout 3:3e240b27bd4a 74
Kerneels Bezuidenhout 3:3e240b27bd4a 75 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 76 * Get the digital value of the y coordinate, calculated using \f$y = Dx_t + Ey_t+F\f$
Kerneels Bezuidenhout 3:3e240b27bd4a 77 *
Kerneels Bezuidenhout 3:3e240b27bd4a 78 * @returns Digital value of y coordinate
Kerneels Bezuidenhout 3:3e240b27bd4a 79 */
Generic 2:a4ebeb3ba49c 80 float Y();
Kerneels Bezuidenhout 1:51bde7ae4a65 81
Kerneels Bezuidenhout 3:3e240b27bd4a 82 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 83 * Calibrates the screen from 3 points.
Kerneels Bezuidenhout 3:3e240b27bd4a 84 *
Generic 4:140d6bff4860 85 * @param t[3][2] : Array containing the 3 raw data points
Kerneels Bezuidenhout 3:3e240b27bd4a 86 * <ul>
Generic 4:140d6bff4860 87 * <li>t[0][0] = Raw x value at 90% of x</li>
Generic 4:140d6bff4860 88 * <li>t[1][0] = Raw x value at 50% of x</li>
Generic 4:140d6bff4860 89 * <li>t[2][0] = Raw x value at 10% of x</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 90 * </ul>
Kerneels Bezuidenhout 3:3e240b27bd4a 91 * <ul>
Generic 4:140d6bff4860 92 * <li>t[0][1] = Raw y value at 50% of y</li>
Generic 4:140d6bff4860 93 * <li>t[1][1] = Raw y value at 90% of y</li>
Generic 4:140d6bff4860 94 * <li>t[2][1] = Raw y value at 10% of y</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 95 * </ul>
Kerneels Bezuidenhout 3:3e240b27bd4a 96 * -------------------------------------------------------
Generic 4:140d6bff4860 97 * @param d[3][2] : Array containing the 3 digital points
Kerneels Bezuidenhout 3:3e240b27bd4a 98 * <ul>
Generic 4:140d6bff4860 99 * <li>d[0][0] = Digital x value at 90% of x</li>
Generic 4:140d6bff4860 100 * <li>d[1][0] = Digital x value at 50% of x</li>
Generic 4:140d6bff4860 101 * <li>d[2][0] = Digital x value at 10% of x</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 102 * </ul>
Kerneels Bezuidenhout 3:3e240b27bd4a 103 * <ul>
Kerneels Bezuidenhout 3:3e240b27bd4a 104 * <li>_d[0][1] = Digital y value at 50% of y</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 105 * <li>_d[1][1] = Digital y value at 90% of y</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 106 * <li>_d[2][1] = Digital y value at 10% of y</li>
Kerneels Bezuidenhout 3:3e240b27bd4a 107 * </ul>
Kerneels Bezuidenhout 3:3e240b27bd4a 108 */
Kerneels Bezuidenhout 1:51bde7ae4a65 109 void Calibrate(float t[3][2], float d[3][2]);
Kerneels Bezuidenhout 1:51bde7ae4a65 110
Kerneels Bezuidenhout 3:3e240b27bd4a 111
Kerneels Bezuidenhout 3:3e240b27bd4a 112 /**
Kerneels Bezuidenhout 3:3e240b27bd4a 113 * Set the settle time of the screen
Kerneels Bezuidenhout 3:3e240b27bd4a 114 *
Kerneels Bezuidenhout 3:3e240b27bd4a 115 * @param settle : Time in seconds required for the electric field to settle (default 2ms)
Kerneels Bezuidenhout 3:3e240b27bd4a 116 */
Kerneels Bezuidenhout 1:51bde7ae4a65 117 void SetSettleTime(float settle);
Kerneels Bezuidenhout 1:51bde7ae4a65 118
Kerneels Bezuidenhout 1:51bde7ae4a65 119 private:
Kerneels Bezuidenhout 1:51bde7ae4a65 120 DigitalInOut _UR;
Kerneels Bezuidenhout 1:51bde7ae4a65 121 DigitalInOut _LR;
Kerneels Bezuidenhout 1:51bde7ae4a65 122 PinName _S;
Kerneels Bezuidenhout 1:51bde7ae4a65 123 DigitalInOut _UL;
Kerneels Bezuidenhout 1:51bde7ae4a65 124 DigitalInOut _LL;
Kerneels Bezuidenhout 1:51bde7ae4a65 125 Timer _delayTimer;
Kerneels Bezuidenhout 1:51bde7ae4a65 126
Kerneels Bezuidenhout 1:51bde7ae4a65 127 float _settle;
Kerneels Bezuidenhout 1:51bde7ae4a65 128
Kerneels Bezuidenhout 1:51bde7ae4a65 129 static const char DETECT_MODE = 1;
Kerneels Bezuidenhout 1:51bde7ae4a65 130 static const char X_MODE = 2;
Kerneels Bezuidenhout 1:51bde7ae4a65 131 static const char Y_MODE = 3;
Kerneels Bezuidenhout 1:51bde7ae4a65 132
Kerneels Bezuidenhout 1:51bde7ae4a65 133 float A,B,C,D,E,F;
Kerneels Bezuidenhout 1:51bde7ae4a65 134
Kerneels Bezuidenhout 1:51bde7ae4a65 135 float _xt, _yt;
Kerneels Bezuidenhout 1:51bde7ae4a65 136
Kerneels Bezuidenhout 1:51bde7ae4a65 137 int _samples;
Kerneels Bezuidenhout 1:51bde7ae4a65 138
Kerneels Bezuidenhout 1:51bde7ae4a65 139 void ConfigPins(char mode);
Kerneels Bezuidenhout 1:51bde7ae4a65 140 float MeasureS();
Kerneels Bezuidenhout 1:51bde7ae4a65 141 void Delay(float time);
Kerneels Bezuidenhout 1:51bde7ae4a65 142 };
Kerneels Bezuidenhout 1:51bde7ae4a65 143 #endif