A 5-wire resistive touch screen controller.
ResistiveTouchController.hpp@4:140d6bff4860, 2016-10-26 (annotated)
- Committer:
- Generic
- Date:
- Wed Oct 26 10:39:37 2016 +0000
- Revision:
- 4:140d6bff4860
- Parent:
- 3:3e240b27bd4a
Updated
Who changed what in which revision?
User | Revision | Line number | New 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 |