[WAT-JS539]조이스틱에 연결하여 캐릭터 움직이기

by WhiteAT posted Jun 21, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

가 위로 아래로 인쇄 목록

아두이노 보드로 컴퓨터 화면 제어

[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);

}



프로세싱 코드
// 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);
  } 
}

결과 화면

적군이 랜덤 위치에서 내려오며 조이스틱으로 비행이 조종이 가능합니다. 버튼을 누르면 미사일로 발사 됩니다.


 

 

 

Prev processing (쉬운 프로그래밍 언어) processing (쉬운 프로그래밍 언어) 2018.06.15by WhiteAT 프로세싱에서 키보드로 캐릭터 움직이기 Next 프로세싱에서 키보드로 캐릭터 움직이기 2018.06.15by WhiteAT
0 추천 0 비추천
Facebook Twitter Pinterest Band KakaoStory Kakao
위로 아래로 인쇄 목록
에디터 선택하기
✔ 텍스트 모드 ✔ 에디터 모드
?
에디터 사용하기 닫기

Articles

  • processing (쉬운 프로그래밍 언어) WhiteAT2018.06.15 11:12
  • [WAT-JS539]조이스틱에 연결하여 캐릭터 움직이기 WhiteAT2018.06.21 14:26
  • 프로세싱에서 키보드로 캐릭터 움직이기 WhiteAT2018.06.15 18:02
1