- ANALOG METER, initial offering - Emulation of an analog/mechanical meter using the SPI TFT display \"http://mbed.org/cookbook/SPI-driven-QVGA-TFT\" (touch not used) Meter takes an integer number from 0 - 100 and uses that number to position the meter\'s needle - An additional auto-scaling feature allows for + floating numbers from 0.0 - 10000.0 in \"NewfNumb\" Scaling is noted two ways a. Color of the meter body changes b. A text scale factor is displayed in the upper, right-hand corner, near the full scale reading Value of \"NewfNumb\" Meter_Body Scale_Factor < -0.0 Blue 0 0.1 - 9.9 Green x1 10.0 - 99.0 Yellow x10 100.0 - 999.0 Orange x100 1000.0 - 9990.0 Red x1k >= 10000.0 Red peg! - If NewfNumb is > 600.0, a flashing yellow warning message appears in the center of the meter movement - The date and time are displayed in the lower right corner of the display - The value of NewfNumb being shown in the movement is also displayed in the lower left coener of the display - A timer ISR automatically updates the meter\'s movement Other Stuff: - Additional demo test program, walks analog meter up and down through all auto scales by manipulating the value of NewfNumb - USB serial port used to dump a few messages. Not needed, set to 921600 BAUD - LED1 slowly gets brighter and dimmer as main loop runs - If for some reason, the \"MeterNumber\" int register ends up >100 or <0, a Purple display appears at 50% movement with a \"bad#\" scale factor - There is NO provision for setting the RTC. Note that TimeZone and DST are added to the RTC number

Dependencies:   mbed

Committer:
loopsva
Date:
Tue Jan 31 19:40:57 2012 +0000
Revision:
0:fc70640071d2
100

Who changed what in which revision?

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