Test for graphic and bargraph for ST7735 160x80 tft display

Dependencies:   mbed Adafruit_ST7735 Adafruit_GFX

Fork of ST7735_TFT_graphicstest_Bargraphtest by Joël Imbaud

http://mbed.org/media/uploads/jimbaud/screen1.jpg

main.cpp

Committer:
jimbaud
Date:
2020-05-06
Revision:
2:5d07d701f146
Parent:
0:b0981712db9b

File content as of revision 2:5d07d701f146:

#include "mbed.h"
#include "Adafruit_ST7735.h"


AnalogIn analogIn(A3); // Potentiometer plugged as a voltage divider on the input A3

/***************************************************
Simple Bar Graph for the 160x80 color SPI display
Code adapted from here: http://henrysbench.capnfatz.com/henrys-bench/arduino-adafruit-gfx-library-user-guide/arduino-adafruit-gfx-bar-graph/

Connexions

 * Pins
 * LED 3.3V
 * SCL D13
 * SDA D11(MOSI)
 * DC D8
 * RES D9
 * CS D10
 * GND GND
 * VCC 3.3V

 ****************************************************/

#define BACKCOLOR 0x0000
#define BARCOLOR 0x0620
#define SCALECOLOR 0xFFFF

int LastPercent, LastPercent2 = 0;

Adafruit_ST7735 tft(D11, D12, D13, D10, D8, D9); // MOSI, MISO, SCLK, SSEL, TFT_DC, TFT_RST

void drawScale(void);
void drawBar (int nPer);
void drawBar2 (int nPer2);

void testlines(uint16_t color);
void testfastlines(uint16_t color1, uint16_t color2);
void testdrawrects(uint16_t color);
void testfillrects(uint16_t color1, uint16_t color2);
void testfillcircles(uint8_t radius, uint16_t color);
void testdrawcircles(uint8_t radius, uint16_t color);
void testtriangles(void);
void testroundrects(void);
void mediabuttons(void);
void testdrawtext(char *text, uint16_t color);
void tftPrintTest(void);



// tft.setRotation(tft.getRotation()+1);

int main(void)
{

    tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
    tft.fillScreen(BACKCOLOR);

    tft.fillScreen(ST7735_BLACK);
    testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
    wait_ms(1000);

    // tft print function!
    tftPrintTest();
    wait_ms(1000);

    tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
    wait_ms(500);

    testlines(ST7735_YELLOW);
    wait_ms(500);

    testfastlines(ST7735_RED, ST7735_BLUE);
    wait_ms(500);

    testdrawrects(ST7735_GREEN);
    wait_ms(500);

    testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
    wait_ms(500);

    tft.fillScreen(ST7735_BLACK);
    testfillcircles(10, ST7735_BLUE);
    testdrawcircles(10, ST7735_WHITE);
    wait_ms(500);

    testroundrects();
    wait_ms(500);

    testtriangles();
    wait_ms(500);

    mediabuttons();
    wait_ms(500);

    tft.invertDisplay(true);
    wait_ms(500);
    tft.invertDisplay(false);
    wait_ms(500);

// Bargraph section
    tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
    tft.fillScreen(BACKCOLOR);

    drawScale();

    int newPercent;
    tft.setTextSize(1);
    tft.setCursor(24, 0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextWrap(true);
    tft.printf("Test Bargraph");
    tft.setCursor(24, 47);
    tft.printf("100");
    tft.setCursor(24, 71);
    tft.printf("75");
    tft.setCursor(24, 96);
    tft.printf("50");
    tft.setCursor(24, 121);
    tft.printf("25");
    tft.setCursor(24, 146);
    tft.printf("0");
    while(1) {

        newPercent = analogIn.read()*100;

        if (newPercent != LastPercent) {
            drawBar(newPercent);
            drawBar2(newPercent - 2);
            wait_ms(100);
        }

    }
}


void drawScale()
{
    tft.drawFastVLine(45, 50,100, SCALECOLOR ); // Vertical Scale Line
    tft.drawFastHLine(37, 50, 8, SCALECOLOR); // Major Division
    tft.drawFastHLine(40, 74, 5, SCALECOLOR); // Minor Division
    tft.drawFastHLine(37, 99, 8, SCALECOLOR); // Major Division
    tft.drawFastHLine(40, 124, 5, SCALECOLOR); // Minor Division
    tft.drawFastHLine(37, 149, 8, SCALECOLOR);  // Major Division
}


void drawBar (int nPer)
{

    if(nPer < LastPercent) {
        tft.fillRect(50, 50 + (100-LastPercent), 10, LastPercent - nPer,  BACKCOLOR);
    }
    if(nPer>LastPercent && nPer<90) {
        tft.fillRect(50, 50 + (100-nPer), 10, nPer - LastPercent,  BARCOLOR);
    } else {
        tft.fillRect(50, 50 + (100-nPer), 10, nPer - LastPercent,  ST7735_BLUE );
    }
    LastPercent = nPer;

}
void drawBar2 (int nPer2)
{

    if(nPer2 < LastPercent2) {
        tft.fillRect(65, 50 + (100-LastPercent2), 10, LastPercent2 - nPer2,  BACKCOLOR);
    }
    if(nPer2>LastPercent2 && nPer2<90) {
        tft.fillRect(65, 50 + (100-nPer2), 10, nPer2 - LastPercent2,  BARCOLOR);
    } else {
        tft.fillRect(65, 50 + (100-nPer2), 10, nPer2 - LastPercent2,  ST7735_RED );
    }
    LastPercent2 = nPer2;

}

void testlines(uint16_t color)
{
    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, 0, x, tft.height()-1, color);
    }
    for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, 0, tft.width()-1, y, color);
    }

    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    }
    for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, 0, 0, y, color);
    }

    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, tft.height()-1, x, 0, color);
    }
    for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
    }

    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    }
    for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
    }
}

void testfastlines(uint16_t color1, uint16_t color2)
{
    tft.fillScreen(ST7735_BLACK);
    for (int16_t y=0; y < tft.height(); y+=5) {
        tft.drawFastHLine(0, y, tft.width(), color1);
    }
    for (int16_t x=0; x < tft.width(); x+=5) {
        tft.drawFastVLine(x, 0, tft.height(), color2);
    }
}

void testdrawrects(uint16_t color)
{
    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color);
    }
}

void testfillrects(uint16_t color1, uint16_t color2)
{
    tft.fillScreen(ST7735_BLACK);
    for (int16_t x=tft.width()-1; x > 6; x-=6) {
        tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color1);
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color2);
    }
}

void testfillcircles(uint8_t radius, uint16_t color)
{
    for (int16_t x=radius; x < tft.width(); x+=radius*2) {
        for (int16_t y=radius; y < tft.height(); y+=radius*2) {
            tft.fillCircle(x, y, radius, color);
        }
    }
}

void testdrawcircles(uint8_t radius, uint16_t color)
{
    for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
        for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
            tft.drawCircle(x, y, radius, color);
        }
    }
}

void testtriangles()
{
    tft.fillScreen(ST7735_BLACK);
    int color = 0xF800;
    int t;
    int w = tft.width()/2;
    int x = tft.height()-1;
    int y = 0;
    int z = tft.width();
    for(t = 0 ; t <= 15; t+=1) {
        tft.drawTriangle(w, y, y, x, z, x, color);
        x-=4;
        y+=4;
        z-=4;
        color+=100;
    }
}

void testroundrects()
{
    tft.fillScreen(ST7735_BLACK);
    int color = 100;
    int i;
    int t;
    for(t = 0 ; t <= 4; t+=1) {
        int x = 0;
        int y = 0;
        int w = tft.width()-2;
        int h = tft.height()-2;
        for(i = 0 ; i <= 16; i+=1) {
            tft.drawRoundRect(x, y, w, h, 5, color);
            x+=2;
            y+=3;
            w-=4;
            h-=6;
            color+=1100;
        }
        color+=100;
    }
}

void mediabuttons()
{
    // play
    tft.fillScreen(ST7735_BLACK);
    tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
    wait_ms(500);
    // pause
    tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
    tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
    tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
    wait_ms(500);
    // play color
    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
    wait_ms(500);
    // pause color
    tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
    tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
    wait_ms(500);
    // play color
    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}

void testdrawtext(char *text, uint16_t color)
{
    tft.setCursor(0, 0);
    tft.setTextColor(color);
    tft.setTextWrap(true);
    tft.printf("%s",text);
}

void tftPrintTest()
{
    tft.setTextWrap(false);
    tft.fillScreen(ST7735_BLACK);
    tft.setCursor(0, 30);
    tft.setTextColor(ST7735_RED);
    tft.setTextSize(1);
    tft.printf("Hello World!\r\n");
    tft.setTextColor(ST7735_YELLOW);
    tft.setTextSize(2);
    tft.printf("Hello World!\r\n");
    tft.setTextColor(ST7735_GREEN);
    tft.setTextSize(3);
    tft.printf("Hello World!\r\n");
}