TFT_ILI9163C test A fork of https://github.com/sumotoy/TFT_ILI9163C

Dependencies:   Adafruit-GFX-Library TFT_ILI9163C mbed

Fork of IL9163C_test by _ peu605

main.cpp

Committer:
peu605
Date:
2015-02-04
Revision:
8:4fcf5494f425
Parent:
5:f6052f005aef
Child:
9:99e7307d5a59

File content as of revision 8:4fcf5494f425:

#include "mbed.h"

#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>

#define __MOSI D11
#define __MISO NC
#define __SCLK D13
#define __CS D10
#define __DC D9
#define __RST D8

// Color definitions
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF
#define TRANSPARENT     -1

#define SPI_BITRATE     50000000L

TFT_ILI9163C display(__MOSI, __MISO, __SCLK, __CS, __DC, __RST);
//TFT_ILI9163C display(__MOSI, __MISO, __SCLK, __CS, __DC);

Timer t;

const float p = 3.1415926;

int32_t random(int32_t howbig) {
    if (howbig == 0) {
        return 0;
    }
    return rand() % howbig;
}

int32_t random(int32_t howsmall, int32_t howbig) {
    if (howsmall >= howbig) {
        return howsmall;
    }
    int32_t diff = howbig - howsmall +1;
    return random(diff) + howsmall;
}

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

    display.clearScreen();
    for (int16_t x=0; x < display.width()-1; x+=6) {
        display.drawLine(0, display.height()-1, x, 0, color);
    }
    for (int16_t y=0; y < display.height()-1; y+=6) {
        display.drawLine(0, display.height()-1, display.width()-1, y, color);
    }
    display.clearScreen();
    for (int16_t x=0; x < display.width()-1; x+=6) {
        display.drawLine(display.width()-1, display.height()-1, x, 0, color);
    }
    for (int16_t y=0; y < display.height()-1; y+=6) {
        display.drawLine(display.width()-1, display.height()-1, 0, y, color);
    }
    wait_ms(500);
}


void testdrawtext(char *text, uint16_t color) {
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0,0);

    for (uint8_t i=0; i < 168; i++) {
        if (i == '\n') continue;
        display.writeChar(i);
        if ((i > 0) && (i % 21 == 0))
            display.printf("\n");
    }
}

void testfastlines(uint16_t color1, uint16_t color2) {
    display.clearScreen();
    for (int16_t y=0; y < display.height()-1; y+=5) {
        display.drawFastHLine(0, y, display.width()-1, color1);
    }
    for (int16_t x=0; x < display.width()-1; x+=5) {
        display.drawFastVLine(x, 0, display.height()-1, color2);
    }
}

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

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

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

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

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

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

void tftPrintTest() {
    display.clearScreen();
    display.setCursor(0, 5);
    display.setTextColor(RED);
    display.setTextSize(1);
    display.printf("Hello World!\n");
    display.setTextColor(YELLOW, GREEN);
    display.setTextSize(2);
    display.printf("Hello Wo");
    display.setTextColor(BLUE);
    display.setTextSize(3);
    display.printf("%.2f", 12.57);
    wait_ms(1500);
    display.setCursor(0, 5);
    display.clearScreen();
    display.setTextColor(WHITE);
    display.setTextSize(0);
    display.printf("Hello World!\n");
    display.setTextSize(1);
    display.setTextColor(GREEN);
    display.printf("%5f", p);
    display.printf(" Want pi?\n");
    display.printf("%x", 8675309);
    display.printf(" Print HEX\n");
    display.setTextColor(WHITE);
    display.printf("Sketch has been\n");
    display.printf("running for: \n");
    display.setTextColor(MAGENTA);
    display.printf("%d", t.read_ms() / 1000);
    display.setTextColor(WHITE);
    display.printf(" sec.");
}


void randomRect(bool fill) {
    display.clearScreen();
    uint8_t k,c;
    for (k = 0; k < 16; k++) {
        for (c = 0; c < 32; c++) {
            uint8_t cx, cy, x, y, w, h;
            //  center
            cx = random(0,display.width());
            cy = random(0,display.height());
            //  size
            w = random(0,30 + 6);
            h = random(0,20 + 4);
            //  upper-left
            x = cx - w / 2;
            y = cy - h / 2;
//      if (x < 0) x = 0;
//      if (y < 0) y = 0;
            //  adjust size
            if (x + w > display.width()) w = display.width() - x;
            if (y + h > display.height()) h = display.height() - y;
            if (fill) {
                display.fillRect(x, y, w, h,random(0x0010,0xFFFF));
            } else {
                display.drawRect(x, y, w, h,random(0x0010,0xFFFF));
            }

        }
        display.clearScreen();
    }
}

void randomCircles(bool fill) {
    display.clearScreen();
    uint8_t k,c;
    for (k = 0; k < display.height(); k++) {
        for (c = 0; c < display.height()/2; c++) {
            //  coordinates
            uint8_t x = random(0,120 + 3), y = random(0,90 + 2), r = random(0,40 + 1);
            if (x - r <  0) r = x;
            if (x + r > (display.width()-1)) r = (display.width() - 1) - x;
            if (y - r <  0) r = y;
            if (y + r > (display.height()-1)) r = (display.height() - 1) - y;
            if (fill) {
                display.fillCircle(x, y, r,random(0x0010,0xFFFF));
            } else {
                display.drawCircle(x, y, r,random(0x0010,0xFFFF));
            }
        }
        if (!fill)display.clearScreen();
    }
}


void randomLines() {
    display.clearScreen();
    uint8_t k,c;
    for (k = 0; k < display.height(); k++) {
        for (c = 0; c < display.height()/2; c++) {
            uint8_t x1 = random(0,display.width()), y1 = random(0,display.height()), x2 = random(0,display.width()), y2 = random(0,display.height());
            display.drawLine(x1, y1, x2, y2,random(0x0010,0xFFFF));
        }
        display.clearScreen();
    }
}


void randomPoints() {
    display.clearScreen();
    for (uint8_t k = 0; k < 128; k++) {
        for (uint16_t c = 0; c < 1000; c++) {
            uint8_t x = random(0,display.width()), y = random(0,display.height());
            display.drawPixel(x, y, random(0x0010,0xFFFF));
        }
        display.clearScreen();
    }
}

void loop() {

    testlines(random(0x0010,0xFFFF));
    randomLines();
    //randomCircles(1);
    randomCircles(0);
    randomRect(1);
    randomRect(1);
    randomRect(1);
    randomRect(1);
    randomRect(1);
    randomRect(0);
    randomRect(0);
    randomRect(0);
    randomRect(0);
    randomRect(0);
    randomRect(0);
    randomPoints();
}

void setup(void) {

    t.start();

    display.begin();
    display.setBitrate(SPI_BITRATE);
    display.setRotation(2);

//  lcdTestPattern();
//  delay(1000);

    display.clearScreen();
    display.setCursor(0,0);
    display.printf("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa");
    wait_ms(1000);

    tftPrintTest();
    wait_ms(2000);

    //a single pixel
    display.drawPixel(display.width()/2, display.height()/2, GREEN);
    wait_ms(500);

    // line draw test
    testlines(YELLOW);
    wait_ms(500);

    // optimized lines
    testfastlines(RED, BLUE);
    wait_ms(500);

    testdrawrects(GREEN);
    wait_ms(1000);

    testfillrects(BLUE, YELLOW);
    wait_ms(1000);

    randomRect(0);
    wait_ms(100);
    randomCircles(0);
    wait_ms(100);
    randomLines();
    wait_ms(100);
    randomPoints();
    wait_ms(500);

    display.clearScreen();
    testfillcircles(10, BLUE);
    testdrawcircles(10, WHITE);
    wait_ms(1000);

    testroundrects();
    wait_ms(500);

    testtriangles();
    wait_ms(500);
}

int main() {

    setup();

    while (true) {
        loop();
    }
}