완성된 휴대폰 디스플레이 라이브러리 클래스
메소드 |
|||
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
|
|
'프로젝트 > 휴대폰을 디스플레이로 활용하기' 카테고리의 다른 글
기능 개선판 아두이노 Bluetooth Display (0) | 2022.09.03 |
---|---|
앱인벤트로 라이브러리에 대응하는 블럭 만들기. (0) | 2022.08.27 |
그래픽 시연 (0) | 2022.08.26 |
아두이노 연결 하고 통신 테스트 하기 (0) | 2022.08.25 |
휴대폰을 무선 디스플레이로 활용하기 다중 모니터 가능 (0) | 2022.08.25 |