우노 조이! 소프트웨어 UNO JOY

부품정보 2018. 7. 1. 16:57 Posted by D.E.C.E.M.B.E.R
반응형

우노 조이! 소프트웨어 ( UNO JOY )

PS3 호환 USB 조이스틱


출처:

https://www.youtube.com/watch?v=GrO8ZmxbOyI

https://code.google.com/archive/p/unojoy/downloads


UNO JOY source

 소프트웨어


 UnoJoyWin-21Feb2013.zip


UnoJoyWin 프로그램만 실행시키면 된다.




기타 아두이노 용

레오나르도, 메가 ,....


 spelunky-1.1.zip

UnoJoy-master.z01

UnoJoy-master.z02

UnoJoy-master.z03

UnoJoy-master.z04

UnoJoy-master.z05

UnoJoy-master.z06

UnoJoy-master.z07

UnoJoy-master.z08

UnoJoy-master.z09

UnoJoy-master.zip


DFU MODE 프로그램


flip 347.z01

flip 347.z02

flip 347.z03

flip 347.zip


Arduino Uno를 PS3 호환 USB 조이스틱으로  ....


사용 가능 아두이노 우노



표시 부분을 잠깐동안 쇼트시켜 DFU 모드로 만들어 줘야 한다.

그러므로 AREF 핀이 있는 아두이노 보드만  가능하다.


우노 조이!


UnoJoy를 사용하면 일반 Arduino Uno를 

Windows, OSX 및 PlayStation 3 (홈 버튼 지원 포함)과 호환되는 기본 USB 게임 컨트롤러로 변환 할 수 있다.


프로젝트 블로그에서 확인 가능하다.

오래된 블로그라 내용정리가 잘 안되어 있고 일부 파일들과 그림들이 링크가 끊겨 있다.

그래서 이블로그를 참조로 다시 정리했다.


http://unojoy.tumblr.com

모든 내용은 우노조이 블로그의 내용을 그대로 참조했으며 

조금 더 자세하게 기술했다.

그러므로 이블로그만 따라해도 충분히 구현이 가능하다.


어떻게 작동 하는가?


UnoJoy는 Arduino 용 라이브러리와 Arduino의 통신 칩을위한 특수 펌웨어 파일의 조합이다. 

컨트롤러를 직접 만들려면 다음을 수행하면 된다.


  1. 아두이노 부트 로더 용 드라이버 프로그램 설치
  2. Arduino에서 라이브러리를 사용하여 원하는 컨트롤러 입력과 계산을 PS3 컨트롤러의 버튼과 스틱에 매핑하여 컨트롤러와 상호 작용할 수 있다.
  3. Arduino 모드 인 상태에서 포함 된 테스트 응용 프로그램을 사용하여 컨트롤러를 쉽게 테스트 할 수 있다.
  4. 여기 올려놓은 프로그램를 사용하여 Arduino 펌웨어로 다시 플래시한다.
  5. PC / Mac / PS3에 연결하여 게임한다!



펌웨어 플래싱 도구는 사용하기가 쉽고 언제든지 UnoJoy 프로젝트를 일반 Arduino로 쉽게 되돌릴 수 있다!


 관련 소스는 맨위에 있다. 


https://code.google.com/archive/p/unojoy/wikis/GettingStarted.wiki


unojoy - 시작하기 .wiki

소개


UnoJoy는 Arduino 와 좀 다르기 때문에 다소 이상 할수 있다. 

두 단계 과정이므로

- 먼저 Arduino에 코드를 업로드해야하지만 

- 그 다음에는 다음과 같은 특수 프로그램을 실행해야한다. 

- Arduino를 DFU 컨트롤러로 변경한다. 



1 단계 : Arduino에 조이스틱 프로그램 넣기

UnoJoy 폴더에서 UnoJoyArduinoSample 폴더의 

Arduino 스케치[UnoJoyArduinoSample ]를 연다. 

이 코드를 Arduino에 업로드한다.


UnoJoy.h

UnoJoyArduinoSample.ino



https://www.arduino.cc/en/Main/Software

======================================================================================================================================


#include "UnoJoy.h"

void setup(){
  setupPins();
  setupUnoJoy();
}

void loop(){
  // Always be getting fresh data
  dataForController_t controllerData = getControllerData();
  setControllerData(controllerData);
}

void setupPins(void){
  // Set all the digital pins as inputs
  // with the pull-up enabled, except for the 
  // two serial line pins
  for (int i = 2; i <= 12; i++){
    pinMode(i, INPUT);
    digitalWrite(i, HIGH);
  }
  pinMode(A4, INPUT);
  digitalWrite(A4, HIGH);
  pinMode(A5, INPUT);
  digitalWrite(A5, HIGH);
}

dataForController_t getControllerData(void){
  
  // Set up a place for our controller data
  //  Use the getBlankDataForController() function, since
  //  just declaring a fresh dataForController_t tends
  //  to get you one filled with junk from other, random
  //  values that were in those memory locations before
  dataForController_t controllerData = getBlankDataForController();
  // Since our buttons are all held high and
  //  pulled low when pressed, we use the "!"
  //  operator to invert the readings from the pins
  controllerData.triangleOn = !digitalRead(2);
  controllerData.circleOn = !digitalRead(3);
  controllerData.squareOn = !digitalRead(4);
  controllerData.crossOn = !digitalRead(5);
  controllerData.dpadUpOn = !digitalRead(6);
  controllerData.dpadDownOn = !digitalRead(7);
  controllerData.dpadLeftOn = !digitalRead(8);
  controllerData.dpadRightOn = !digitalRead(9);
  controllerData.l1On = !digitalRead(10);
  controllerData.r1On = !digitalRead(11);
  controllerData.selectOn = !digitalRead(12);
  controllerData.startOn = !digitalRead(A4);
  controllerData.homeOn = !digitalRead(A5);
  
  // Set the analog sticks
  //  Since analogRead(pin) returns a 10 bit value,
  //  we need to perform a bit shift operation to
  //  lose the 2 least significant bits and get an
  //  8 bit number that we can use  
  controllerData.leftStickX = analogRead(A0) >> 2;
  controllerData.leftStickY = analogRead(A1) >> 2;
  controllerData.rightStickX = analogRead(A2) >> 2;
  controllerData.rightStickY = analogRead(A3) >> 2;
  // And return the data!
  return controllerData;
}


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

2 단계 : 처리중인 컨트롤러 테스트

UnoJoy 폴더에서 UnoJoyProcessingVisualizer에서 Processing 스케치를 연다. 

이것을 실행하면 컨트롤러의 왼쪽 상단에 조이스틱이 있고 

버튼을 누르지 않은 것을 볼 수 있다. 

핀 2 를 접지에 연결하면 삼각형 버튼이 켜진다.

아무리 실행 시켜도 그림처럼 화면이 나온다.

일단 테스트 화면이라고 하니 그냥 다음단계로 넘어가기로 한다.




3 단계 : DFU 부트 로더 용 드라이버 설치

UnoJoy 폴더에는 실행중인 OS에 적합한 드라이버 설치 프로그램이 있다.

Windows - InstallUnoJoyDrivers.bat

TurnToJoystick.Bat  실행시킨다.


 TurnIntoAnArduino  로 다시 전화하려면  DFU로 전환후 실행시키고 케이블 다시 연결한다.

그리고 TurnToJoystick.Bat  TurnToArduino.Bat을 실행시킨다.

그렇게 안하면 그림과 같은 에러가 나온다.

조이스틱으로 작동 

1. DFU 모드 (핀쇼트)

2.  TurnIntoAJoystick.bat 

3. USB 케이블 재연결한다.


아두이노로 작동

1. DFU 모드 (핀쇼트)

2. TurnToArduino.Bat

3. USB 케이블 재연결한다.



OSX Lion - LionUnoJoyDrivers.pkg

OSX Snow Leopard - SnowLeopardUnoJoyDrivers.pkg

그런 다음 Arduino를 컴퓨터에 연결 한 상태에서 다음 두 핀을 연결하여 Arduino를 DFU 모드로 설정한다.

드라이버로 1초정도 쇼트 시키면 DFU 모드로 전환된다.

핀을 쇼트시키기전 장치 관리자


핀을 쇼트시킨후 장치 관리자

atmel.flip 설치 정보에서 마우스오른쪽 버튼 누르고 설치 한다.

아니면 DPinst-amd64 실행

장치 드라이버 설치후 장치 관리자

이제 아두이노가 아닌 DFU 모드로 작동한다.




http://wiki.unojoy.googlecode.com/hg/Images/ResetDFU.JPG


4 단계 : Arduino 통신 칩을 다시 플래시 한다.

Windows에서는 Atmel FLIP 도구도 다운로드하여 설치해야합니다.

이 도구는 아래 사이트 에서 찾을 수 있다.

http://www.atmel.com/tools/FLIP.aspx


그냥 FLIP347 프로그램을 설치하기만 하면 된다.


드라이버가 설치되었으므로 이제 UnoJoy 폴더로 돌아가서 TurnIntoAJoystick.bat 

(또는 .command) 응용 프로그램을 실행한다. 

그림과 같이 실행된다.


조이스틱으로 작동 

1. DFU 모드 (핀쇼트)

2.  TurnIntoAJoystick.bat 

3. USB 케이블 재연결한다.


아두이노로 작동

1. DFU 모드 (핀쇼트)

2.  TurnToArduino.Bat

3. USB 케이블 재연결한다.


컴퓨터에서 Arduino  USB를 뽑았다가 다시 연결하면 시스템에 조이스틱으로 나타난다.

컴퓨터가 현재 Arduino를 어떻게 보는 지 확인하려면 :

Windows 7이나 10에서는 다음으로 이동하여 확인할 수 있습니다.

시작 -> 장치 및 프린터

Arduino 모드에서는 'Arduino UNO (COM 4)'으로 표시 된다. ( 장치관리자 만 보임)

DFU 모드에서는 'Arduino UNO DFU' 또는 ATMega16U2로 표시된다. 

                           (장치 관리자,장치및프린터에서 보임 )

UnoJoy 모드에서는 'UnoJoy Joystick'으로 표시됩니다. (장치및프린터에서만 보임)









업데이트를 보려면 새로 고침 (command-R)해야 할 수도 있다. 

Arduino 모드에서는 'Arduino UNO'로 표시 된다. 

DFU 모드에서는 'Arduino UNO DFU'로 표시된다. 

UnoJoy 모드에서는 'UnoJoy Joystick'으로 표시 된다.

5 단계 : 자체 컨트롤러 만들기 시작

이제 기본 컨트롤러를 함께 사용 했으므로 아마도 이 컨트롤러를 변경하기를 원할 것이다.

그러나 Arduino는 Arduino 모드 일 때만 새 코드를 사용할 수 있다. 

Arduino를 Arduino 모드로 되돌리려면 Arduino를 연결하고 

3단계에서했던 것처럼 DFU 모드로 되돌려 놓은 다음 

'TurnIntoAnArduino.bat'또는 .command 프로그램을 실행한다. 

Arduino를 뽑았다가 다시 꽂으면 Arduino로 다시 표시된다. 

그런 다음 컨트롤러를 개발하는 가장 쉬운 방법은 다음 단계를 따르는 것이다. 


1. Arduino (Arduino 모드)로 코드 변경 및 업로드 

1. UnoJoyProcessingVisualizer.exe (Arduino 모드)를 연다. 

1. 컨트롤러 기능 테스트 (Arduino 모드) 

1 컨트롤러에 만족할 때까지 1 ~ 3 단계를 반복 한다. 

1. UnoJoy로 변경 한 다음 PC에 연결 한다. (UnoJoy 모드). 

1. 새 컨트롤러로 게임 한다.


https://datasheet.octopart.com/A000066-Arduino-datasheet-38879526.pdf


Arduino-A000066-datasheet.pdf


#########################################################################################################

조이스틱 에 할당된  번호들이다.

이중 사용하지 않는 번호를 레버의  Up Down Left Right 에 할당하면 된다.

아니면 아두이노의 아날로그 A0 A1 A2 A3 A4 A5 중에서  조이스틱레버에 할당하면 된다..

디지탈 부분만으로 사용시는  4개의 키를 레버에 할당해서 사용하면된다.


controllerData.triangleOn = !digitalRead(2);  //  4  ***

  controllerData.circleOn = !digitalRead(3);    // 3  ***

  controllerData.squareOn = !digitalRead(4);    //  1  ***

  controllerData.crossOn = !digitalRead(5);     //2   ***

  controllerData.l1On = !digitalRead(6);        //5   ***

  controllerData.l2On = !digitalRead(7);        //7   ***

  controllerData.l3On = !digitalRead(8);        // 11  ***


  controllerData.r1On = !digitalRead(9);        // 6   ***

   controllerData.r2On = !digitalRead(10);        //8   ***

   controllerData.r3On = !digitalRead(11);        // 12   ***


   controllerData.selectOn =!digitalRead(12);        // 9  ***

   controllerData.homeOn = !digitalRead(13);    //  13

   controllerData.startOn = !digitalRead(A5);    //10  ***


==============================================

#####################################################

버튼 연결 방법

우노조이 샘플===========================

UnoJoyArduinoSample.ino

UnoJoy.h


D6       UP     

D7       DOWN

D9       RIGHT 

D8       LEFT  

D4     1

D5     2

D3    3

D2    4

D10   5

D11  6

D12  9

A5    13

A4     10



A0  아날로그

A1  아날로그

A2  아날로그

A3  아날로그

A4     10

A5      13

=====================================================

=====================================================

모든 버튼 사용 가능 하도록 수정

아날로그 값을 모두 디지탈 값으로 바꾸어 주었다.


####################################################

####################################################


아날로그 값을 모두 디지탈 값으로 바꾸어 주었다.

void setupPins(void){

     for (int i = 2; i <= 13; i++){

    pinMode(i, INPUT);

    digitalWrite(i, HIGH);

  }

  pinMode(A0, INPUT);

  digitalWrite(A0, HIGH);

  pinMode(A1, INPUT);

  digitalWrite(A1, HIGH);

  pinMode(A2, INPUT);

  digitalWrite(A2, HIGH);

  pinMode(A3, INPUT);

  digitalWrite(A3, HIGH);

   pinMode(A4, INPUT);

  digitalWrite(A4, HIGH);

  pinMode(A5, INPUT);

  digitalWrite(A5, HIGH);

}

##############################################

===================================================

digitalUNO.ino

UnoJoy.h

  

D2     4 

D3    3

D4     1

D5     2

D6    5

D7    7

D8    11

D9     6

D10   8

D11   12

D12   9

D13   13


A0        할당 안함

A1    Up

A2    Down

A3    Left

A4    Right

A5     10





Tutorial como transformar Arduino Uno R3 em joystick (Unojoy)




반응형

'부품정보' 카테고리의 다른 글

Aluminum Round Alloy Spacers M3 * 80mm for Multicopter  (0) 2018.09.03
Speed Sensor Encoder 100라인 Code Disc  (0) 2018.07.30
리뷰안 900T 프로 512G  (2) 2018.03.23
CODE DISK  (0) 2014.02.15
컴퓨터 LED 스위치 보드  (0) 2006.10.16