//Digole Digital Solutions: www.digole.com #include "DigoleSerial.h" #include #include #include #include "Arduino.h" /* // 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 */ // that resetting the Arduino doesn't reset the LCD, so we // can't assume that its in that state when a sketch starts (and the // LiquidCrystal constructor is called). //UART function void DigoleSerialDisp::preprint(void) { //write((uint8_t)0); Print::print("TT"); } /*----------Functions for Graphic LCD/OLED adapters only---------*/ void DigoleSerialDisp::drawBitmap(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap) { uint8_t i = 0; if ((w & 7) != 0) i = 1; Print::print("DIM"); write(x); //x; write(y); write(w); write(h); for (int j = 0; j < h * ((w >> 3) + i); j++) { write(pgm_read_byte_near(bitmap + j)); delay(5); } } void DigoleSerialDisp::setRot90(void) { Print::print("SD1"); } void DigoleSerialDisp::setRot180(void) { Print::print("SD2"); } void DigoleSerialDisp::setRot270(void) { Print::print("SD3"); } void DigoleSerialDisp::undoRotation(void) { Print::print("SD0"); } void DigoleSerialDisp::setRotation(uint8_t d) { Print::print("SD"); write(d); } void DigoleSerialDisp::setContrast(uint8_t c) { Print::print("CT"); write(c); } void DigoleSerialDisp::drawBox(uint8_t x, uint8_t y, uint8_t w, uint8_t h) { Print::print("FR"); write(x); write(y); write(x + w); write(y + h); } void DigoleSerialDisp::drawCircle(uint8_t x, uint8_t y, uint8_t r, uint8_t f) { Print::print("CC"); write(x); write(y); write(r); write(f); } void DigoleSerialDisp::drawDisc(uint8_t x, uint8_t y, uint8_t r) { drawCircle(x, y, r, 1); } void DigoleSerialDisp::drawFrame(uint8_t x, uint8_t y, uint8_t w, uint8_t h) { Print::print("DR"); write(x); write(y); write(x + w); write(y + h); } void DigoleSerialDisp::drawPixel(uint8_t x, uint8_t y, uint8_t color) { Print::print("DP"); write(x); write(y); write(color); } void DigoleSerialDisp::drawLine(uint8_t x, uint8_t y, uint8_t x1, uint8_t y1) { Print::print("LN"); write(x); write(y); write(x1); write(y1); } void DigoleSerialDisp::drawLineTo(uint8_t x, uint8_t y) { Print::print("LT"); write(x); write(y); } void DigoleSerialDisp::drawHLine(uint8_t x, uint8_t y, uint8_t w) { drawLine(x, y, x + w, y); } void DigoleSerialDisp::drawVLine(uint8_t x, uint8_t y, uint8_t h) { drawLine(x, y, x, y + h); } void DigoleSerialDisp::nextTextLine(void) { write((uint8_t) 0); Print::print("TRT"); } void DigoleSerialDisp::setFont(uint8_t font) { Print::print("SF"); write(font); } void DigoleSerialDisp::setColor(uint8_t color) { Print::print("SC"); write(color); } void DigoleSerialDisp::backLightOn(void) { Print::print("BL"); write((uint8_t) 1); } void DigoleSerialDisp::backLightOff(void) { Print::print("BL"); write((uint8_t) 0); } void DigoleSerialDisp::directCommand(uint8_t d) { Print::print("MCD"); write(d); } void DigoleSerialDisp::directData(uint8_t d) { Print::print("MDT"); write(d); } void DigoleSerialDisp::moveArea(uint8_t x0, uint8_t y0, uint8_t w, uint8_t h, char xoffset, char yoffset) { Print::print("MA"); write(x0); write(y0); write(w); write(h); write(xoffset); write(yoffset); } void DigoleSerialDisp::uploadStartScreen(int lon, const unsigned char *data) { int j; uint8_t c; Print::print("SSS"); write((uint8_t) (lon % 256)); write((uint8_t) (lon / 256)); for (j = 0; j < lon;j++) { if((j%32)==0) delay(50); delay(_Comdelay); c=pgm_read_byte_near(data+j); write(c); } } void DigoleSerialDisp::uploadUserFont(int lon, const unsigned char *data, uint8_t sect) { uint8_t c; Print::print("SUF"); write(sect); write((uint8_t) (lon % 256)); write((uint8_t) (lon / 256)); for (int j = 0; j < lon; j++) { if((j%32)==0) delay(50); delay(_Comdelay); c=pgm_read_byte_near(data+j); write(c); } }