본문 바로가기

프로젝트/휴대폰을 디스플레이로 활용하기

휴대폰 디스플레이 라이브러리 클래스

완성된 휴대폰 디스플레이 라이브러리 클래스

메소드
 begin() 블루투스 연결로 디스플에이 시작
wait() 명령 수행후 응답을 기다리며 대기( 그리기 함수에서 사용)
그래픽이 아두이노 속도 보다 느려서 명령수행 완료후 다음을 진행하기 위해
waitDisplayStart() 디스플레이가 준비 될 때 까지 기다림
 clear() 화면을 지움 단, 배경 이미지는 유지 됨
color(unsigned long c) 그리기 색상 지정  4Byte   Alpha R G B    ARGB_COLOR.H참조
bkColor(unsigned long c) 배경색 지정
int width(); 화면 너비    화면이 가로 세로 바뀌면 값도 변경
int height(); 화면 높이    화면이 가로 세로 바뀌면 값도 변경
textSize( int s); 텍스트의 크기 지정
textAt( byte a) 텍스트 정열 지정      / atLeft  0  atMid   1  atRight 2
save(String name); 화면을 저장함
load(String name); 배경화면으로 불러오기
unsigned long getPixel(int x, int y) 좌표의 점 색샹 가져오기    4byte
      그리기 함수들   디스플레이가 그리기 완료 할 때까지 기다림 ( 아두이노와 속도 맞추기)
circle( int x, int y, int r, bool f) 원 그리기  중심좌표  반지름  채우기
line( int x, int y, int x2, int y2) 선그리기    시작좌표   끝좌표
rec( int x, int y, int x2, int y2,bool f) 사가형 그리기  양쪽 끝 좌표   채우기
pixel( int x, int y); 점 그리기  
text( int x, int y, String msg); 좌표에 문자열을 그리기
Display.H
 
#ifndef _Display_
#define _Display_
#include "ARGB_COLOR.H"

#define atLeft  0
#define atMid   1
#define atRight 2

 
class Display
{
  public:
     void begin();
     void waitDisplayStart();
     void wait();      
     void clear();
     void color(unsigned long c);
     void bkColor(unsigned long c);
     int  width();
     int  height();

     void circle( int x, int y, int r, bool f);
     void arc( int x, int y, int x2, int y2, int start, int sweep, bool center , bool fill);
     void line( int x, int y, int x2, int y2);
     void rec( int x, int y, int x2, int y2,bool f);
     void pixel( int x, int y);
     unsigned long getPixel(int x, int y);
     
     void text( int x, int y, String msg);
     void textSize( int s);
     void textAt( byte a); // atLeft  0  atMid   1  atRight 2
     
     void save(String name);
     void load(String name);
  private:  
   
     void send2Byte( int n );  
};

 void Display::begin()
 {
   _BT.begin(9600);    //   속도수정 사용...  현재115200으로 잘 사용 하고  있음  (그래픽 속도가 빨라짐)
 }  

void Display::waitStartDisplay()
{
   _BT.write('e'); 
   wait(); 
}
int Display::width()
{
   int i;

   byte buff[2];
   _BT.write('W');
    while( !_BT.available() ){}
   _BT.readBytes(buff,2);
   i= buff[0]+buff[1]*0x100;
   return i;
}

int Display::height()
{
   int i;

   byte buff[2];
   _BT.write('H');
    while( !_BT.available() ){}
   _BT.readBytes(buff,2);
   i= buff[0]+buff[1]*0x100;
   return i;  
}
void Display::save(String name)
{
   _BT.write('s');
  send2Byte( name.length() );
   _BT.println(name);  
}

void Display::load(String name)
{
   _BT.write('l');
  send2Byte( name.length() );
   _BT.println(name);  
}

void Display::clear()
{
  _BT.write('Z');
}

unsigned long Display::getPixel(int x, int y)
{
 
  unsigned long c=0;
  byte buff[4];
   _BT.write('G');
   send2Byte(x);
   send2Byte(y);
    while( !_BT.available() ){}
   _BT.readBytes(buff,4);
   c= buff[0]+buff[1]*0x100+buff[2]*0x10000+buff[3]*0x1000000;    
   return c;
}

 void Display::textAt( byte a)
 {
     _BT.write('A');
     _BT.write(a);    
 }

 void  Display::textSize( int s)
 {
   _BT.write('S');
   send2Byte(s);
 }

 void Display::text( int x, int y, String msg)
 {
   _BT.write('T');
   send2Byte( msg.length() );
   send2Byte( x ) ;
   send2Byte( y );
   _BT.println(msg);  
   wait();
 }
 void Display::pixel( int x, int y)
 {
  _BT.write('P');
   send2Byte( x ) ;
   send2Byte( y );
   wait();
 }

void  Display::color(unsigned  long c)
{
    _BT.write('c');
   send2Byte( c &0xffff ) ;
   send2Byte( (c>>16) &0xffff );
}

void  Display::bkColor(unsigned  long c)
{
    _BT.write('b');
   send2Byte( c &0xffff ) ;
   send2Byte( (c>>16) &0xffff );
}

void Display::wait()
{
 while( !_BT.available() ){}
 _BT.read();
}

void Display::send2Byte( int n)
{
  _BT.write( n &0xff  );
  _BT.write( (n>>8) & 0xff );
}

void Display::circle( int x, int y, int r, bool f)
{
   _BT.write('C');
   send2Byte( x );
   send2Byte( y );
   send2Byte( r );
   _BT.write( f );
   wait();
}

void Display::arc( int x, int y, int x2, int y2, int start, int sweep, bool center , bool fill)
{
   _BT.write('a');
   send2Byte( x );
   send2Byte( y );
   send2Byte( x2 );
   send2Byte( y2 );
   send2Byte( start);
   send2Byte( sweep );
   _BT.write( center);
   _BT.write( fill );
   wait();
}
void Display::line( int x, int y, int x2, int y2)
{
    _BT.write('L');
    send2Byte( x );
    send2Byte( y );
    send2Byte( x2 );
    send2Byte( y2);
    wait();
}

void Display::rec( int x, int y, int x2, int y2,bool f)
{
   _BT.write('R');
    send2Byte( x );
    send2Byte( y );
    send2Byte( x2 );
    send2Byte( y2);
     _BT.write( f );
     wait();
}
#endif