본문 바로가기

프로그래밍/아두이노[Arduino]&라즈베리파이[Raspberry Pi]

[아두이노] 조이스틱[joystick] 모듈을 사용하여 LED제어하기



[아두이노]

조이스틱[JoyStick] 모듈을 사용하여 LED 제어

 


 

 

안녕하세요 이번에는 조이스틱모듈(Joystick module)을 이용하여 LED을 제어하는 방법에 대해서 알아보겠습니다.

간단소개

 

 

 

1. 조이스틱 모듈을 조작하지 않을 경우에는 항상 2번 LED점등상태

2. 조이스틱 모듈의 움직임에 따라서 1번~6번 LED 점등상태

3. 조이스틱 모듈의z축(스위치)을 누를때는모든 LED 점등

 

 

 

 

핵심부품

 

실제와 그림이 다소 다르기 때문에 표기를 참고해서 연결해주세요!

 

VCC: 5V 연결

GND: Ground

VRX: X축

VRY: Y축

SW:  z축(스위치버튼)으로 0 혹은 1 값만 전달.

 

 

 

조이스틱모듈의 해당 좌표 값입니다.

(미세하게 변하기 때문에 편의상 1023의 반의 값으로 표시하였습니다.)

 

 

 

 

 

부품목록

 

 

 

브레드보드

 

 

 

 

회로도

 

 

 

 

소스코드

 

int LED[6]; //LED 포트 배열로 선언
int joystick_x = A0; //조이스틱 x축
int joystick_y = A1; //조이스틱 y축
int joystick_z = 10; //조이스틱 z축
 
void setup() {
   for(int i=0; i<6; i++){
      LED[i] = i+2;
      pinMode(LED[i], OUTPUT);// 디지털 i번 포트를 LED OUTPUT 으로 설정
   }   
   pinMode(joystick_z, INPUT);   
   digitalWrite(joystick_z, HIGH); //SW값 HIGH로 초기값 설정.
   Serial.begin(9600);
}
 
void loop() {
  int x = analogRead(joystick_x);    // 조이스틱 X축의 아날로그 신호를 x에 저장
  delay(100);
  int y = analogRead(joystick_y);    // 조이스틱 Y축의 아날로그 신호를 y에 저장 
 
  if(x<=340 && y<=510){
      led_all(LOW);
      digitalWrite(LED[0], HIGH);  //1번째 LED ON
  }else if(x>340 && x<=680 && y<=510){
      led_all(LOW);
      digitalWrite(LED[1], HIGH);  //2번째 LED ON
  }else if(x>680 && y<=510){
      led_all(LOW);
      digitalWrite(LED[2], HIGH);  //3번째 LED ON
  }else if(x<=340 && y>510){
      led_all(LOW);
      digitalWrite(LED[3], HIGH);  //4번째 LED ON
  }else if(x>340 && x<=680 && y>510){
      led_all(LOW);
      digitalWrite(LED[4], HIGH);  //5번째 LED ON
  }else if(x>680 && y>510){
      led_all(LOW);
      digitalWrite(LED[5], HIGH);  //6번째 LED ON
  }
 
  // 조이스틱 누를시 LED 전체 ON
  if(digitalRead(joystick_z) == 0){
      led_all(HIGH);
  }
  //조이스틱 모듈 값 표시
  Serial.print("X:");
  Serial.println(x);
  Serial.print("Y:");
  Serial.println(y);
  Serial.print("Z:");
  Serial.println(digitalRead(joystick_z));
  
}
 
//HIGH, LOW 값을 받아서 LED를 전체 제어
void led_all(boolean data){
   // data = HIGH => LED All ON
   // data = LOW => LED All OFF
   for(int i=0; i<6; i++){
      digitalWrite(LED[i], data);   
   }
}

 

*참고

 

 

스코드의 if문을 보시면 옆의 그림을 참고하여 조건을 부여 하였습니다.

1023의 값을 갯수에 따라서 나누고 근사값을 넣었습니다.

 

 

 

 

 

구현영상

 

 

[아두이노] 조이스틱[joystick] 모듈을 사용하여 LED제어하기

이상입니다 감사합니다.