Modified copy of Peter Dresche lib using fewer analogue pins for touch panel

Committer:
JonFreeman
Date:
Sat Aug 11 15:30:10 2012 +0000
Revision:
0:ab6e91032412
[mbed] converted /energy_saver/Touch_tft

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JonFreeman 0:ab6e91032412 1 /* mbed library for touchscreen connected to 4 mbed pins
JonFreeman 0:ab6e91032412 2 * derive from SPI_TFT lib
JonFreeman 0:ab6e91032412 3 * Copyright (c) 2011 Peter Drescher - DC2PD
JonFreeman 0:ab6e91032412 4 *
JonFreeman 0:ab6e91032412 5 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JonFreeman 0:ab6e91032412 6 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JonFreeman 0:ab6e91032412 7 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JonFreeman 0:ab6e91032412 8 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JonFreeman 0:ab6e91032412 9 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JonFreeman 0:ab6e91032412 10 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
JonFreeman 0:ab6e91032412 11 * THE SOFTWARE.
JonFreeman 0:ab6e91032412 12 */
JonFreeman 0:ab6e91032412 13
JonFreeman 0:ab6e91032412 14 #ifndef MBED_TOUCH_H
JonFreeman 0:ab6e91032412 15 #define MBED_TOUCH_H
JonFreeman 0:ab6e91032412 16
JonFreeman 0:ab6e91032412 17 #include "mbed.h"
JonFreeman 0:ab6e91032412 18 #include "SPI_TFT.h"
JonFreeman 0:ab6e91032412 19
JonFreeman 0:ab6e91032412 20 struct point{
JonFreeman 0:ab6e91032412 21 unsigned short x;
JonFreeman 0:ab6e91032412 22 unsigned short y;
JonFreeman 0:ab6e91032412 23 };
JonFreeman 0:ab6e91032412 24
JonFreeman 0:ab6e91032412 25
JonFreeman 0:ab6e91032412 26 /** touchscreen control class, based on SPI_TFT
JonFreeman 0:ab6e91032412 27 *
JonFreeman 0:ab6e91032412 28 * Example:
JonFreeman 0:ab6e91032412 29 * @code
JonFreeman 0:ab6e91032412 30 *
JonFreeman 0:ab6e91032412 31 * #include "mbed.h"
JonFreeman 0:ab6e91032412 32 * #include "SPI_TFT.h"
JonFreeman 0:ab6e91032412 33 * #include "Arial12x12.h"
JonFreeman 0:ab6e91032412 34 * #include "Arial28x28.h"
JonFreeman 0:ab6e91032412 35 * #include "touch_tft.h"
JonFreeman 0:ab6e91032412 36 * // the TFT is connected to SPI pin 5-7
JonFreeman 0:ab6e91032412 37 * // the touch is connected to 19,20,16,17
JonFreeman 0:ab6e91032412 38 *
JonFreeman 0:ab6e91032412 39 * touch_tft tt(p19,p20,p16,p17,p5, p6, p7, p8, p15,"TFT"); // x+,x-,y+,y-,mosi, miso, sclk, cs, reset
JonFreeman 0:ab6e91032412 40 *
JonFreeman 0:ab6e91032412 41 * int main() {
JonFreeman 0:ab6e91032412 42 * point p;
JonFreeman 0:ab6e91032412 43 *
JonFreeman 0:ab6e91032412 44 * tt.claim(stdout); // send stdout to the TFT display
JonFreeman 0:ab6e91032412 45 * tt.background(Black); // set background to black
JonFreeman 0:ab6e91032412 46 * tt.foreground(White); // set chars to white
JonFreeman 0:ab6e91032412 47 * tt.cls(); // clear the screen
JonFreeman 0:ab6e91032412 48 * tt.set_font((unsigned char*) Arial12x12); // select the font
JonFreeman 0:ab6e91032412 49 * tt.set_orientation(1);
JonFreeman 0:ab6e91032412 50 *
JonFreeman 0:ab6e91032412 51 * tt.calibrate(); // calibrate the touch
JonFreeman 0:ab6e91032412 52 * while (1) {
JonFreeman 0:ab6e91032412 53 * p = tt.get_touch(); // read analog pos.
JonFreeman 0:ab6e91032412 54 * if (tt.is_touched(p)) { // test if touched
JonFreeman 0:ab6e91032412 55 * p = tt.to_pixel(p); // convert to pixel pos
JonFreeman 0:ab6e91032412 56 * tt.fillcircle(p.x,p.y,3,Blue); // print a blue dot on the screen
JonFreeman 0:ab6e91032412 57 * }
JonFreeman 0:ab6e91032412 58 * }
JonFreeman 0:ab6e91032412 59 * @endcode
JonFreeman 0:ab6e91032412 60 */
JonFreeman 0:ab6e91032412 61 class touch_tft : public SPI_TFT{
JonFreeman 0:ab6e91032412 62 public:
JonFreeman 0:ab6e91032412 63 /** create a TFT with touch object connected to the pins:
JonFreeman 0:ab6e91032412 64 *
JonFreeman 0:ab6e91032412 65 * @param pin xp resistiv touch x+
JonFreeman 0:ab6e91032412 66 * @param pin xm resistiv touch x-
JonFreeman 0:ab6e91032412 67 * @param pin yp resistiv touch y+
JonFreeman 0:ab6e91032412 68 * @param pin ym resistiv touch y-
JonFreeman 0:ab6e91032412 69 * @param mosi,miso,sclk SPI connection to TFT
JonFreeman 0:ab6e91032412 70 * @param cs pin connected to CS of display
JonFreeman 0:ab6e91032412 71 * @param reset pin connected to RESET of display
JonFreeman 0:ab6e91032412 72 * based on my SPI_TFT lib
JonFreeman 0:ab6e91032412 73 */
JonFreeman 0:ab6e91032412 74 touch_tft(PinName xp, PinName xm, PinName yp, PinName ym,PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset,const char* name ="TFT");
JonFreeman 0:ab6e91032412 75
JonFreeman 0:ab6e91032412 76 /** calibrate the touch display
JonFreeman 0:ab6e91032412 77 *
JonFreeman 0:ab6e91032412 78 * User is asked to touch on two points on the screen
JonFreeman 0:ab6e91032412 79 */
JonFreeman 0:ab6e91032412 80 void calibrate(void);
JonFreeman 0:ab6e91032412 81 void noncalibrate(void);
JonFreeman 0:ab6e91032412 82
JonFreeman 0:ab6e91032412 83 /** read x and y analog samples
JonFreeman 0:ab6e91032412 84 *
JonFreeman 0:ab6e91032412 85 * @returns point(x,y)
JonFreeman 0:ab6e91032412 86 */
JonFreeman 0:ab6e91032412 87 point get_touch(void);
JonFreeman 0:ab6e91032412 88
JonFreeman 0:ab6e91032412 89 /** calculate coord on screen
JonFreeman 0:ab6e91032412 90 *
JonFreeman 0:ab6e91032412 91 * @param a_point point(analog x, analog y)
JonFreeman 0:ab6e91032412 92 * @returns point(pixel x, pixel y)
JonFreeman 0:ab6e91032412 93 *
JonFreeman 0:ab6e91032412 94 */
JonFreeman 0:ab6e91032412 95 point to_pixel(point a_point);
JonFreeman 0:ab6e91032412 96
JonFreeman 0:ab6e91032412 97 /** test if screen is touched
JonFreeman 0:ab6e91032412 98 *
JonFreeman 0:ab6e91032412 99 * @param point analog x,y
JonFreeman 0:ab6e91032412 100 * @returns true is touched
JonFreeman 0:ab6e91032412 101 *
JonFreeman 0:ab6e91032412 102 */
JonFreeman 0:ab6e91032412 103 bool is_touched(point a);
JonFreeman 0:ab6e91032412 104
JonFreeman 0:ab6e91032412 105 protected:
JonFreeman 0:ab6e91032412 106 DigitalInOut _xp;
JonFreeman 0:ab6e91032412 107 DigitalInOut _xm;
JonFreeman 0:ab6e91032412 108 DigitalInOut _yp;
JonFreeman 0:ab6e91032412 109 DigitalInOut _ym;
JonFreeman 0:ab6e91032412 110 AnalogIn _ax;
JonFreeman 0:ab6e91032412 111 AnalogIn _ay;
JonFreeman 0:ab6e91032412 112 PinName xa;
JonFreeman 0:ab6e91032412 113 PinName ya;
JonFreeman 0:ab6e91032412 114
JonFreeman 0:ab6e91032412 115
JonFreeman 0:ab6e91032412 116 unsigned short x_a,y_a;
JonFreeman 0:ab6e91032412 117 unsigned short x_off,y_off;
JonFreeman 0:ab6e91032412 118 unsigned short pp_tx,pp_ty;
JonFreeman 0:ab6e91032412 119
JonFreeman 0:ab6e91032412 120
JonFreeman 0:ab6e91032412 121
JonFreeman 0:ab6e91032412 122 };
JonFreeman 0:ab6e91032412 123
JonFreeman 0:ab6e91032412 124 #endif