Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ResistiveTouchController.cpp@1:51bde7ae4a65, 2016-10-08 (annotated)
- Committer:
- Kerneels Bezuidenhout
- Date:
- Sat Oct 08 19:22:11 2016 +0200
- Revision:
- 1:51bde7ae4a65
- Parent:
- 0:c04a78051c81
- Child:
- 2:a4ebeb3ba49c
Initial version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 1 | #include "ResistiveTouchController.hpp" |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 2 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 3 | ResistiveTouchController::ResistiveTouchController(PinName ur, PinName lr, PinName s, PinName ul, PinName ll, int num_of_samples = 5, int settle = 20) : |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 4 | _UR(ur), |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 5 | _LR(lr), |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 6 | _UL(ul), |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 7 | _LL(ll) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 8 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 9 | _UR.output(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 10 | _UR.mode(PullNone); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 11 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 12 | _LR.output(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 13 | _LR.mode(PullNone); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 14 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 15 | _UL.output(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 16 | _UL.mode(PullNone); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 17 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 18 | _LL.output(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 19 | _LL.mode(PullNone); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 20 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 21 | _S = s; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 22 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 23 | _samples = num_of_samples; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 24 | _settle = settle; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 25 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 26 | //-- Change these values if needed for desired screen |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 27 | A = 1660.540541f; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 28 | B = 20.5005005f; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 29 | C = -334.0556557f; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 30 | D = 0.0f; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 31 | E = 1517.037037f; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 32 | F = -246.5185185; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 33 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 34 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 35 | int ResistiveTouchController::TouchDetected() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 36 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 37 | DigitalIn S(_S, PullUp); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 38 | ConfigPins(DETECT_MODE); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 39 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 40 | return ( !S.read() ); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 41 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 42 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 43 | void ResistiveTouchController::Measure() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 44 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 45 | ConfigPins(X_MODE); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 46 | _xt = MeasureS(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 47 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 48 | ConfigPins(Y_MODE); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 49 | _yt = MeasureS(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 50 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 51 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 52 | void ResistiveTouchController::RawX() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 53 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 54 | return _xt; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 55 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 56 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 57 | void ResistiveTouchController::RawY() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 58 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 59 | return _yt; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 60 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 61 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 62 | void ResistiveTouchController::X() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 63 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 64 | return (A*_xt+B*_yt+C); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 65 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 66 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 67 | void ResistiveTouchController::Y() |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 68 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 69 | return (D*_xt+E*_yt+F); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 70 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 71 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 72 | void ResistiveTouchController::Calibrate(float t[3][2], float d[3][2]) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 73 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 74 | A = (X_D1*(Y_T2-Y_T3)+X_D2*(Y_T3-Y_T1)+X_D3*(Y_T1-Y_T2))/(X_T1*(Y_T2-Y_T3)+X_T2*(Y_T3-Y_T1)+X_T3*(Y_T1-Y_T2)); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 75 | B = (A*(X_T3-X_T2)+X_D2-X_D3)/(Y_T2-Y_T3); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 76 | C = X_D3-A*X_T3-B*Y_T3; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 77 | D = (Y_D1*(Y_T2-Y_T3)+Y_D2*(Y_T3-Y_T1)+Y_D3*(Y_T1-Y_T2))/(X_T1*(Y_T2-Y_T3)+X_T2*(Y_T3-Y_T1)+X_T3*(Y_T1-Y_T2)); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 78 | E = (D*(X_T3-X_T2)+Y_D2-Y_D3)/(Y_T2-Y_T3); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 79 | F = Y_D3-D*X_T3-E*Y_T3; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 80 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 81 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 82 | void ResistiveTouchController::SetSettleTime(int settle) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 83 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 84 | _settle = settle; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 85 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 86 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 87 | void ResistiveTouchController::ConfigPins(char mode) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 88 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 89 | switch (mode) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 90 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 91 | case DETECT_MODE: |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 92 | _UR.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 93 | _UL.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 94 | _LR.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 95 | _LL.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 96 | break; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 97 | case X_MODE: |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 98 | _UR.write(1); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 99 | _UL.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 100 | _LR.write(1); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 101 | _LL.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 102 | break; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 103 | case Y_MODE: |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 104 | _UR.write(1); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 105 | _UL.write(1); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 106 | _LR.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 107 | _LL.write(0); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 108 | break; |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 109 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 110 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 111 | Delay(_settle); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 112 | } |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 113 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 114 | void ResistiveTouchController::Delay(float time) |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 115 | { |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 116 | _delayTimer.start(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 117 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 118 | while( _delayTimer.read() < time ); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 119 | |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 120 | _delayTimer.stop(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 121 | _delayTimer.reset(); |
| Kerneels Bezuidenhout |
1:51bde7ae4a65 | 122 | } |