Frank Vannieuwkerke / Mini-DK

Dependencies:   SPI_TFT_ILI9320

Dependents:   LPC1768_Mini-DK_EasyWeb_DM9161 LPC1768_Mini-DK LPC1768_Mini-DK

Fork of Mini-DK by Frank Vannieuwkerke

Committer:
frankvnk
Date:
Fri Jan 11 16:22:03 2013 +0000
Revision:
19:6816fa47b39e
Parent:
18:f045ae645960
Child:
20:5feb12e3801f
In Mini_DK.h #include "SPI_TFT.h" renamed to #include "SPI_TFT_ILI9320.h"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 7:ffdd4e75b366 1 /******************************************************************
frankvnk 7:ffdd4e75b366 2 ***** *****
frankvnk 7:ffdd4e75b366 3 ***** Name: Touch.h *****
frankvnk 7:ffdd4e75b366 4 ***** Ver.: 1.0 *****
frankvnk 7:ffdd4e75b366 5 ***** Date: 04/01/2013 *****
frankvnk 7:ffdd4e75b366 6 ***** Auth: Frank Vannieuwkerke *****
frankvnk 7:ffdd4e75b366 7 ***** Erik Olieman *****
frankvnk 7:ffdd4e75b366 8 ***** Func: Touch driver for use with ADS7843 *****
frankvnk 7:ffdd4e75b366 9 ***** *****
frankvnk 7:ffdd4e75b366 10 ******************************************************************/
frankvnk 2:d0acbd263ec7 11
frankvnk 2:d0acbd263ec7 12 #ifndef MBED_Touch_H
frankvnk 2:d0acbd263ec7 13 #define MBED_Touch_H
frankvnk 2:d0acbd263ec7 14
frankvnk 18:f045ae645960 15 #include "SPI_TFT_ILI9320.h"
frankvnk 2:d0acbd263ec7 16 #include "mbed.h"
frankvnk 2:d0acbd263ec7 17
frankvnk 2:d0acbd263ec7 18 typedef struct
frankvnk 2:d0acbd263ec7 19 {
frankvnk 2:d0acbd263ec7 20 int x;
frankvnk 2:d0acbd263ec7 21 int y;
frankvnk 2:d0acbd263ec7 22 } Coordinate;
frankvnk 2:d0acbd263ec7 23
frankvnk 2:d0acbd263ec7 24 typedef struct
frankvnk 2:d0acbd263ec7 25 {
frankvnk 2:d0acbd263ec7 26 int An,
frankvnk 2:d0acbd263ec7 27 Bn,
frankvnk 2:d0acbd263ec7 28 Cn,
frankvnk 2:d0acbd263ec7 29 Dn,
frankvnk 2:d0acbd263ec7 30 En,
frankvnk 2:d0acbd263ec7 31 Fn,
frankvnk 2:d0acbd263ec7 32 Divider ;
frankvnk 2:d0acbd263ec7 33 } Matrix;
frankvnk 2:d0acbd263ec7 34
frankvnk 2:d0acbd263ec7 35 class TouchScreenADS7843 {
frankvnk 2:d0acbd263ec7 36 public:
frankvnk 2:d0acbd263ec7 37 Coordinate display;
frankvnk 2:d0acbd263ec7 38 Coordinate screen;
frankvnk 2:d0acbd263ec7 39
frankvnk 3:fb4d62b5ffb3 40 /*
frankvnk 3:fb4d62b5ffb3 41 * Create a Touchscreen object connected to SPI and two pins
frankvnk 3:fb4d62b5ffb3 42 *
frankvnk 3:fb4d62b5ffb3 43 * @param mosi,miso,sclk SPI
frankvnk 3:fb4d62b5ffb3 44 * @param cs pin connected to CS of ADS7843
frankvnk 3:fb4d62b5ffb3 45 * @param irq pin connected to IRQ of ADS7843
frankvnk 3:fb4d62b5ffb3 46 * @param pointer to SPI_TFT constructor
frankvnk 3:fb4d62b5ffb3 47 *
frankvnk 3:fb4d62b5ffb3 48 */
frankvnk 3:fb4d62b5ffb3 49 TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, SPI_TFT *_LCD);
frankvnk 2:d0acbd263ec7 50
frankvnk 7:ffdd4e75b366 51 /*
frankvnk 7:ffdd4e75b366 52 * Draw a 2 by 2 dot on the LCD screen
frankvnk 7:ffdd4e75b366 53 *
frankvnk 7:ffdd4e75b366 54 * @param x (horizontal position)
frankvnk 7:ffdd4e75b366 55 * @param y (vertical position)
frankvnk 7:ffdd4e75b366 56 * @param color (16 bit pixel color)
frankvnk 7:ffdd4e75b366 57 *
frankvnk 7:ffdd4e75b366 58 */
frankvnk 2:d0acbd263ec7 59 void TP_DrawPoint(unsigned int Xpos,unsigned int Ypos,unsigned int color);
frankvnk 7:ffdd4e75b366 60
frankvnk 7:ffdd4e75b366 61 /*
frankvnk 7:ffdd4e75b366 62 * Obtain averaged data from ADS7846
frankvnk 7:ffdd4e75b366 63 * does 9 consecutive reads and only stores averaged data
frankvnk 7:ffdd4e75b366 64 * when the 9 points are within the treshold limits.
frankvnk 7:ffdd4e75b366 65 *
frankvnk 7:ffdd4e75b366 66 * @param screenPTR (pointer to store data)
frankvnk 7:ffdd4e75b366 67 * @returns 1 on success
frankvnk 7:ffdd4e75b366 68 * @returns 0 on failure
frankvnk 7:ffdd4e75b366 69 *
frankvnk 7:ffdd4e75b366 70 * If called with screenPTR = NULL - 'screen' variable is used, otherwise (parameter) is used.
frankvnk 7:ffdd4e75b366 71 *
frankvnk 7:ffdd4e75b366 72 */
frankvnk 3:fb4d62b5ffb3 73 unsigned char Read_Ads7846(Coordinate * screenPtr = NULL);
frankvnk 7:ffdd4e75b366 74
frankvnk 7:ffdd4e75b366 75 /*
frankvnk 7:ffdd4e75b366 76 * Calibrate the touch panel.
frankvnk 7:ffdd4e75b366 77 * Three crosshairs are drawn and need to be touched in sequence.
frankvnk 7:ffdd4e75b366 78 * A calibration matrix is set accordingly.
frankvnk 7:ffdd4e75b366 79 *
frankvnk 7:ffdd4e75b366 80 */
frankvnk 2:d0acbd263ec7 81 void TouchPanel_Calibrate(void);
frankvnk 7:ffdd4e75b366 82
frankvnk 7:ffdd4e75b366 83 /*
frankvnk 7:ffdd4e75b366 84 * Obtain real x,y coordinates
frankvnk 7:ffdd4e75b366 85 * The x,y coordinates are calculated using the calibration matrix.
frankvnk 7:ffdd4e75b366 86 *
frankvnk 7:ffdd4e75b366 87 */
frankvnk 2:d0acbd263ec7 88 unsigned char getDisplayPoint(void);
frankvnk 2:d0acbd263ec7 89
frankvnk 2:d0acbd263ec7 90 SPI_TFT *LCD;
frankvnk 2:d0acbd263ec7 91 SPI _tp_spi;
frankvnk 2:d0acbd263ec7 92 DigitalOut _tp_cs;
frankvnk 2:d0acbd263ec7 93 DigitalIn _tp_irq;
frankvnk 2:d0acbd263ec7 94
frankvnk 2:d0acbd263ec7 95 protected:
frankvnk 2:d0acbd263ec7 96
frankvnk 3:fb4d62b5ffb3 97 #define SPI_RD_DELAY 1
frankvnk 3:fb4d62b5ffb3 98 #define CHX 0xd0 // 12 bit mode
frankvnk 3:fb4d62b5ffb3 99 #define CHY 0x90
frankvnk 2:d0acbd263ec7 100
frankvnk 3:fb4d62b5ffb3 101 Coordinate DisplaySample[3];
frankvnk 3:fb4d62b5ffb3 102 Coordinate ScreenSample[3];
frankvnk 3:fb4d62b5ffb3 103 Matrix matrix;
frankvnk 3:fb4d62b5ffb3 104
frankvnk 7:ffdd4e75b366 105 /*
frankvnk 7:ffdd4e75b366 106 * Obtain raw x,y data from ADS7846
frankvnk 7:ffdd4e75b366 107 *
frankvnk 7:ffdd4e75b366 108 * @param pointer to raw x and y coordinates (pointer to store data)
frankvnk 7:ffdd4e75b366 109 * @returns x (horizontal position)
frankvnk 7:ffdd4e75b366 110 * @returns y (vertical position)
frankvnk 7:ffdd4e75b366 111 *
frankvnk 7:ffdd4e75b366 112 */
frankvnk 3:fb4d62b5ffb3 113 void TP_GetAdXY(int *x,int *y);
frankvnk 7:ffdd4e75b366 114
frankvnk 7:ffdd4e75b366 115 /*
frankvnk 7:ffdd4e75b366 116 * Obtain raw single channel data from ADS7846 (Called by TP_GetADXY)
frankvnk 7:ffdd4e75b366 117 *
frankvnk 7:ffdd4e75b366 118 * @param channel to be read (CHX or CHY)
frankvnk 7:ffdd4e75b366 119 * @returns raw scaled down value (return value range must be between 0 and 1024)
frankvnk 7:ffdd4e75b366 120 *
frankvnk 7:ffdd4e75b366 121 */
frankvnk 2:d0acbd263ec7 122 int Read_XY(unsigned char XY);
frankvnk 7:ffdd4e75b366 123
frankvnk 7:ffdd4e75b366 124 /*
frankvnk 7:ffdd4e75b366 125 * Draw a calibration crosshair on the LCD screen
frankvnk 7:ffdd4e75b366 126 *
frankvnk 7:ffdd4e75b366 127 * @param x (horizontal position)
frankvnk 7:ffdd4e75b366 128 * @param y (vertical position)
frankvnk 7:ffdd4e75b366 129 *
frankvnk 7:ffdd4e75b366 130 */
frankvnk 2:d0acbd263ec7 131 void DrawCross(unsigned int Xpos,unsigned int Ypos);
frankvnk 7:ffdd4e75b366 132
frankvnk 7:ffdd4e75b366 133 /*
frankvnk 7:ffdd4e75b366 134 * Set the calibration matrix
frankvnk 7:ffdd4e75b366 135 *
frankvnk 7:ffdd4e75b366 136 * @param displayPTR (pointer to display data)
frankvnk 7:ffdd4e75b366 137 * @param screenPTR (pointer to screen data)
frankvnk 7:ffdd4e75b366 138 * @param matrixPTR (pointer to calibration matrix)
frankvnk 7:ffdd4e75b366 139 *
frankvnk 7:ffdd4e75b366 140 * @returns 0 when matrix.divider != 0
frankvnk 7:ffdd4e75b366 141 * @returns 1 when matrix.divider = 0
frankvnk 7:ffdd4e75b366 142 *
frankvnk 7:ffdd4e75b366 143 */
frankvnk 2:d0acbd263ec7 144 unsigned char setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
frankvnk 2:d0acbd263ec7 145
frankvnk 2:d0acbd263ec7 146 };
frankvnk 2:d0acbd263ec7 147 #endif