John Bunda
/
DigoleSerialDisp1
UART object
Fork of DigoleSerialDisp1 by
Diff: DigoleSerialDisp.h
- Revision:
- 0:3cf7c2683c3a
- Child:
- 1:959715b1d042
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DigoleSerialDisp.h Mon Feb 25 05:48:10 2013 +0000 @@ -0,0 +1,361 @@ +/** Digole Serial Display library, I2C + * + * @Author: Digole Digital Solutions : www.digole.com ported to mbed by Michael Shimniok www.bot-thoughts.com + */ +#ifndef DigoleSerialDisp_h +#define DigoleSerialDisp_h + +#include "mbed.h" +#include <inttypes.h> + +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 + +#define delay(x) wait_ms(x) + +// Communication set up command +// Text function command +// Graph function command + +#define Serial_UART 0; +#define Serial_I2C 1; +#define Serial_SPI 2; +#define _TEXT_ 0 +#define _GRAPH_ 1 + +/** Digole Serial LCD/OLED Library + * + * Inherits from the Print class for all the fancy print/println stuff + * + * Communication set up command + * "SB":Baud (ascII bytes end with 0x00/0x0A/0x0D) -- set UART Baud Rate + * "SI2CA":Address(1 byte <127) -- Set I2C address, default address is:0x27 + * "DC":1/0(1byte) -- set config display on/off, if set to 1, displayer will display current commucation setting when power on + * Text Function command + * "CL": -- Clear screen--OK + * "CS":1/0 (1 byte)-- Cursor on/off + * "TP":x(1 byte) y(1 byte) -- set text position + * "TT":string(bytes) end with 0x00/0x0A/0x0D -- display string under regular mode + * Graphic function command + * "GP":x(1byte) y(1byte) -- set current graphic position + * "DM":"C/!/~/&/|/^"(ASCII 1byte) -- set drawing mode--C="Copy",! and ~ = "Not", & = "And", | = "Or", ^ = "Xor" + * "SC":1/0 (1byte) -- set draw color--only 1 and 0 + * "LN":x0(1byte) y0(1byte) x1(1byte) y2(1byte)--draw line from x0,y0 to x1,y1,set new pot to x1,y1 + * "LT":x(1byte) y(1byte) -- draw line from current pos to x,y + * "CC":x(1byte) y(1byte) ratio(byte) -- draw circle at x,y with ratio + * "DP":x(1byte) y(1byte) Color(1byte) -- draw a pixel--OK + * "DR":x0(1byte) y0(1byte) x1(1byte) y2(1byte)--draw rectangle, top-left:x0,y0; right-bottom:x1,y1 + * "FR":x0(1byte) y0(1byte) x1(1byte) y2(1byte)--draw filled rectangle, top-left:x0,y0; right-bottom:x1,y1 + */ +class DigoleSerialDisp { +public: + + /** Create a new Digole Serial Display interface + * + * @param sda - pin for I2C SDA + * @param scl - pin for I2C SCL + * @param address - 7-bit address (default is 0x27 for the device) + */ + DigoleSerialDisp(PinName sda, PinName scl, uint8_t address=0x27); + + + /** Carryover from Arduino library, not needed + */ + void begin(void) { } // nothing to do here + + + /** Write out a raw character + * @param x - character + * @returns - 1 + */ + size_t write(const char x); + + + /** Write out raw data from a buffer + * @param buffer -- buffer to write + * @param size -- the number of bytes to write + * @returns size + */ + size_t write(const char *buffer, size_t size); + + + /** Write out raw string + * @param str -- string to write + * @returns number of bytes written + */ + size_t write(const char *str); + + + /** Prints a char to the display in a single I2C transmission using "TTb\0" + * + * @param c - character to print + * @returns 1 + */ + size_t print(const char c); + + + /** Prints a string of data to the display in a single I2C transmission using "TTbbb...\0" + * + * @param s -- array of data, null terminated + * @returns length of s + */ + size_t print(const char s[]); + + + /** Print out an unsigned char as a number + * @param u -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t print(unsigned char u, int base = DEC); + + + /** Print out an integer + * @param i -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t print(int i, int base = DEC); + + + /** Print out an unsigned integer + * @param u -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t print(unsigned int u, int base = DEC); + + + /** Print out a long as a number + * @param l -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t print(long l, int base = DEC); + + + /** Print out an unsigned long + * @param l -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t print(unsigned long l, int base = DEC); + + + /** Print out a double + * @param f -- integer to print + * @param digits -- number of digits after the decimal + */ + size_t print(double f, int digits = 2); + + + /** Prints a string of data to the display in a single I2C transmission using "TTbbb...\0" + * + * @param s -- array of data, null terminated + * @returns length of s + */ + size_t println(const char s[]); + + + /** Prints a char the display in a single I2C transmission using "TTb\0" + * + * @param c -- character to print + * @returns 1 + */ + size_t println(char c); + + + /** Prints an unsigned char as a number + * + * @param u -- unsigned char number + * @returns 1 + */ + size_t println(unsigned char u, int base = DEC); + + + /** Print out an integer + * @param i -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t println(int i, int base = DEC); + + + /** Print out an unsigned char as a number + * @param u -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t println(unsigned int u, int base = DEC); + + + /** Print out a long as a number + * @param l -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t println(long l, int base = DEC); + + + /** Print out an unsigned long + * @param l -- integer to print + * @param base -- base is DEC (default), HEX, BIN + */ + size_t println(unsigned long l, int base = DEC); + + + /** Print out a double + * @param f -- integer to print + * @param digits -- number of digits after the decimal + */ + size_t println(double f, int digits = 2); + + + /** prints -- well, nothing in this case, but let's pretend we printed a \n + * @returns 1 + */ + size_t println(void); + + + /*---------functions for Text and Graphic LCD adapters---------*/ + + /** Turns off the cursor */ + void disableCursor(void); + + /** Turns on the cursor */ + void enableCursor(void); + + /** Displays a string at specified coordinates + * @param x -- x coordinate to display string + * @param y -- y coordinate to display string + * @param s -- string to display + */ + void drawStr(uint8_t x, uint8_t y, const char *s); + + /** Sets the print position for graphics or text + * @param x -- x coordinate to display string + * @param y -- y coordinate to display string + * @param graph -- if _TEXT_ affects subsequent text position, otherwise, affects graphics position + */ + void setPrintPos(uint8_t x, uint8_t y, uint8_t graph = _TEXT_); + + /** Clears the display screen */ + void clearScreen(void); + + /** Configure your LCD if other than 1602 and the chip is other than KS0066U/F / HD44780 + * @param col -- number of columns + * @param row -- number of rows + */ + void setLCDColRow(uint8_t col, uint8_t row); + + /** Sets a new I2C address for the display (default is 0x27), the adapter will store the new address in memory + * @param address -- the new address + */ + void setI2CAddress(uint8_t add); + + /** Display Config on/off, the factory default set is on, + * so, when the module is powered up, it will display + * current communication mode on LCD, after you + * design finished, you can turn it off + * @param v -- 1 is on, 0 is off + */ + void displayConfig(uint8_t v); + + /** Holdover from Arduino library; not needed */ + void preprint(void); + + /*----------Functions for Graphic LCD/OLED adapters only---------*/ + //the functions in this section compatible with u8glib + void drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap); + void setRot90(void); + void setRot180(void); + void setRot270(void); + void undoRotation(void); + void setRotation(uint8_t); + void setContrast(uint8_t); + void drawBox(uint8_t x, uint8_t y, uint8_t w, uint8_t h); + void drawCircle(uint8_t x, uint8_t y, uint8_t r, uint8_t = 0); + void drawDisc(uint8_t x, uint8_t y, uint8_t r); + void drawFrame(uint8_t x, uint8_t y, uint8_t w, uint8_t h); + void drawPixel(uint8_t x, uint8_t y, uint8_t = 1); + void drawLine(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1); + void drawLineTo(uint8_t x, uint8_t y); + void drawHLine(uint8_t x, uint8_t y, uint8_t w); + void drawVLine(uint8_t x, uint8_t y, uint8_t h); + //------------------------------- + //special functions for our adapters + + /** Sets the font + * + * @parameter font - available fonts: 6,10,18,51,120,123, user font 200-203 + */ + void setFont(uint8_t font); + + /** go to next text line, depending on the font size */ + void nextTextLine(void); + + /** set color for graphic function */ + void setColor(uint8_t); + + /** Turn on back light */ + void backLightOn(void); + + /** Turn off back light */ + void backLightOff(void); + + /** send command to LCD drectly + * @param d - command + */ + void directCommand(uint8_t d); + + /** send data to LCD drectly + * @param d -- data + */ + void directData(uint8_t d); + + /** Move rectangle area on screen to another place + * @param x0, y1 -- top left of the area to move + * @param x1, y1 -- bottom right of the area to move + * @param xoffset, yoffset -- the distance to move + */ + void moveArea(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, char xoffset, char yoffset); + + /** Display startup screen */ + void displayStartScreen(uint8_t m); + + /** Set display mode */ + void setMode(uint8_t m); + + /** set text position back to previous, only one back allowed */ + void setTextPosBack(void); + + void setTextPosOffset(char xoffset, char yoffset); + void setTextPosAbs(uint8_t x, uint8_t y); + void setLinePattern(uint8_t pattern); + /** Only for universal serial adapter */ + void setLCDChip(uint8_t chip); + + + /** Set Start Screen, 1st B is the lower byte of data length. + * Convert images to C array here: <a href="http://www.digole.com/tools/PicturetoC_Hex_converter.php">http://www.digole.com/tools/PicturetoC_Hex_converter.php</a> + * @param lon -- length of data + * @param data -- binary data + */ + void uploadStartScreen(int lon, const unsigned char *data); //upload start screen + + /** Upload a user font + * @param lon -- length of data + * @param data -- user font data + * @param sect -- section of memory you want to upload to + */ + void uploadUserFont(int lon, const unsigned char *data, uint8_t sect); //upload user font + + /** Send a Byte to output head on board + * @param x -- byte to output + */ + void digitalOutput(uint8_t x); + +private: + I2C _device; + uint8_t _address; + uint8_t _Comdelay; + + size_t printNumber(unsigned long n, uint8_t base); + size_t printFloat(double number, uint8_t digits); +}; + +#endif