Library for EarthLCD ezLCD3xx line of products

Dependents:   ezLCDTest

/media/uploads/codeman/front.jpg /media/uploads/codeman/all.jpg /media/uploads/codeman/arlcd.jpg /media/uploads/codeman/side.jpg

Committer:
codeman
Date:
Mon Apr 22 06:33:57 2013 +0000
Revision:
0:65606abcae36
Child:
1:c7659c8af0d3
first one 4/22/2013

Who changed what in which revision?

UserRevisionLine numberNew contents of line
codeman 0:65606abcae36 1 /*
codeman 0:65606abcae36 2 *
codeman 0:65606abcae36 3 *
codeman 0:65606abcae36 4 * @author Ken Segler
codeman 0:65606abcae36 5 *
codeman 0:65606abcae36 6 */
codeman 0:65606abcae36 7
codeman 0:65606abcae36 8 /** Interface to the Sparkfun Serial Graphic LCD, LCD-09351; and Graphic
codeman 0:65606abcae36 9 * LCD Serial Backpack, LCD-09352. Derived class from Serial so that you
codeman 0:65606abcae36 10 * can conveniently printf(), putc(), etc to the display.
codeman 0:65606abcae36 11 *
codeman 0:65606abcae36 12 * Example:
codeman 0:65606abcae36 13 * @code
codeman 0:65606abcae36 14 * #include "mbed.h"
codeman 0:65606abcae36 15 * #include "ezLCDLib.h"
codeman 0:65606abcae36 16 *
codeman 0:65606abcae36 17 * SerialGraphicLCD lcd(p26, p25);
codeman 0:65606abcae36 18 *
codeman 0:65606abcae36 19 * int main() {
codeman 0:65606abcae36 20 * lcd.baud(115200); // default baud rate
codeman 0:65606abcae36 21 * while (1) {
codeman 0:65606abcae36 22 * lcd.clear();
codeman 0:65606abcae36 23 * lcd.rect(3, 3, 20, 20);
codeman 0:65606abcae36 24 * lcd.printf("Hello World!");
codeman 0:65606abcae36 25 * lcd.pixel(14, 35, true);
codeman 0:65606abcae36 26 * lcd.pixel(16, 36, true);
codeman 0:65606abcae36 27 * lcd.pixel(18, 37, true);
codeman 0:65606abcae36 28 * lcd.pos(5, 30);
codeman 0:65606abcae36 29 * lcd.printf("Hi");
codeman 0:65606abcae36 30 * lcd.circle(50, 20, 20, true);
codeman 0:65606abcae36 31 * lcd.pos(50, 20);
codeman 0:65606abcae36 32 * lcd.printf("Howdy");
codeman 0:65606abcae36 33 * lcd.line(0, 0, 25, 25, true);
codeman 0:65606abcae36 34 * wait(2);
codeman 0:65606abcae36 35 * }
codeman 0:65606abcae36 36 * }
codeman 0:65606abcae36 37 * @endcode
codeman 0:65606abcae36 38 */
codeman 0:65606abcae36 39 #ifndef _EZLCDLIB_H
codeman 0:65606abcae36 40 #define _EZLCDLIB_H
codeman 0:65606abcae36 41
codeman 0:65606abcae36 42 #include "mbed.h"
codeman 0:65606abcae36 43 #include "platform.h"
codeman 0:65606abcae36 44
codeman 0:65606abcae36 45 /** LCD Baud Rates */
codeman 0:65606abcae36 46 #define LCD_4800 1
codeman 0:65606abcae36 47 #define LCD_9600 2
codeman 0:65606abcae36 48 #define LCD_19200 3
codeman 0:65606abcae36 49 #define LCD_38400 4
codeman 0:65606abcae36 50 #define LCD_57600 5
codeman 0:65606abcae36 51 #define LCD_115200 6
codeman 0:65606abcae36 52
codeman 0:65606abcae36 53 /** LCD Types */
codeman 0:65606abcae36 54 #define LCD_128x64 1
codeman 0:65606abcae36 55 #define LCD_160x128 2
codeman 0:65606abcae36 56
codeman 0:65606abcae36 57 class ezLCD3: public Stream
codeman 0:65606abcae36 58 {
codeman 0:65606abcae36 59 public:
codeman 0:65606abcae36 60 /** Create a new interface to a Serial Graphic LCD
codeman 0:65606abcae36 61 * Note that the display lower left corner is coordinates 0, 0.
codeman 0:65606abcae36 62 * Rows start at the top at 0, columns start at the left at 0.
codeman 0:65606abcae36 63 * @param tx -- mbed transmit pin
codeman 0:65606abcae36 64 * @param rx -- mbed receive pin
codeman 0:65606abcae36 65 */
codeman 0:65606abcae36 66 ezLCD3(PinName tx, PinName rx);
codeman 0:65606abcae36 67 /**
codeman 0:65606abcae36 68 *
codeman 0:65606abcae36 69 *
codeman 0:65606abcae36 70 */
codeman 0:65606abcae36 71 void itoa(int value, char *sp, int radix);
codeman 0:65606abcae36 72 /**
codeman 0:65606abcae36 73 *
codeman 0:65606abcae36 74 *
codeman 0:65606abcae36 75 */
codeman 0:65606abcae36 76 void sendInt( int i );
codeman 0:65606abcae36 77 /**
codeman 0:65606abcae36 78 *
codeman 0:65606abcae36 79 *
codeman 0:65606abcae36 80 */
codeman 0:65606abcae36 81 int getInt( char *str );
codeman 0:65606abcae36 82 /**
codeman 0:65606abcae36 83 *
codeman 0:65606abcae36 84 *
codeman 0:65606abcae36 85 */
codeman 0:65606abcae36 86 bool waitForCR( void );
codeman 0:65606abcae36 87 /** clear the screen
codeman 0:65606abcae36 88 */
codeman 0:65606abcae36 89 void cls(void);
codeman 0:65606abcae36 90 /** clear the screen with background color
codeman 0:65606abcae36 91 */
codeman 0:65606abcae36 92 void cls(int bColor);
codeman 0:65606abcae36 93 /** clear the screen with background color and forground color
codeman 0:65606abcae36 94 */
codeman 0:65606abcae36 95 void cls(int bColor, int fColor);
codeman 0:65606abcae36 96 /**
codeman 0:65606abcae36 97 *
codeman 0:65606abcae36 98 */
codeman 0:65606abcae36 99 void color( int color );
codeman 0:65606abcae36 100
codeman 0:65606abcae36 101 /** set text position in rows, columns
codeman 0:65606abcae36 102 *
codeman 0:65606abcae36 103 * @param col is the col coordinate
codeman 0:65606abcae36 104 * @param row is the row coordinate
codeman 0:65606abcae36 105 */
codeman 0:65606abcae36 106 void pos(int col, int row);
codeman 0:65606abcae36 107
codeman 0:65606abcae36 108 /** set text position in x, y coordinates
codeman 0:65606abcae36 109 *
codeman 0:65606abcae36 110 * @param x is the x coordinate
codeman 0:65606abcae36 111 * @param y is the y coordinate
codeman 0:65606abcae36 112 */
codeman 0:65606abcae36 113 void xy(int x, int y);
codeman 0:65606abcae36 114
codeman 0:65606abcae36 115 /** set or erase a pixel
codeman 0:65606abcae36 116 *
codeman 0:65606abcae36 117 * @param x is the x coordinate
codeman 0:65606abcae36 118 * @param y is the y coordinate
codeman 0:65606abcae36 119 */
codeman 0:65606abcae36 120 void plot(void);
codeman 0:65606abcae36 121
codeman 0:65606abcae36 122 /** set or erase a pixel
codeman 0:65606abcae36 123 *
codeman 0:65606abcae36 124 * @param x is the x coordinate
codeman 0:65606abcae36 125 * @param y is the y coordinate
codeman 0:65606abcae36 126 */
codeman 0:65606abcae36 127 void plot(int x, int y);
codeman 0:65606abcae36 128
codeman 0:65606abcae36 129 /** draw or erase a line
codeman 0:65606abcae36 130 *
codeman 0:65606abcae36 131 * @param x1 is the x coordinate of the start of the line
codeman 0:65606abcae36 132 * @param y1 is the y coordinate of the start of the line
codeman 0:65606abcae36 133 */
codeman 0:65606abcae36 134 void line(int x1, int y1);
codeman 0:65606abcae36 135
codeman 0:65606abcae36 136 /** set or reset a circle
codeman 0:65606abcae36 137 *
codeman 0:65606abcae36 138 * @param x is the x coordinate of the circle center
codeman 0:65606abcae36 139 * @param y is the y coordinate of the circle center
codeman 0:65606abcae36 140 * @param r is the radius of the circle
codeman 0:65606abcae36 141 * @param set if true sets the pixel, if false, clears it
codeman 0:65606abcae36 142 */
codeman 0:65606abcae36 143 void circle(int radius, bool filled);
codeman 0:65606abcae36 144
codeman 0:65606abcae36 145 /** draw a box
codeman 0:65606abcae36 146 *
codeman 0:65606abcae36 147 * @param x1 is the x coordinate of the upper left of the rectangle
codeman 0:65606abcae36 148 * @param y1 is the y coordinate of the upper left of the rectangle
codeman 0:65606abcae36 149 * @param Fill for filled box
codeman 0:65606abcae36 150 */
codeman 0:65606abcae36 151 void box(int x1, int y1, bool filled);
codeman 0:65606abcae36 152
codeman 0:65606abcae36 153 /** set backlight brightness
codeman 0:65606abcae36 154 *
codeman 0:65606abcae36 155 * @param i is the duty cycle from 0 to 100; 0 is off, 100 is full power
codeman 0:65606abcae36 156 */
codeman 0:65606abcae36 157 void light(int i);
codeman 0:65606abcae36 158
codeman 0:65606abcae36 159 /** clear screen and put in reverse mode
codeman 0:65606abcae36 160 */
codeman 0:65606abcae36 161 void reverseMode(void);
codeman 0:65606abcae36 162
codeman 0:65606abcae36 163 /** configure the lcd baud rate so you have to call this along with baud() to change
codeman 0:65606abcae36 164 * communication speeds
codeman 0:65606abcae36 165 *
codeman 0:65606abcae36 166 * @param b is the baud rate, LCD_4800, LCD_9600, LCD_19200, LCD_38400, LCD_57600 or LCD_115200
codeman 0:65606abcae36 167 */
codeman 0:65606abcae36 168 void lcdbaud(int b);
codeman 0:65606abcae36 169
codeman 0:65606abcae36 170
codeman 0:65606abcae36 171 /** sets the resolution of the LCD so that the pos() call works properly
codeman 0:65606abcae36 172 * defaults to LCD_128x64.
codeman 0:65606abcae36 173 *
codeman 0:65606abcae36 174 * @param type is the type of LCD, either LCD_128x64 or LCD_160x128
codeman 0:65606abcae36 175 */
codeman 0:65606abcae36 176 void resolution(int type);
codeman 0:65606abcae36 177
codeman 0:65606abcae36 178 /** sets the resolution of the LCD in x and y coordinates which determines
codeman 0:65606abcae36 179 * how rows and columns are calculated in the pos() call. Defaults to
codeman 0:65606abcae36 180 * x=128, y=64
codeman 0:65606abcae36 181 *
codeman 0:65606abcae36 182 * @param x is the number of horizontal pixels
codeman 0:65606abcae36 183 * @param y is the number of vertical pixels
codeman 0:65606abcae36 184 */
codeman 0:65606abcae36 185 void resolution(int x, int y);
codeman 0:65606abcae36 186 /** print string at current x y
codeman 0:65606abcae36 187 * @param string
codeman 0:65606abcae36 188 *
codeman 0:65606abcae36 189 *
codeman 0:65606abcae36 190 */
codeman 0:65606abcae36 191 void print( char *str);
codeman 0:65606abcae36 192
codeman 0:65606abcae36 193 /** Send a character directly to the serial interface
codeman 0:65606abcae36 194 * @param c The character to send to the
codeman 0:65606abcae36 195 */
codeman 0:65606abcae36 196 int putc(int c);
codeman 0:65606abcae36 197
codeman 0:65606abcae36 198 /** Receive a character directly to the serial interface
codeman 0:65606abcae36 199 * @returns c The character received from the
codeman 0:65606abcae36 200 */
codeman 0:65606abcae36 201 int getc();
codeman 0:65606abcae36 202
codeman 0:65606abcae36 203 /**
codeman 0:65606abcae36 204
codeman 0:65606abcae36 205 * Numerical values for the EarthSEMPL commands. Provided here for
codeman 0:65606abcae36 206
codeman 0:65606abcae36 207 * users who wish to compose EarthSEMPL commands manually. (This is a low-
codeman 0:65606abcae36 208
codeman 0:65606abcae36 209 * level asset that is not required for the common uses of the device)
codeman 0:65606abcae36 210
codeman 0:65606abcae36 211 */
codeman 0:65606abcae36 212
codeman 0:65606abcae36 213 enum Commands {
codeman 0:65606abcae36 214 Command= 0, /**< Direct command. */
codeman 0:65606abcae36 215 Status= 1,
codeman 0:65606abcae36 216 Clr_Screen= 2, /**< Clear to provided color. */
codeman 0:65606abcae36 217 Ping= 3, /**< Return Pong */
codeman 0:65606abcae36 218 zBeep= 4, /**< Beep provided duration
codeman 0:65606abcae36 219 *(frequency fixed) */
codeman 0:65606abcae36 220 Light= 5, /**< \c 0 (off) to \c 100 (on) */
codeman 0:65606abcae36 221 Color= 6,
codeman 0:65606abcae36 222 eColor_ID= 7,
codeman 0:65606abcae36 223 Font= 10, /**< Font number. */
codeman 0:65606abcae36 224 Fontw= 11, /**< Font number widget. */
codeman 0:65606abcae36 225 Font_Orient= 12, /**< Horizontal or vertical. */
codeman 0:65606abcae36 226 Line_Width= 13, /**< 1 or 3. */
codeman 0:65606abcae36 227 Line_Type= 14, /**< 1=dot dot 2=dash dash. */
codeman 0:65606abcae36 228 XY= 15, /**< X and Y. */
codeman 0:65606abcae36 229 StringID= 16, /**< SID ASCII String or File Name that
codeman 0:65606abcae36 230 * ends with 0. */
codeman 0:65606abcae36 231 Plot= 17, /**< Place Pixel at X and Y. */
codeman 0:65606abcae36 232 Line= 18, /**< Draw a line to X and Y. */
codeman 0:65606abcae36 233 Box= 19, /**< Draws a Box to X and Y optional
codeman 0:65606abcae36 234 * fill. */
codeman 0:65606abcae36 235 Circle= 20, /**< Draws a Circle with Radius optional
codeman 0:65606abcae36 236 * fill */
codeman 0:65606abcae36 237 Arc= 21, /**< Draws an Arc with Radius and Begin
codeman 0:65606abcae36 238 * Angle to End Angle. */
codeman 0:65606abcae36 239 Pie= 22, /**< Draws a Pie figure with Radius and
codeman 0:65606abcae36 240 * Begin Angle to End Angle and fills
codeman 0:65606abcae36 241 * it. */
codeman 0:65606abcae36 242 Picture= 24, /**< Places a Picture on display. */
codeman 0:65606abcae36 243 Print= 25, /**< Places the string on display which
codeman 0:65606abcae36 244 * ends with 0. */
codeman 0:65606abcae36 245 Beep_Freq= 26, /**< Set the beeper frequency. */
codeman 0:65606abcae36 246 Calibrate= 28, /**< Calibrate touch screen. */
codeman 0:65606abcae36 247 zReset= 29, /**< Reset. */
codeman 0:65606abcae36 248 Rec_Macro= 30, /**< Record Macro to flash drive. */
codeman 0:65606abcae36 249 Play_Macro= 31, /**< Play Macro. */
codeman 0:65606abcae36 250 Stop_Macro= 32, /**< Stop Macro. */
codeman 0:65606abcae36 251 Pause_Macro= 33, /**< Pause n msec. */
codeman 0:65606abcae36 252 Loop_Macro= 34, /**< Loop on Macro. */
codeman 0:65606abcae36 253 Speed_Macro= 35, /**< Set the macro speed. */
codeman 0:65606abcae36 254 Peri= 36,
codeman 0:65606abcae36 255 ConfigIO= 37,
codeman 0:65606abcae36 256 IO= 38,
codeman 0:65606abcae36 257 IOG= 39,
codeman 0:65606abcae36 258 Security= 40, /**< Set drive security string. */
codeman 0:65606abcae36 259 Location= 41, /**< LID Location Vlaue. */
codeman 0:65606abcae36 260 Upgrade= 43,
codeman 0:65606abcae36 261 Parameters= 45,
codeman 0:65606abcae36 262 ClipEnable= 46, /**< Set clip Enable. */
codeman 0:65606abcae36 263 ClipArea= 47, /**< Set clip area. */
codeman 0:65606abcae36 264 /* Filesystem operations */
codeman 0:65606abcae36 265 Comment= 50,
codeman 0:65606abcae36 266 Fsgetcwd= 51,
codeman 0:65606abcae36 267 Fschdir= 52,
codeman 0:65606abcae36 268 Fsmkdir= 53,
codeman 0:65606abcae36 269 Fsrmdir= 54,
codeman 0:65606abcae36 270 Fsdir= 55,
codeman 0:65606abcae36 271 Fscopy= 56,
codeman 0:65606abcae36 272 Fsrename= 57,
codeman 0:65606abcae36 273 Fsremove= 58,
codeman 0:65606abcae36 274 Fsmore= 59,
codeman 0:65606abcae36 275 Format= 60, /**< Format Flash Drive if string1 =
codeman 0:65606abcae36 276 * "ezLCD" */
codeman 0:65606abcae36 277 If= 61,
codeman 0:65606abcae36 278 Cmd= 62,
codeman 0:65606abcae36 279 /* Widget commands */
codeman 0:65606abcae36 280 Set_Button= 70, /**< Widget Button. */
codeman 0:65606abcae36 281 Set_CheckBox= 71, /**< Widget Checkbox. */
codeman 0:65606abcae36 282 Set_Gbox= 72, /**< Widget Group Box. */
codeman 0:65606abcae36 283 Set_RadioButton= 73, /**< Widget Radio Button. */
codeman 0:65606abcae36 284 Set_DMeter= 74, /**< Widget Digital Meter. */
codeman 0:65606abcae36 285 DMeter_Value= 75, /**< Set DMeter value. */
codeman 0:65606abcae36 286 Set_AMeter= 76, /**< Widget Analog Meter. */
codeman 0:65606abcae36 287 AMeter_Value= 77, /**< Set AMeter value. */
codeman 0:65606abcae36 288 AMeter_Color= 78, /**< Set AMeter color */
codeman 0:65606abcae36 289 Set_TouchZone= 79, /**< touch zone */
codeman 0:65606abcae36 290 Set_Dial= 80, /**< Widget RoundDial. */
codeman 0:65606abcae36 291 Set_Slider= 82, /**< Widget Slider. */
codeman 0:65606abcae36 292 Set_Progress= 85, /**< Widget Progress bar. */
codeman 0:65606abcae36 293 Progress_Value= 86, /**< Progress value. */
codeman 0:65606abcae36 294 Set_StaticText= 87, /**< Widget Static text. */
codeman 0:65606abcae36 295 StaticText_Value= 88, /**< Static text Value. */
codeman 0:65606abcae36 296 Choice= 89, /**< Widget get choice. */
codeman 0:65606abcae36 297 Widget_Theme= 90, /**< Widget Scheme. */
codeman 0:65606abcae36 298 Widget_Values= 91, /**<Widget Values (Slider and Dial in this version).*/
codeman 0:65606abcae36 299 Widget_State= 92, /**<Widget State (Button, checkbox, radiobutton in this version).*/
codeman 0:65606abcae36 300 // no id returns the id of the last touched
codeman 0:65606abcae36 301 Mode= 98,
codeman 0:65606abcae36 302 Comport= 99,
codeman 0:65606abcae36 303 Xmax= 100, /**< Return Xmax width. */
codeman 0:65606abcae36 304 Ymax= 101, /**< Return Ymax height. */
codeman 0:65606abcae36 305 Wait= 102, /**< Wait for touch. */
codeman 0:65606abcae36 306 Waitn= 103, /**< Wait for no touch. */
codeman 0:65606abcae36 307 Waitt= 104, /**< Wait for touch. */
codeman 0:65606abcae36 308 Threshold= 105, /**< Touch threshold. */
codeman 0:65606abcae36 309 Verbose= 106, /**< Controls the verbose mode. */
codeman 0:65606abcae36 310 Lecho= 107, /**< Controls the echo mode. */
codeman 0:65606abcae36 311 Xtouch= 110, /**< return touchX. */
codeman 0:65606abcae36 312 Ytouch= 111, /**< return touchY. */
codeman 0:65606abcae36 313 Stouch= 112, /**< return touchS. */
codeman 0:65606abcae36 314 Wquiet= 113,
codeman 0:65606abcae36 315 Wstack= 114,
codeman 0:65606abcae36 316 };
codeman 0:65606abcae36 317
codeman 0:65606abcae36 318 private:
codeman 0:65606abcae36 319 Serial _ser;
codeman 0:65606abcae36 320 virtual int _putc(int c);
codeman 0:65606abcae36 321 virtual int _getc();
codeman 0:65606abcae36 322
codeman 0:65606abcae36 323 int _xMax;
codeman 0:65606abcae36 324 int _yMax;
codeman 0:65606abcae36 325 int _firmware;
codeman 0:65606abcae36 326 };
codeman 0:65606abcae36 327
codeman 0:65606abcae36 328
codeman 0:65606abcae36 329 #endif