아날로그 부분(X, Y 축)의 경우, analogRead() 함수를 사용하여 아날로그 입력 핀에서 값을 읽기만 하면 됩니다.
int xValue = analogRead(A0);int yValue = analogRead(A1);
디지털 부분(푸시버튼)에 대하여: 이것은 버튼입니다. 가장 간단하고 편리한 방법은 ezButton 라이브러리를 사용하는 것입니다. 이 라이브러리는 버튼의 디바운스를 지원하며 내부 풀업 저항을 활성화할 수 있습니다. 버튼에 대해 더 알아보려면 아두이노 - 버튼을 참고하십시오. 이 튜토리얼의 다음 세션에서 코드가 소개될 예정입니다.
아날로그 핀에서 값을 읽은 후, 우리는 그것들을 어떤 조절 가능한 값으로 변환해야 할 수도 있습니다. 다음 파트에서는 이를 위한 예제 코드를 제공할 것입니다.
아두이노 코드
이 섹션은 다음 아두이노 예제 코드를 제공할 것입니다:
예제 코드: 조이스틱에서 아날로그 값을 읽음
예제 코드: 조이스틱에서 아날로그 값과 버튼 상태를 읽음
예제 코드: 아날로그 값을 MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN 명령어로 변환함
예제 코드: 아날로그 값을 각도로 변환하여 두 개의 서보 모터를 제어함 (예: 팬-틸트 카메라)
조이스틱에서 아날로그 값을 읽습니다.
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-joystick */#define VRX_PIN A0 // Arduino 핀이 VRX 핀에 연결됨#define VRY_PIN A1 // Arduino 핀이 VRY 핀에 연결됨int xValue = 0; // X 축의 값을 저장하기 위함int yValue = 0; // Y 축의 값을 저장하기 위함voidsetup() {Serial.begin(9600) ;}voidloop() {// 아날로그 X 및 Y 아날로그 값을 읽음 xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// 아두이노 IDE의 시리얼 모니터에 데이터 출력Serial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.println(yValue);delay(200);}
사용 방법
위의 코드를 복사하여 아두이노 IDE로 열기
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드하기
조이스틱의 엄지를 최대한 끝까지 밀고, 그 다음에 시계 방향이나 반시계 방향으로 회전하기
결과를 시리얼 모니터에서 확인하기
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
조이스틱의 손가락을 돌리면서 시리얼 모니터를 계속해서 지켜보세요.
X 값이 0이면, 현재 위치를 왼쪽으로 표시하거나 기억하세요 ⇒ 반대 방향은 오른쪽입니다.
Y 값이 0이면, 현재 위치를 위로 표시하거나 기억하세요 ⇒ 반대 방향은 아래입니다.
조이스틱에서 아날로그 값을 읽고 버튼 상태를 읽습니다.
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-joystick */#include <ezButton.h>#define VRX_PIN A0 // Arduino 핀이 VRX 핀에 연결됨#define VRY_PIN A1 // Arduino 핀이 VRY 핀에 연결됨#define SW_PIN 2 // Arduino 핀이 SW 핀에 연결됨ezButtonbutton(SW_PIN);int xValue = 0; // X 축의 값을 저장하기 위함int yValue = 0; // Y 축의 값을 저장하기 위함int bValue = 0; // 버튼의 값을 저장하기 위함voidsetup() {Serial.begin(9600) ;button.setDebounceTime(50); // 50밀리초로 디바운스 시간 설정}voidloop() {button.loop(); // MUST call the loop() function first// 아날로그 X와 Y 아날로그 값을 읽기 xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// 버튼 값 읽기 bValue = button.getState();if (button.isPressed()) {Serial.println("The button is pressed");// TODO 여기서 무언가 수행하기 }if (button.isReleased()) {Serial.println("The button is released");// TODO 여기서 무언가 수행하기 }// 아두이노 IDE의 시리얼 모니터에 데이터 출력Serial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.print(yValue);Serial.print(" : button = ");Serial.println(bValue);}
사용 방법
Arduino IDE의 왼쪽 바에서 Libraries 아이콘으로 이동하세요.
“ezButton”을 검색한 다음, ArduinoGetStarted.com에서 버튼 라이브러리 찾아보세요.
EzButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
위의 코드를 복사하고 아두이노 IDE로 열기
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드하기
조이스틱의 엄지를 왼쪽/오른쪽/위/아래로 밀기
조이스틱의 엄지를 위에서 아래로 밀기
시리얼 모니터에서 결과 보기
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
아날로그 값을 왼쪽/오른쪽/위/아래로 이동하는 명령어로 변환합니다
/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-joystick */#define VRX_PIN A0 // Arduino 핀이 VRX 핀에 연결됨#define VRY_PIN A1 // Arduino 핀이 VRY 핀에 연결됨#define LEFT_THRESHOLD 400#define RIGHT_THRESHOLD 800#define UP_THRESHOLD 400#define DOWN_THRESHOLD 800#define COMMAND_NO 0x00#define COMMAND_LEFT 0x01#define COMMAND_RIGHT 0x02#define COMMAND_UP 0x04#define COMMAND_DOWN 0x08int xValue = 0 ; // X 축의 값을 저장하기 위함int yValue = 0 ; // Y 축의 값을 저장하기 위함intcommand = COMMAND_NO;voidsetup() {Serial.begin(9600) ;}voidloop() {// 아날로그 X 및 Y 아날로그 값을 읽음 xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// 아날로그 값을 명령으로 변환// 명령 초기화command = COMMAND_NO;// 좌/우 명령 확인if (xValue < LEFT_THRESHOLD)command = command | COMMAND_LEFT;elseif (xValue > RIGHT_THRESHOLD)command = command | COMMAND_RIGHT;// 상/하 명령 확인if (yValue < UP_THRESHOLD)command = command | COMMAND_UP;elseif (yValue > DOWN_THRESHOLD)command = command | COMMAND_DOWN;// 주의: 한 번에 명령이 없거나, 하나의 명령이 있거나, 두 개의 명령이 있을 수 있음// 명령을 시리얼로 출력하고 명령 처리if (command & COMMAND_LEFT) {Serial.println("COMMAND LEFT");// 할 일을 여기에 추가 }if (command & COMMAND_RIGHT) {Serial.println("COMMAND RIGHT");// 할 일을 여기에 추가 }if (command & COMMAND_UP) {Serial.println("COMMAND UP");// 할 일을 여기에 추가 }if (command & COMMAND_DOWN) {Serial.println("COMMAND DOWN");// 할 일을 여기에 추가 }}
사용 방법
위의 코드를 복사하고 Arduino IDE로 열기
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하십시오
조이스틱의 썸을 왼쪽/오른쪽/위/아래 또는 어느 방향으로든 밀어 넣으십시오
시리얼 모니터에서 결과를 확인하십시오.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
※ 주의:
한 시점에는 명령이 없거나, 하나의 명령 또는 두 개의 명령(예: 동시에 UP과 LEFT)이 있을 수 있습니다.