diff --git a/TFTLCD.cpp b/TFTLCD.cpp index bf5d823..1f8d292 100644 --- a/TFTLCD.cpp +++ b/TFTLCD.cpp @@ -2,6 +2,7 @@ // MIT license #include "TFTLCD.h" +#include "glcdfont.c" #include void TFTLCD::goHome(void) { @@ -10,6 +11,32 @@ void TFTLCD::goHome(void) { writeCommand(0x0022); // Write Data to GRAM (R22h) } +void TFTLCD::drawString(uint16_t x, uint16_t y, char *c, + uint16_t color, uint8_t size) { + while (c[0] != 0) { + drawChar(x, y, c[0], color, size); + x += size*6; + c++; + } +} +// draw a character +void TFTLCD::drawChar(uint16_t x, uint16_t y, char c, + uint16_t color, uint8_t size) { + for (uint8_t i =0; i<5; i++ ) { + uint8_t line = pgm_read_byte(font+(c*5)+i); + for (uint8_t j = 0; j<8; j++) { + if (line & 0x1) { + if (size == 1) // default size + drawPixel(x+i, y+j, color); + else { // big size + fillRect(x+i*size, y+j*size, size, size, color); + } + } + line >>= 1; + } + } +} + // draw a rectangle void TFTLCD::drawRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) { diff --git a/TFTLCD.h b/TFTLCD.h index 4415aa1..5ca5c60 100644 --- a/TFTLCD.h +++ b/TFTLCD.h @@ -75,6 +75,8 @@ class TFTLCD { void fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color); void drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color); void fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color); + void drawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint8_t s = 1); + void drawString(uint16_t x, uint16_t y, char *c, uint16_t color, uint8_t s = 1); // commands void initDisplay(void); diff --git a/examples/graphicstest/graphicstest.pde b/examples/graphicstest/graphicstest.pde index 5ea4de8..502f9bb 100644 --- a/examples/graphicstest/graphicstest.pde +++ b/examples/graphicstest/graphicstest.pde @@ -54,6 +54,15 @@ void setup(void) { tft.initDisplay(); + tft.fillScreen(BLACK); + int x = 10; + for (uint8_t size=1; size<8; size++) { + tft.drawChar(x, 100, 'A', RED, size); + x += size * 9; + } + tft.drawString(50, 50, "hello world!", RED); + delay(500); + testlines(CYAN); delay(500); testfastlines(RED, BLUE);