This sample program is for Arduino TFT Screen module.

Dependencies:   ST7735_TFT mbed

Fork of SPI18TFT by Jonne Valola

mbedとArduino TFT LCD Screenとの接続について

Arduino TFT LCD Screenswitch science webをmbed(LPC1768)で制御するsample programです。ベースにしたprogramはSPI18TFTです。

LCD moduleとmbedの接続はベースソフトと同じです。以下に接続図を示します。
/media/uploads/suupen/arduinotftlcdscreen-mbed---.jpg

配線完成の写真です
/media/uploads/suupen/2014-09-21_10.39.18_-240x320-.jpg

表示している様子

以上

main.cpp

Committer:
suupen
Date:
2014-09-20
Revision:
1:0481ba500435
Parent:
0:309c546f048d

File content as of revision 1:0481ba500435:

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "mbed.h"
#include "ST7735_TFT.h"
#include "string"
#include "Arial12x12.h"
#include "Arial24x23.h"
#include "Arial28x28.h"

#define NUMBER_OF_STARS 300
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 160

/*star struct*/
typedef struct {
    float xpos, ypos;
    short zpos, speed;
    unsigned int color;
} STAR;

static STAR stars[NUMBER_OF_STARS];


void init_star(STAR* star, int i)
{
    /* randomly init stars, generate them around the center of the screen */

    star->xpos =  -10.0 + (20.0 * (rand()/(RAND_MAX+1.0)));
    star->ypos =  -10.0 + (20.0 * (rand()/(RAND_MAX+1.0)));

    star->xpos *= 3072.0; /*change viewpoint */
    star->ypos *= 3072.0;

    star->zpos =  i;
    star->speed =  2 + (int)(2.0 * (rand()/(RAND_MAX+1.0)));

    star->color = i*Cyan >> 2; /*the closer to the viewer the brighter*/
}


void init()
{
    int i;

    for (i = 0; i < NUMBER_OF_STARS; i++) {
        init_star(stars + i, i + 1);
    }
}


// the TFT is connected to SPI pin 5-7, CS is p8, RS is p11, reset is p15
ST7735_TFT TFT(p5, p6, p7, p8, p11, p15,"TFT"); // mosi, miso, sclk, cs, rs, reset

Serial pc(USBTX, USBRX); // tx, rx
Timer t;

extern unsigned char p1[];  // the mbed logo

int main()
{

    unsigned int centerx, centery;
    int i, j, tempx, tempy;
    init();
    TFT.set_orientation(1); // original = 1
    centerx = TFT.width() >> 1;
    centery = TFT.height() >> 1;


    TFT.claim(stdout);      // send stdout to the TFT display
    //TFT.claim(stderr);      // send stderr to the TFT display

    TFT.background(Black);    // set background to black

    TFT.foreground(White);    // set chars to white

    TFT.cls();
    TFT.set_font((unsigned char*) Arial24x23);  // select the font

    t.start();


//↓@ss demo
        for( i=0; i < 1000; i++){
          TFT.circle(rand()%TFT.width(), rand()%TFT.height(), rand()%50, rand()%0xffff);
          }
          
          for( i=0; i < 10000; i++){
          TFT.rect(rand()%TFT.width(), rand()%TFT.height(), rand()%TFT.width(), rand()%TFT.height(), rand()%0xffff);
          }
          
          for( i=0; i < 1000; i++){
          TFT.fillcircle(rand()%TFT.width(), rand()%TFT.height(), rand()%50, rand()%0xffff);
          
                    for( i=0; i < 1000; i++){
          TFT.fillrect(rand()%TFT.width(), rand()%TFT.height(), rand()%TFT.width(), rand()%TFT.height(), rand()%0xffff);
          }
          
          
          }
//↑@ss demo


    ////// demo start
    // ***************************************************************
        for( j = 0 ; j < 10000; j++)
    //    for ( j = 0 ; j < 10000; j++ )
        {


          // move and draw stars

          for (i = 0; i < NUMBER_OF_STARS; i++)
        {
          tempx = (stars[i].xpos / stars[i].zpos) + centerx;
          tempy = (stars[i].ypos / stars[i].zpos) + centery;
          TFT.pixel(tempx,tempy,Black);


          stars[i].zpos -= stars[i].speed;

          if (stars[i].zpos <= 0)
            {
              init_star(stars + i, i + 1);
            }

          //compute 3D position
          tempx = (stars[i].xpos / stars[i].zpos) + centerx;
          tempy = (stars[i].ypos / stars[i].zpos) + centery;

          if (tempx < 0 || tempx > TFT.width() - 1 || tempy < 0 || tempy > TFT.height() - 1) //check if a star leaves the screen
            {
              init_star(stars + i, i + 1);
              continue;
            }

          TFT.pixel(tempx,tempy,stars[i].color);

        }
         TFT.Bitmap(centerx-60,centery-19,120,38,p1);
        }

        ///// demo stop

        t.stop();
  //  *******************************************************************/


//↓@ss test
#ifndef 1
    TFT.set_font((unsigned char*) Arial12x12);  // select the font
    for(int x = 159; x >= 0; x--) {
//    TFT.pixel(-2,-1,0x100*x+0xff);
        TFT.rect(0, 0, x,(x-32), 0xffff);
        TFT.locate(0,10);
        printf("X=%d, y = %d",x,x-32);
        wait(0.1);
        TFT.rect(0, 0, x,(x-32), 0x0000);
    }
#else
//    TFT.locate(0,10);
    TFT.set_font((unsigned char*) Arial12x12);  // select the font
//    printf("Time %f s\n", t.read());

//   TFT.fillrect(-2, -1, 157, 126, 0);  //clr

    TFT.set_font((unsigned char*) Arial12x12);
    /*
        TFT.rect(0,0,159,127,0xffff);
        TFT.rect(10,10,20,20,0x0fff);
        TFT.rect(158,126,20,20,0xffff);
        TFT.line(0,0, 159,127,0xffff);
        TFT.line(159,0,0,127,0xffff);
    */
    for(int y = 0; y < 128; y+=1) {
        for(int x = 0; x <160; x+=1) {
            if(y%2== 0) {
                if(x%2==0) {
                    TFT.pixel(x,y,0xffff);
                } else {
                    TFT.pixel(x,y,0x0ff);
                }
            } else {
                if(x%2==0) {
                    TFT.pixel(x,y,0xff);
                } else {
                    TFT.pixel(x,y,0xffff);
                }
            }
            //wait_ms(10);
        }
    }

#endif
//↑@ss test

}