Code for autonomous ground vehicle, Data Bus, 3rd place winner in 2012 Sparkfun AVC.
Dependencies: Watchdog mbed Schedule SimpleFilter LSM303DLM PinDetect DebounceIn Servo
Diff: UI/SerialGraphicLCD/SerialGraphicLCD.h
- Revision:
- 0:826c6171fc1b
diff -r 000000000000 -r 826c6171fc1b UI/SerialGraphicLCD/SerialGraphicLCD.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UI/SerialGraphicLCD/SerialGraphicLCD.h Wed Jun 20 14:57:48 2012 +0000 @@ -0,0 +1,206 @@ +/* Serial Graphics LCD Driver for Sparkfun Serial Graphics LCD, LCD-09351; and Graphic + * LCD Serial Backpack, LCD-09352. + * + * @author Michael Shimniok http://www.bot-thoughts.com/ + * + */ +#ifndef _SERIALGRAPHICLCD_H +#define _SERIALGRAPHICLCD_H + +#include "mbed.h" + +/** Firmware modes */ +#define SFE_FW 0 // Stock SFE firmware +#define SD_FW 1 // summoningdark firmware http://sourceforge.net/projects/serialglcd/ + +/** Modes for SD firmware */ +#define FILL 0xFF +#define CLEAR 0x00 + +/** LCD Baud Rates */ +#define LCD_4800 1 +#define LCD_9600 2 +#define LCD_19200 3 +#define LCD_38400 4 +#define LCD_57600 5 +#define LCD_115200 6 + +/** LCD Types */ +#define LCD_128x64 1 +#define LCD_160x128 2 + +/** Interface to the Sparkfun Serial Graphic LCD, LCD-09351; and Graphic + * LCD Serial Backpack, LCD-09352. Derived class from Serial so that you + * can conveniently printf(), putc(), etc to the display. + * + * Example: + * @code + * #include "mbed.h" + * #include "SerialGraphicLCD.h" + * + * SerialGraphicLCD lcd(p26, p25); + * + * int main() { + * lcd.baud(115200); // default baud rate + * while (1) { + * lcd.clear(); + * lcd.rect(3, 3, 20, 20); + * lcd.printf("Hello World!"); + * lcd.pixel(14, 35, true); + * lcd.pixel(16, 36, true); + * lcd.pixel(18, 37, true); + * lcd.pos(5, 30); + * lcd.printf("Hi"); + * lcd.circle(50, 20, 20, true); + * lcd.pos(50, 20); + * lcd.printf("Howdy"); + * lcd.line(0, 0, 25, 25, true); + * wait(2); + * } + * } + * @endcode + */ +class SerialGraphicLCD: public Serial { +public: + /** Create a new interface to a Serial Graphic LCD + * Note that the display lower left corner is coordinates 0, 0. + * Rows start at the top at 0, columns start at the left at 0. + * @param tx -- mbed transmit pin + * @param rx -- mbed receive pin + */ + SerialGraphicLCD(PinName tx, PinName rx); + + /** Create a new interface to a Serial Graphic LCD + * Note that the display lower left corner is coordinates 0, 0. + * Rows start at the top at 0, columns start at the left at 0. + * @param tx -- mbed transmit pin + * @param rx -- mbed receive pin + * @param firmware -- SFE_FW, stock firmware or SD_FW, summoningdark firmware + */ + SerialGraphicLCD(PinName tx, PinName rx, int firmware); + + /** clear the screen + */ + void clear(void); + + /** set text position in rows, columns + * + * @param col is the col coordinate + * @param row is the row coordinate + */ + void pos(int col, int row); + + /** set text position in x, y coordinates + * + * @param x is the x coordinate + * @param y is the y coordinate + */ + void posXY(int x, int y); + + /** set or erase a pixel + * + * @param x is the x coordinate + * @param y is the y coordinate + * @param set if true sets the pixel, if false, erases it + */ + void pixel(int x, int y, bool set); + + /** draw or erase a line + * + * @param x1 is the x coordinate of the start of the line + * @param y1 is the y coordinate of the start of the line + * @param x2 is the x coordinate of the end of the line + * @param y2 is the y coordinate of the end of the line + * @param set if true sets the line, if false, erases it + */ + void line(int x1, int y1, int x2, int y2, bool set); + + /** set or reset a circle + * + * @param x is the x coordinate of the circle center + * @param y is the y coordinate of the circle center + * @param r is the radius of the circle + * @param set if true sets the pixel, if false, clears it + */ + void circle(int x, int y, int r, bool set); + + /** draw a rectangle + * + * @param x1 is the x coordinate of the upper left of the rectangle + * @param y1 is the y coordinate of the upper left of the rectangle + * @param x2 is the x coordinate of the lower right of the rectangle + * @param y2 is the y coordinate of the lower right of the rectangle + */ + void rect(int x1, int y1, int x2, int y2); + + /** draw or erase a rectangle (SD firmware only) + * + * @param x1 is the x coordinate of the upper left of the rectangle + * @param y1 is the y coordinate of the upper left of the rectangle + * @param x2 is the x coordinate of the lower right of the rectangle + * @param y2 is the y coordinate of the lower right of the rectangle + */ + void rect(int x1, int y1, int x2, int y2, bool set); + + /** Draw a filled box. + * + * @param x1 is the x coordinate of the upper left of the rectangle + * @param y1 is the y coordinate of the upper left of the rectangle + * @param x2 is the x coordinate of the lower right of the rectangle + * @param y2 is the y coordinate of the lower right of the rectangle + * @param fillByte describes 1 8-pixel high stripe that is repeated every x + * pixels and every 8 y pixels. The most useful are CLEAR (0x00) to clear the box, and FILL (0xFF) to fill it. + */ + void rectFill(int x1, int y1, int x2, int y2, char fillByte); + + /** erase a rectangular area + * + * @param x1 is the x coordinate of the upper left of the area + * @param y1 is the y coordinate of the upper left of the area + * @param x2 is the x coordinate of the lower right of the area + * @param y2 is the y coordinate of the lower right of the area + */ + void erase(int x1, int y1, int x2, int y2); + + /** set backlight duty cycle + * + * @param i is the duty cycle from 0 to 100; 0 is off, 100 is full power + */ + void backlight(int i); + + /** clear screen and put in reverse mode + */ + void reverseMode(void); + + /** configure the lcd baud rate so you have to call this along with baud() to change + * communication speeds + * + * @param b is the baud rate, LCD_4800, LCD_9600, LCD_19200, LCD_38400, LCD_57600 or LCD_115200 + */ + void lcdbaud(int b); + + + /** sets the resolution of the LCD so that the pos() call works properly + * defaults to LCD_128x64. + * + * @param type is the type of LCD, either LCD_128x64 or LCD_160x128 + */ + void resolution(int type); + + /** sets the resolution of the LCD in x and y coordinates which determines + * how rows and columns are calculated in the pos() call. Defaults to + * x=128, y=64 + * + * @param x is the number of horizontal pixels + * @param y is the number of vertical pixels + */ + void resolution(int x, int y); + + private: + int _xMax; + int _yMax; + int _firmware; +}; + + +#endif \ No newline at end of file