코드
int JoyStick_X = A1; //x
int JoyStick_Y = A2; //y
int JoyStick_Z = 3; //key
void setup() {
Serial.begin(9600);
pinMode(JoyStick_Z, INPUT);
}
void loop() {
int x,y,z;
x=analogRead(JoyStick_X);
y=analogRead(JoyStick_Y);
z=digitalRead(JoyStick_Z);
JoyStick(x, y) ;
Serial.println(z, DEC);
delay(500);
}
int JoyStick(int x, int y) {
/* 7 8 9
* 4 5 6
* 1 2 3
*/
int x_ = map(x, 0, 990, 0, 6);
int y_= map(y, 0, 990, 0, 6);
Serial.println((String) x + ", " + y + " -> "+ x_ + ", " + y_);
if(x_ == 3 && y_ == 3) { // 5
Serial.println("o");
} else if(x_ == 3 && y_ < 3) { // 8
Serial.println("↑");
} else if(x_ == 3 && y_ > 3) { // 2
Serial.println("↓");
} else if(x_ < 3 && y_ == 3) { // 4
Serial.println("←");
} else if(x_ > 3 && y_ == 3) { // 6
Serial.println("→");
} else if(x_ < 3 && y_ < 3) { // 7
Serial.println("↖");
} else if(x_ > 3 && y_ < 3) { // 9
Serial.println("↗");
} else if(x_ < 3 && y_ > 3) { // 1
Serial.println("↙");
} else if(x_ > 3 && y_ > 3) { // 3
Serial.println("↘");
}
}
* x축과 y축을 각 7조각으로 나눠 3/1/3으로 하였다.
* 값 범위가 0~1023이지만, 중립일 때 정확히 512가 아니고(500쯤 나온다), map 함수는 소숫점을 내림으로 계산하기 때문에 map 함수의 in_max값을 990으로 설정하였다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
0 | ↖ | ↑ | ↗ | ||||
1 | |||||||
2 | |||||||
3 | ← | 0 | → | ||||
4 | ↙ | ↓ | ↘ | ||||
5 | |||||||
6 |
실행 결과
'프로그래밍 > 아두이노' 카테고리의 다른 글
WeMos ESP32 WiFi&Bluetooth Battery 호환보드 (0) | 2020.07.10 |
---|---|
Arduino Nano 업로드 시 에러 해결, 부트로더 업데이트 방법 (0) | 2020.06.08 |
아두이노로 ESP-01(ESP8266-01) WiFi 모듈 펌웨어 업그레이드 (0) | 2020.05.21 |
아두이노 EEPROM에 구조체 저장 (0) | 2020.05.11 |
아두이노 AT-09 블루투스 모듈 통신 (0) | 2020.05.01 |