소개
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