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:
Sun Apr 28 07:41:27 2013 +0000
Revision:
1:c7659c8af0d3
Parent:
0:65606abcae36
Child:
3:28e71ce23bfd
4/28/2013 arLCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
codeman 1:c7659c8af0d3 1 /*
codeman 1:c7659c8af0d3 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
codeman 1:c7659c8af0d3 44 #define FIFO 0
codeman 1:c7659c8af0d3 45 #define LIFO 1
codeman 1:c7659c8af0d3 46 #define CLEAR 2
codeman 0:65606abcae36 47
codeman 0:65606abcae36 48 class ezLCD3: public Stream
codeman 0:65606abcae36 49 {
codeman 0:65606abcae36 50 public:
codeman 0:65606abcae36 51 /** Create a new interface to a Serial Graphic LCD
codeman 0:65606abcae36 52 * Note that the display lower left corner is coordinates 0, 0.
codeman 0:65606abcae36 53 * Rows start at the top at 0, columns start at the left at 0.
codeman 0:65606abcae36 54 * @param tx -- mbed transmit pin
codeman 0:65606abcae36 55 * @param rx -- mbed receive pin
codeman 0:65606abcae36 56 */
codeman 0:65606abcae36 57 ezLCD3(PinName tx, PinName rx);
codeman 0:65606abcae36 58 /**
codeman 0:65606abcae36 59 *
codeman 0:65606abcae36 60 *
codeman 0:65606abcae36 61 */
codeman 1:c7659c8af0d3 62 void Rx_interrupt( void );
codeman 0:65606abcae36 63 void itoa(int value, char *sp, int radix);
codeman 1:c7659c8af0d3 64 void stripSpace(char *str);
codeman 1:c7659c8af0d3 65 bool sync( void );
codeman 0:65606abcae36 66 /**
codeman 0:65606abcae36 67 *
codeman 0:65606abcae36 68 *
codeman 0:65606abcae36 69 */
codeman 0:65606abcae36 70 void sendInt( int i );
codeman 0:65606abcae36 71 /**
codeman 0:65606abcae36 72 *
codeman 0:65606abcae36 73 *
codeman 0:65606abcae36 74 */
codeman 0:65606abcae36 75 int getInt( char *str );
codeman 0:65606abcae36 76 /**
codeman 0:65606abcae36 77 *
codeman 0:65606abcae36 78 *
codeman 1:c7659c8af0d3 79 */
codeman 1:c7659c8af0d3 80 void getString( char *str );
codeman 1:c7659c8af0d3 81 /**
codeman 1:c7659c8af0d3 82 *
codeman 1:c7659c8af0d3 83 *
codeman 1:c7659c8af0d3 84 */
codeman 0:65606abcae36 85 bool waitForCR( void );
codeman 1:c7659c8af0d3 86
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 1:c7659c8af0d3 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 1:c7659c8af0d3 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 1:c7659c8af0d3 186 /**
codeman 1:c7659c8af0d3 187 *
codeman 1:c7659c8af0d3 188 *
codeman 1:c7659c8af0d3 189 */
codeman 1:c7659c8af0d3 190 int getXmax( void );
codeman 1:c7659c8af0d3 191 /**
codeman 1:c7659c8af0d3 192 *
codeman 1:c7659c8af0d3 193 *
codeman 1:c7659c8af0d3 194 */
codeman 1:c7659c8af0d3 195 int getYmax( void );
codeman 1:c7659c8af0d3 196 void setStringID( int ID, char *str );
codeman 1:c7659c8af0d3 197 void getStringID( int ID, char *str );
codeman 0:65606abcae36 198 /** print string at current x y
codeman 0:65606abcae36 199 * @param string
codeman 0:65606abcae36 200 *
codeman 0:65606abcae36 201 *
codeman 0:65606abcae36 202 */
codeman 0:65606abcae36 203 void print( char *str);
codeman 1:c7659c8af0d3 204 /**
codeman 1:c7659c8af0d3 205 *
codeman 1:c7659c8af0d3 206 *
codeman 1:c7659c8af0d3 207 */
codeman 1:c7659c8af0d3 208 //ameter [ID][x][y][width][height][options][value][min][max][theme][stringID][type]
codeman 1:c7659c8af0d3 209 void ameter( int ID, int x, int y, int w, int h, int options, int value, int min, int max, int theme, int stringID, int type);
codeman 1:c7659c8af0d3 210 /**
codeman 1:c7659c8af0d3 211 *
codeman 1:c7659c8af0d3 212 *
codeman 1:c7659c8af0d3 213 */
codeman 1:c7659c8af0d3 214 void touchZone( int ID, int x, int y, int w, int h, bool option);
codeman 1:c7659c8af0d3 215 /**
codeman 1:c7659c8af0d3 216 *
codeman 1:c7659c8af0d3 217 *
codeman 1:c7659c8af0d3 218 */
codeman 1:c7659c8af0d3 219 void button( int ID, int x, int y, int w, int h, int option, int align, int radius, int theme, int stringID );
codeman 1:c7659c8af0d3 220 /**
codeman 1:c7659c8af0d3 221 *
codeman 1:c7659c8af0d3 222 *
codeman 1:c7659c8af0d3 223 */
codeman 1:c7659c8af0d3 224 unsigned int wstack( int type );
codeman 0:65606abcae36 225 /** Send a character directly to the serial interface
codeman 1:c7659c8af0d3 226 * @param c The character to send to the
codeman 0:65606abcae36 227 */
codeman 0:65606abcae36 228 int putc(int c);
codeman 1:c7659c8af0d3 229
codeman 0:65606abcae36 230 /** Receive a character directly to the serial interface
codeman 1:c7659c8af0d3 231 * @returns c The character received from the
codeman 0:65606abcae36 232 */
codeman 0:65606abcae36 233 int getc();
codeman 0:65606abcae36 234
codeman 0:65606abcae36 235 /**
codeman 0:65606abcae36 236
codeman 0:65606abcae36 237 * Numerical values for the EarthSEMPL commands. Provided here for
codeman 0:65606abcae36 238
codeman 0:65606abcae36 239 * users who wish to compose EarthSEMPL commands manually. (This is a low-
codeman 0:65606abcae36 240
codeman 0:65606abcae36 241 * level asset that is not required for the common uses of the device)
codeman 0:65606abcae36 242
codeman 0:65606abcae36 243 */
codeman 0:65606abcae36 244
codeman 0:65606abcae36 245 enum Commands {
codeman 0:65606abcae36 246 Command= 0, /**< Direct command. */
codeman 0:65606abcae36 247 Status= 1,
codeman 0:65606abcae36 248 Clr_Screen= 2, /**< Clear to provided color. */
codeman 0:65606abcae36 249 Ping= 3, /**< Return Pong */
codeman 0:65606abcae36 250 zBeep= 4, /**< Beep provided duration
codeman 0:65606abcae36 251 *(frequency fixed) */
codeman 0:65606abcae36 252 Light= 5, /**< \c 0 (off) to \c 100 (on) */
codeman 0:65606abcae36 253 Color= 6,
codeman 0:65606abcae36 254 eColor_ID= 7,
codeman 0:65606abcae36 255 Font= 10, /**< Font number. */
codeman 0:65606abcae36 256 Fontw= 11, /**< Font number widget. */
codeman 0:65606abcae36 257 Font_Orient= 12, /**< Horizontal or vertical. */
codeman 0:65606abcae36 258 Line_Width= 13, /**< 1 or 3. */
codeman 0:65606abcae36 259 Line_Type= 14, /**< 1=dot dot 2=dash dash. */
codeman 1:c7659c8af0d3 260 XY= 15, /**< X and Y. */
codeman 0:65606abcae36 261 StringID= 16, /**< SID ASCII String or File Name that
codeman 0:65606abcae36 262 * ends with 0. */
codeman 0:65606abcae36 263 Plot= 17, /**< Place Pixel at X and Y. */
codeman 0:65606abcae36 264 Line= 18, /**< Draw a line to X and Y. */
codeman 0:65606abcae36 265 Box= 19, /**< Draws a Box to X and Y optional
codeman 0:65606abcae36 266 * fill. */
codeman 0:65606abcae36 267 Circle= 20, /**< Draws a Circle with Radius optional
codeman 0:65606abcae36 268 * fill */
codeman 0:65606abcae36 269 Arc= 21, /**< Draws an Arc with Radius and Begin
codeman 0:65606abcae36 270 * Angle to End Angle. */
codeman 0:65606abcae36 271 Pie= 22, /**< Draws a Pie figure with Radius and
codeman 0:65606abcae36 272 * Begin Angle to End Angle and fills
codeman 0:65606abcae36 273 * it. */
codeman 0:65606abcae36 274 Picture= 24, /**< Places a Picture on display. */
codeman 0:65606abcae36 275 Print= 25, /**< Places the string on display which
codeman 0:65606abcae36 276 * ends with 0. */
codeman 0:65606abcae36 277 Beep_Freq= 26, /**< Set the beeper frequency. */
codeman 0:65606abcae36 278 Calibrate= 28, /**< Calibrate touch screen. */
codeman 0:65606abcae36 279 zReset= 29, /**< Reset. */
codeman 0:65606abcae36 280 Rec_Macro= 30, /**< Record Macro to flash drive. */
codeman 0:65606abcae36 281 Play_Macro= 31, /**< Play Macro. */
codeman 0:65606abcae36 282 Stop_Macro= 32, /**< Stop Macro. */
codeman 0:65606abcae36 283 Pause_Macro= 33, /**< Pause n msec. */
codeman 0:65606abcae36 284 Loop_Macro= 34, /**< Loop on Macro. */
codeman 0:65606abcae36 285 Speed_Macro= 35, /**< Set the macro speed. */
codeman 0:65606abcae36 286 Peri= 36,
codeman 0:65606abcae36 287 ConfigIO= 37,
codeman 0:65606abcae36 288 IO= 38,
codeman 0:65606abcae36 289 IOG= 39,
codeman 0:65606abcae36 290 Security= 40, /**< Set drive security string. */
codeman 0:65606abcae36 291 Location= 41, /**< LID Location Vlaue. */
codeman 0:65606abcae36 292 Upgrade= 43,
codeman 0:65606abcae36 293 Parameters= 45,
codeman 0:65606abcae36 294 ClipEnable= 46, /**< Set clip Enable. */
codeman 0:65606abcae36 295 ClipArea= 47, /**< Set clip area. */
codeman 0:65606abcae36 296 /* Filesystem operations */
codeman 0:65606abcae36 297 Comment= 50,
codeman 0:65606abcae36 298 Fsgetcwd= 51,
codeman 0:65606abcae36 299 Fschdir= 52,
codeman 0:65606abcae36 300 Fsmkdir= 53,
codeman 0:65606abcae36 301 Fsrmdir= 54,
codeman 0:65606abcae36 302 Fsdir= 55,
codeman 0:65606abcae36 303 Fscopy= 56,
codeman 0:65606abcae36 304 Fsrename= 57,
codeman 0:65606abcae36 305 Fsremove= 58,
codeman 0:65606abcae36 306 Fsmore= 59,
codeman 0:65606abcae36 307 Format= 60, /**< Format Flash Drive if string1 =
codeman 0:65606abcae36 308 * "ezLCD" */
codeman 0:65606abcae36 309 If= 61,
codeman 0:65606abcae36 310 Cmd= 62,
codeman 0:65606abcae36 311 /* Widget commands */
codeman 0:65606abcae36 312 Set_Button= 70, /**< Widget Button. */
codeman 0:65606abcae36 313 Set_CheckBox= 71, /**< Widget Checkbox. */
codeman 0:65606abcae36 314 Set_Gbox= 72, /**< Widget Group Box. */
codeman 0:65606abcae36 315 Set_RadioButton= 73, /**< Widget Radio Button. */
codeman 0:65606abcae36 316 Set_DMeter= 74, /**< Widget Digital Meter. */
codeman 0:65606abcae36 317 DMeter_Value= 75, /**< Set DMeter value. */
codeman 0:65606abcae36 318 Set_AMeter= 76, /**< Widget Analog Meter. */
codeman 0:65606abcae36 319 AMeter_Value= 77, /**< Set AMeter value. */
codeman 0:65606abcae36 320 AMeter_Color= 78, /**< Set AMeter color */
codeman 0:65606abcae36 321 Set_TouchZone= 79, /**< touch zone */
codeman 0:65606abcae36 322 Set_Dial= 80, /**< Widget RoundDial. */
codeman 0:65606abcae36 323 Set_Slider= 82, /**< Widget Slider. */
codeman 0:65606abcae36 324 Set_Progress= 85, /**< Widget Progress bar. */
codeman 0:65606abcae36 325 Progress_Value= 86, /**< Progress value. */
codeman 0:65606abcae36 326 Set_StaticText= 87, /**< Widget Static text. */
codeman 0:65606abcae36 327 StaticText_Value= 88, /**< Static text Value. */
codeman 0:65606abcae36 328 Choice= 89, /**< Widget get choice. */
codeman 0:65606abcae36 329 Widget_Theme= 90, /**< Widget Scheme. */
codeman 0:65606abcae36 330 Widget_Values= 91, /**<Widget Values (Slider and Dial in this version).*/
codeman 0:65606abcae36 331 Widget_State= 92, /**<Widget State (Button, checkbox, radiobutton in this version).*/
codeman 0:65606abcae36 332 // no id returns the id of the last touched
codeman 0:65606abcae36 333 Mode= 98,
codeman 0:65606abcae36 334 Comport= 99,
codeman 0:65606abcae36 335 Xmax= 100, /**< Return Xmax width. */
codeman 0:65606abcae36 336 Ymax= 101, /**< Return Ymax height. */
codeman 0:65606abcae36 337 Wait= 102, /**< Wait for touch. */
codeman 0:65606abcae36 338 Waitn= 103, /**< Wait for no touch. */
codeman 0:65606abcae36 339 Waitt= 104, /**< Wait for touch. */
codeman 0:65606abcae36 340 Threshold= 105, /**< Touch threshold. */
codeman 0:65606abcae36 341 Verbose= 106, /**< Controls the verbose mode. */
codeman 0:65606abcae36 342 Lecho= 107, /**< Controls the echo mode. */
codeman 0:65606abcae36 343 Xtouch= 110, /**< return touchX. */
codeman 0:65606abcae36 344 Ytouch= 111, /**< return touchY. */
codeman 0:65606abcae36 345 Stouch= 112, /**< return touchS. */
codeman 0:65606abcae36 346 Wquiet= 113,
codeman 0:65606abcae36 347 Wstack= 114,
codeman 0:65606abcae36 348 };
codeman 1:c7659c8af0d3 349
codeman 0:65606abcae36 350 private:
codeman 0:65606abcae36 351 Serial _ser;
codeman 0:65606abcae36 352 virtual int _putc(int c);
codeman 0:65606abcae36 353 virtual int _getc();
codeman 0:65606abcae36 354 int _xMax;
codeman 0:65606abcae36 355 int _yMax;
codeman 0:65606abcae36 356 int _firmware;
codeman 0:65606abcae36 357 };
codeman 0:65606abcae36 358
codeman 0:65606abcae36 359
codeman 0:65606abcae36 360 #endif