아두이노 보드로 컴퓨터 화면 제어
[WAT-JS539] 조이스틱 게임 실험 키트 예제 중 조이스틱으로 캐릭터는 제어하는 예제입니다.
준비
실험에 사용할 WAT-JS539 보드를 컴퓨터에 USB 케이블로 연결합니다.
소스코드
아두이노 코드
최신 소스코드는 [파일]=>[예제]=>[WhiteAT UNO]=> [JS539] => [11_JS539_1] 에 있으며
라이브러리는 아두이노 개발환경 을 참조하세요
/* WAT-JS539 조이스틱 게임 실험 모듈로 조이스틱 움직임과 버튼으로 간단한 게임 가능한 예제 보드: WAT-JS539 조이스틱 (WAT-JS539) 모듈 : https://kit128.com/goods/view?no=539 WAT-JS539 설명 출처: https://docs.whiteat.com/?p=6412 */ #define DELAY 400 #define PIN_ANALOG_X 0 #define PIN_ANALOG_Y 1 #define BUTTON_UP 2 #define BUTTON_RIGHT 3 #define BUTTON_DOWN 4 #define BUTTON_LEFT 5 #define BUTTON_E 6 #define BUTTON_F 7 void setup() { Serial.begin(115200); pinMode(BUTTON_UP, INPUT); digitalWrite(BUTTON_UP, HIGH); pinMode(BUTTON_RIGHT, INPUT); digitalWrite(BUTTON_RIGHT, HIGH); pinMode(BUTTON_DOWN, INPUT); digitalWrite(BUTTON_DOWN, HIGH); pinMode(BUTTON_LEFT, INPUT); digitalWrite(BUTTON_LEFT, HIGH); pinMode(BUTTON_E, INPUT); digitalWrite(BUTTON_E, HIGH); pinMode(BUTTON_F, INPUT); digitalWrite(BUTTON_F, HIGH); } // 123,123,1,1,1,1,1,1 형태로 전송 String strSend = ""; void loop() { strSend = ""; strSend += analogRead(PIN_ANALOG_X); strSend += ","; strSend += (1023 - analogRead(PIN_ANALOG_Y)); strSend += ","; if (digitalRead(BUTTON_UP) == LOW) { strSend += "1"; } else { strSend += "0"; } strSend += ","; strSend += digitalRead(BUTTON_RIGHT) == LOW; strSend += ","; strSend += digitalRead(BUTTON_DOWN) == LOW; strSend += ","; strSend += digitalRead(BUTTON_LEFT) == LOW; strSend += ","; strSend += digitalRead(BUTTON_E) == LOW; strSend += ","; strSend += digitalRead(BUTTON_F) == LOW; Serial.println(strSend); delay(100); }
프로세싱 코드
프로세싱 전체 소스코드는 http://whiteat.com/230211 에서 제공됩니다.
// Arduino joystick play Example #01 // // KIT set // WAT-JS539 : https://kit128.com/goods/view?no=539 import processing.serial.*; Serial port; int WIDTH = 680; int HEIGHT = 853; int lastTime=0; int setTimer = 10; Enemy enemy = new Enemy(); String myString = null; PImage imageFly = new PImage() ; PImage imageFire = new PImage() ; int gun_x = 0; int gun_y = -110; PImage imageBG = new PImage() ; int x,y; void setup() { size(680,853); x = WIDTH/2-80; y = HEIGHT/3*2-80; imageFly = loadImage("fly.png"); imageFire = loadImage("gun.png"); imageBG = loadImage("bg.jpg"); println("Available serial ports:"); println(Serial.list()); port = new Serial(this, Serial.list()[0], 115200); image(imageBG,0,0,WIDTH,HEIGHT); surface.setTitle("Arduino Joystick Play Example #01 - http://docs.WhiteAT.com"); } void draw() { boolean is_refresh = false; int passedTime = millis() - lastTime; if(passedTime > setTimer) { lastTime = millis(); gun_y -=20; is_refresh = true; enemy.move(); if(enemy.IsHit(gun_x,gun_y+20)) { enemy.moveFirst(); gun_y = -100; } } int iTemp =0; myString =""; while (port.available() > 0) { myString = port.readStringUntil(10); } myString = myString.replace('\n', ' '); myString = trim(myString); if(myString.length()>0) println(myString); // x, y,A,B,C,D,E,F String[] list = split(myString, ","); // 500,503,1,1,1,1,1,1 if(is_refresh) { image(imageBG,0,0,WIDTH,865); image(imageFire,gun_x,gun_y); } if(list.length==8) { // x iTemp = Integer.parseInt(list[0]); if( iTemp<=400) x-=50; else if( iTemp>=600) x+=50; if(x<0) x+=50; else if(x>WIDTH-imageFly.width) x-=50; // y iTemp = Integer.parseInt(list[1]); if( iTemp<=400) y-=50; else if( iTemp>=600) y+=50; if(y<0) y+=50; else if(y>HEIGHT-imageFly.height) y-=50; // gun if(1== Integer.parseInt(list[5])) { if(gun_y<0) { gun_x = x +(imageFly.width -imageFire.width)/2; gun_y = y; } } } image(imageFly ,x,y); enemy.draw(); PFont f= createFont("Arial",16,true); textFont(f,32); text("WhiteAT.com, KIT128.com",20,30); } class Enemy { PImage image =null; int x=50; int y=0; public boolean IsHit(int _x,int _y ) { if ( x < _x && _x < (x + image.width) && y < _y && _y < (y + image.height) ) return true; else return false; } public void move() { y+=10; if(y >800) { moveFirst(); } } public void moveFirst() { y=0; x= (int)random(60)*10; } public void draw() { if(image ==null) image = loadImage("ghost.png"); image(image,x,y); } }
결과 화면
적군이 랜덤 위치에서 내려오며 조이스틱으로 비행이 조종이 가능합니다. 버튼을 누르면 미사일로 발사 됩니다.
목차
제품 구성
- 아두이노 R3 호환 보드
- 조이스틱 보드
- USB 케이블
- 기본 예제 제공
제공 예제
- 시작하기
- [예제 01] 1개의 LED 깜박이기(완전 기초)
- [예제 02] 기본적인 프로세싱(컴퓨터 프로그래밍) 사용방법
- [예제 03] 프로세싱에서 키보드로 캐릭터 움직이기
- [예제 04] WAT-JS539 조이스틱 쉴드로 컴퓨터 캐릭터 움직이기
제품 구매
[WAT-JS539] 아두이노 조이스틱 게임 실험 키트는 https://kit128.com/goods/view?no=539 에서 구매하실 수 있습니다.