본문으로 바로가기

아두이노 조이스틱 컨트롤

category 프로그래밍/아두이노 2020. 5. 13. 00:18

코드

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

 

 

실행 결과