사용 휴대폰 LG G3
화면을 터치하면 메뉴 on / off
동여상 보기 클릭
아두이노 휴대폰을 디스플레이로 활용하기(2) 슬라이드 메뉴
Bluetooth Display 예제2(조이스틱 사용)
Bluetooth Display 예제3 원테두리에 다른 작은원 그리기
아두이노 소스 | |
#define _BT Serial // 하드웨어 기본 시리얼을 블루투스로 사용 #include "D:\\myHeader\\Display.H" // 디스플레이 코어 클래스( 디스플레이 앱과 통신 하는 곳 ) #define _APK_ apk파일로 앱을 휴대폰에 추가 한 경우 #ifdef _APK_ #define LoadImg; hp.load("/storage/emulated/0/Android/data/appinventor.ai_구글ID.Display/files/radar.jpg"); #else #define LoadImg; hp.load("/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/radar.jpg"); #endif Display hp; // 디스플레이 생성 (연결 블루투스 수만큼 생성 가능 - 다중 모니터 가능 ) int cx,cy; // 화면 중앙의 좌표 void setup() { hp.begin(); // 디스플레이 시작( 블루투스 시작) hp.waitDisplayStart(); // 디스플레이가 연결 될 때까지 기다림 hp.clear(); cx=hp.width() /2; cy=hp.height() /2 ; hp.load(""); // clear()는 배경 이미지는 안 지워짐 ( 배경이미지는 load("")하면 없어짐 ) hp.color(Silver); //그리기 색 지정 4byte Alpha R G B ARGB_COLOR.H에 정의 되어 있음 for(int r=180; r <360 ; r+=10) hp.arc(0,0,200,200,r,10,true,false); hp.save("/radar.jpg"); hp.textAt(atCenter); hp.textSize(20); hp.text(cx,150,"현재화면이 radar.jpg로 저장됨..."); hp.text(cx,180,"3초 후 다음으로 넘어감 "); for( int x=0; x<3 ; x++) { hp.text(50+x*40,200,String(3-x)+" "); delay(1000); } hp.load("Display.png"); //앱에 내장 되어 있는 초기 화면 그림 hp.color(MidnightBlue ); hp.rec(cx-50,cy-30,cx+50,cy+30,true); hp.color(White); hp.textSize(28); hp.text(cx,cy,"아두이노"); hp.color(Red); for( int x=0; x< cx*2; x+=10) { if( x%20 ) hp.color(Red); else hp.color(Blue); hp.line(x,0,cx,cy-30); } for( int y=0; y< cy*2; y+=10) { if( y%20 ) hp.color(Red); else hp.color(Blue); hp.line(cx+50,cy,cx*2,y); } for( int x=cx*2; x>0; x-=10) { if( x%20 ) hp.color(Red); else hp.color(Blue); hp.line(x,cy*2,cx,cy+30); } for( int y=cy*2; y>0; y-=10) { if( y%20 ) hp.color(Red); else hp.color(Blue); hp.line(cx-50,cy,0,y); } } //end setup void loop() { LoadImg; hp.color(Red); for(int r=180; r <350 ; r+=10) { hp.clear(); hp.arc(0,0,200,200,r,5,true,true); } for(int r=360; r >180 ; r-=10) { hp.clear(); hp.arc(0,0,200,200,r,5,true,true); } hp.color(Yellow); int y=50; for(int s=5; s< 50; s+=5) { hp.textSize( s ); hp.text(cx,y=y+s,"디스플레이 Arduino"); } delay(1000); } |
조이스틱 예제 | |
#define _BT Serial #include "D:\\myHeader\\Display.H" Display hp; bool sw=false; int x,y,bx,by,dx,dy; long bc; String toStr( int i) { if( i<10 ) return " " + String(i); else if( i< 100) return " " + String(i); else return String(i); } void setup() { pinMode( 2,INPUT_PULLUP); // 조이스틱 클릭 hp.begin(); hp.waitDisplayStart(); x=hp.width()/2; y=hp.height()/2; dx=x; dy=y; hp.load(""); hp.textSize(10); hp.color(Yellow); hp.text(10,10,"X 좌표 : "); hp.text(10,30,"Y 좌표 : "); hp.color(Blue); hp.rec(60,0,80,10,true); hp.rec(60,20,80,30,true); hp.color(White); hp.text(60,10, toStr( x ) ); hp.text(60,30, toStr( y ) ); } void loop() { int _x=analogRead(A1); //조이스틱 x int _y=analogRead(A0); // 조이스틱 y bool _sw= ! digitalRead(2); // 풀업은 선택시 false 평상시 true if( _x >612 || _x <412) { x+=(_x-512)/10; //조이스틱 기울기가 클수록 많이 변화 if( x< 0) x=0; if( x>hp.width())x=hp.width(); bc=hp.getPixel(x,y); hp.color(Blue); hp.rec(60,0,80,10,true); hp.color(bc); hp.pixel(bx,by); hp.color(White); hp.text(60,10, toStr( x ) ); hp.pixel(x,y); bx=x; by=y; } if( _y >612 || _y <412) { y+=(_y-512)/10; if( y< 0) y=0; if( y>hp.height())y=hp.height(); bc=hp.getPixel(x,y); hp.color(Blue); hp.rec(60,20,80,30,true); hp.color(bc); hp.pixel(bx,by); hp.color(White); hp.text(60,30, toStr( y ) ); hp.pixel(x,y); bx=x; by=y; } if( _sw != sw ) { hp.color(Green); // if( sw ) hp.circle(x,y,10,true); if( sw ) { hp.line(x,y,dx,dy); dx=x; dy=y; } sw=_sw; } } |
원테두리에 작은 원 그리기 | |
#define _BT Serial #include "D:\\myHeader\\Display.H" #define _APK_ #ifdef _APK_ String path="/storage/emulated/0/Android/data/appinventor.ai_jhinyee.Display/files/"; #else String path="/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/"; #endif Display hp; int w,h,x=-130,d=1; int ax( int _x ) //일반 좌표를 물리적인 디스플레이 좌표로 변환 { return _x+w/2; } int ay( int _y) //일반 좌표를 물리적인 디스플레이 좌표로 변환 { return h-(_y+h/2) ; } int r(int _x , int _r) // X좌표와 거리로 Y좌표 구하기 { return sqrt( _r*_r - _x*_x ) ; } void setup() { hp.begin(); hp.waitDisplayStart(); hp.clear(); w=hp.width(); h=hp.height(); hp.textSize(20); hp.color(White); hp.text(0,20,"화면 중앙을 0,0 좌표로 설정"); hp.text(ax(0),ay(0),"(0,0)"); hp.text(ax(0),20,String(h/2) ); hp.text(ax(0),h,"-"+String(h/2) ); hp.text(0,h/2,"-"+String(w/2)); hp.text(w-40,h/2,String(w/2)); hp.color(Gray); hp.line(0, h/2, w, h/2); hp.line(w/2, 0, w/2, h); hp.color(White); hp.circle( ax(0), ay(0), 130,false); hp.save("/bk.png"); } void loop() { hp.load( path+ "bk.png" ); int yy=r(x,130)*d; hp.color(Red); hp.line(ax(x),ay(yy),ax(-x),ay(-yy)); hp.color(Yellow); hp.circle( ax(x) ,ay( yy ), 10 ,true ); hp.color(Green); hp.circle( ax(-x) ,ay( -yy ), 10 ,true ); x=x+20*d; if( x >130 ){ x=130; d= -1; } if( x <-130 ) { x=-130; d=1; } } |
'프로젝트 > 휴대폰을 디스플레이로 활용하기' 카테고리의 다른 글
기능 개선판 아두이노 Bluetooth Display (0) | 2022.09.03 |
---|---|
앱인벤트로 라이브러리에 대응하는 블럭 만들기. (0) | 2022.08.27 |
휴대폰 디스플레이 라이브러리 클래스 (0) | 2022.08.27 |
아두이노 연결 하고 통신 테스트 하기 (0) | 2022.08.25 |
휴대폰을 무선 디스플레이로 활용하기 다중 모니터 가능 (0) | 2022.08.25 |