검색
홈으로 마이페이지 주문조회 장바구니
로그인
회원정보 게시판
회사소개 이메일
도서(BOOK)
키트(KIT)
특판 상품
졸업작품&전자기초
응용모듈
전자부품
모터
기구
엔클로져
고객센터 게시판
자유게시판
MCU 통합 게시판
강좌-RaspberryPi
강좌-드론(쿼드콥터)
강좌-아두이노(기초)
강좌-아두이노(응용)
신제품/신기술 소개
DIY 공작 게시판
윤교수의 연구실 칼럼
 ☎ : 02-776-4868

 F: 02-779-6757

☞ 평일 : 09~18시
☞ 주말 : 10~13시


국민822401-04-027758
☞ 예금주 : Ohm사
국민822401-04-027761
☞ 예금주 : R&C사
 
 
1 (주)알트소프트 사이트
 
2 LabVIEW 강좌 사이트
 
3 윤교수의 마이크로프로세서 월드
 
4 전자 엔지니어
 

 

 
강좌-아두이노(응용)
 
2015. 02. 17 (13:47)
제목[아두이노 응용] 7. 2.8 Inch TFT Touch Shield
작성자 조회 : 2399

★첨부파일★

LCDTouch+for+uno.rar

Lirary+Manual.pdf

SCH_IM120417020_2.8_TFT_LCD_Touch_Shield.pdf

 

7. 2.8 Inch TFT Touch Shield

 

이번 강좌에서도 저번에 이어 TFT LCD Touch 쉴드에 대해서 다뤄 보도록 한다. 지난번과는 달리 2.8 인치 TFT LCD 쉴드며, 지원하는 라이브러리가 차이가 있다. 이 쉴드 보드는 ITead Studio에서 제작된 보드이다.

 


간단하게 특징을 살펴보면,

 

  • 2.8 Inch 240 x 320 pixel

  • 3.3V/5V 동작 전압 선택 가능

  • UTFT 라이브러리 호환

  • SD Card 소켓 내장

  • ILI9325DS 드라이버 IC를 사용

  • 8비트 데이터 인터페이스

  • TSC2046 터치 IC 사용

     

아두이노 보드와 관련된 핀맵은 아래와 같다.

 

 

쉴드 보드의 회로는 아래 그림을 참고하고, 첨부 파일에 포함된 파일을 받아 볼 수 있다.

 

 

이 보드와 함께 제공되는 라이브러리와 예제 파일은 첨부 파일을 참고하고, 여기서는 LCD 표시와 터치를 사용해 보는 예제를 간단하게 보도록 한다.

 

 

첨부 된 파일을 라이브러리에 등록 한 후에, 위의 예와 같이 를 실행 시켜 보자.

 

 

#include

 

LCDTouch TouchPPP;

int x, y;

char stCurrent[20]="";

int stCurrentLen=0;

char stLast[20]="";

 

void drawButtons()

{

// Draw the upper row of buttons

  for (x=0; x<5; x++)

  {

    TouchPPP.setColor(0, 0, 255);

    TouchPPP.fillRoundRect (10+(x*60), 10, 60+(x*60), 60);

    TouchPPP.setColor(255, 255, 255);

    TouchPPP.drawRoundRect (10+(x*60), 10, 60+(x*60), 60);

    TouchPPP.printNumI(x+1, 27+(x*60), 27,0,0);

  }

// Draw the center row of buttons

  for (x=0; x<5; x++)

  {

    TouchPPP.setColor(0, 0, 255);

    TouchPPP.fillRoundRect (10+(x*60), 70, 60+(x*60), 120);

    TouchPPP.setColor(255, 255, 255);

    TouchPPP.drawRoundRect (10+(x*60), 70, 60+(x*60), 120);

    if (x<4)

      TouchPPP.printNumI(x+6, 27+(x*60), 87,0,0);

  }

  TouchPPP.print("0", 267, 87,0);

// Draw the lower row of buttons

  TouchPPP.setColor(0, 0, 255);

  TouchPPP.fillRoundRect (10, 130, 150, 180);

  TouchPPP.setColor(255, 255, 255);

  TouchPPP.drawRoundRect (10, 130, 150, 180);

  TouchPPP.print("Clear", 40, 147,0);

  TouchPPP.setColor(0, 0, 255);

  TouchPPP.fillRoundRect (160, 130, 300, 180);

  TouchPPP.setColor(255, 255, 255);

  TouchPPP.drawRoundRect (160, 130, 300, 180);

  TouchPPP.print("Enter", 190, 147,0);

  TouchPPP.setBackColor (0, 0, 0);

}

 

void updateStr(int val)

{

  if (stCurrentLen<20)

  {

    stCurrent[stCurrentLen]=val;

    stCurrent[stCurrentLen+1]='\0';

    stCurrentLen++;

    TouchPPP.setColor(0, 255, 0);

    TouchPPP.print(stCurrent, LEFT, 224,0);

  }

  else

  {

    TouchPPP.setColor(255, 0, 0);

    TouchPPP.print("BUFFER FULL!", CENTER, 192,0);

    delay(500);

    TouchPPP.print("            ", CENTER, 192,0);

    delay(500);

    TouchPPP.print("BUFFER FULL!", CENTER, 192,0);

    delay(500);

    TouchPPP.print("            ", CENTER, 192,0);

    TouchPPP.setColor(0, 255, 0);

  }

}

 

// Draw a red frame while a button is touched

void waitForIt(int x1, int y1, int x2, int y2)

{

  TouchPPP.setColor(255, 0, 0);

  TouchPPP.drawRoundRect (x1, y1, x2, y2);

  while (TouchPPP.Touch_DataAvailable())

  TouchPPP.Touch_Read();

  TouchPPP.setColor(255, 255, 255);

  TouchPPP.drawRoundRect (x1, y1, x2, y2);

}

 

 

void setup()

{

 

  TouchPPP.LCDUTFT(LCD2_8);            

  TouchPPP.Touch_Init();         

  TouchPPP.Lcd_Init();                 

  TouchPPP.clrScr();             

  TouchPPP.fillScr(0x0000);            

  TouchPPP.setPrecision(PREC_MEDIUM);  

  TouchPPP.setFont(16,16,32);    

  TouchPPP.setBackColor(0, 0, 255);    

  drawButtons(); 

}

 

void loop()

{

  while (true)

  {

    if (TouchPPP.Touch_DataAvailable())

    {

      TouchPPP.Touch_Read();

      x=320-(TouchPPP.Touch_GetX());

      y=240-(TouchPPP.Touch_GetY());

      if ((y>=10) && (y<=60))  // Upper row

      {

        if ((x>=10) && (x<=60))  // Button: 1

        {

          waitForIt(10, 10, 60, 60);

          updateStr('1');

        }

        if ((x>=70) && (x<=120))  // Button: 2

        {

          waitForIt(70, 10, 120, 60);

          updateStr('2');

        }

        if ((x>=130) && (x<=180))  // Button: 3

        {

          waitForIt(130, 10, 180, 60);

          updateStr('3');

        }

        if ((x>=190) && (x<=240))  // Button: 4

        {

          waitForIt(190, 10, 240, 60);

          updateStr('4');

        }

        if ((x>=250) && (x<=300))  // Button: 5

        {

          waitForIt(250, 10, 300, 60);

          updateStr('5');

        }

      }

 

      if ((y>=70) && (y<=120))  // Center row

      {

        if ((x>=10) && (x<=60))  // Button: 6

        {

          waitForIt(10, 70, 60, 120);

          updateStr('6');

        }

        if ((x>=70) && (x<=120))  // Button: 7

        {

          waitForIt(70, 70, 120, 120);

          updateStr('7');

        }

        if ((x>=130) && (x<=180))  // Button: 8

        {

          waitForIt(130, 70, 180, 120);

          updateStr('8');

        }

        if ((x>=190) && (x<=240))  // Button: 9

        {

          waitForIt(190, 70, 240, 120);

          updateStr('9');

        }

        if ((x>=250) && (x<=300))  // Button: 0

        {

          waitForIt(250, 70, 300, 120);

          updateStr('0');

        }

      }

 

      if ((y>=130) && (y<=180))  // Upper row

      {

        if ((x>=10) && (x<=150))  // Button: Clear

        {

          waitForIt(10, 130, 150, 180);

          stCurrent[0]='\0';

          stCurrentLen=0;

          TouchPPP.setColor(0, 0, 0);

          TouchPPP.fillRect(0, 224, 319, 239);

        }

        if ((x>=160) && (x<=300))  // Button: Enter

        {

          waitForIt(160, 130, 300, 180);

          if (stCurrentLen>0)

          {

            for (x=0; x

            {

              stLast[x]=stCurrent[x];

            }

            stCurrent[0]='\0';

            stCurrentLen=0;

            TouchPPP.setColor(0, 0, 0);

            TouchPPP.fillRect(0, 208, 319, 239);

            TouchPPP.setColor(0, 255, 0);

            TouchPPP.print(stLast, LEFT, 208,0);

          }

          else

          {

            TouchPPP.setColor(255, 0, 0);

            TouchPPP.print("BUFFER EMPTY", CENTER, 192,0);

            delay(500);

            TouchPPP.print("            ", CENTER, 192,0);

            delay(500);

            TouchPPP.print("BUFFER EMPTY", CENTER, 192,0);

            delay(500);

            TouchPPP.print("            ", CENTER, 192,0);

            TouchPPP.setColor(0, 255, 0);

          }

        }

      }

    }

  }

}

 

제공되는 라이브러리의 함수는 사용자가 라이브러리와 같이 제공되는 라이브러리 매뉴얼를 보면서 익히도록 하고, 여기서는 몇 가지만 살펴 보도록 한다.

 

위 코드는 숫자가 표시되어 있는 박스 등을 그린 후에 터치를 이용해서 입력을 받는 동작을 하며, 자세한 동작 내용은 동영상을 통해서 확인 하도록 한다.

 

#include

 

등록된 라이브러리의 헤더 파일을 추가한 ,

 

LCDTouch TouchPPP;

 

LCDTouch에 대한 변수 하나를 생성시킨다.

 

초기화 부분을 보기 위해, setup() 부분을 보도록 하자.

 

void setup()

{

TouchPPP.LCDUTFT(LCD2_8);             // 2.8 인치

  TouchPPP.Touch_Init();                 // Touch Screen 초기화

  TouchPPP.Lcd_Init();                  // TFT LCD 초기화

  TouchPPP.clrScr();                     // Clear Screen

  TouchPPP.fillScr(0x0000);             // 특정색으로 전체화면에 출력

  TouchPPP.setPrecision(PREC_MEDIUM);   // Touch 정밀도 설정

  TouchPPP.setFont(16,16,32);            // 폰트의 선택 : BigFont

  TouchPPP.setBackColor(0, 0, 255);     // 배경색을 설정한다.

  drawButtons(); 

}

 

초기화 설정이 끝났으면, loop()에서의 터치를 이용하는 방법을 알아보자.

 

TouchPPP.Touch_DataAvailable()

 

터치스크린으로부터 새로운 데이터가 있는지를 확인한다.

 

           TouchPPP.Touch_Read();

 

터치스크린으로부터 데이터를 읽어오며, Touch_DataAvailable() 함수의 결과가 TRUE , 호출한다.

        x=320-(TouchPPP.Touch_GetX());

        y=240-(TouchPPP.Touch_GetY());

 

터치의 X 좌표와 Y 좌표를 읽어 온다. 실제 예제에서는

 

x=(TouchPPP.Touch_GetX());

        y=(TouchPPP.Touch_GetY());

 

와 같이 읽어 오게 되어 있었지만, 실제로 실행시켜 보니 LCD 좌표와 터치 스크린의 좌표가 반대로 되어 있어서, 위와 같이 변경을 하게 되었다.

 

터치 좌표에 의해 동작하는 부분은 소스를 보면서 이해하도록 하고, 이것으로 설명은 마치도록 한다.

 

 


 

 

비밀번호 확인 닫기
name password
  Content name date hits
[아두이노 응용] 7. 2.8 Inch TFT Touch Shield  
2015/02/17 2399
상호명 : R&C사 사업자등록번호 : 106-02-43112 통신판매업신고번호 : 용산 03564
대표 : 곽민수 사업장소재지 : 서울시 용산구 갈월동 17-1번지 세기빌딩 101호
전화 : ☎ : 02-776-4868 ,F: 02-779-6757 개인정보담당자 : 곽민수
[회사소개] [이용안내] [이용약관] [개인정보취급방침]
Copyright ⓒ 도서출판 OHM사와 학습기기 R&C사 All Rights Reserved.