아두이노 PS2 조이스틱 스위치 실습
조이스틱이라는 단어를 들으면 가장 먼저 떠오르는 것은 게임 컨트롤러입니다. 여기서 사용하는 조이스틱 스위치는 게임용으로 사용하는 동일한 스위치이며 기타 다른 전자제품에도 사용됩니다. 실제 구조는 매우 단순하며 X축과 Y축으로 2개의 10K 가변저항으로 구성되어 있습니다. 스위치를 상하좌우로 움직이면 X축과 Y축의 출력되는 저항값이 달라지면 이를 전위차로 변환된 아날로그 값을 읽으면 조이스틱 스위치의 위치를 알수 있습니다.
조이스틱 스위치 모듈은 5V 전원을 사용하며 스위치를 움직이지 않은 상태로 스위치가 정 가운데에 위치해 있을 경우 X축와 Y축의 측정 전압은 약 2.5V가 됩니다. 화살표 방향으로 밀면 전압이 증가하며 최대는 5V가 됩니다. 화살표 반대0 방향으로 밀면 측정 전압은 감소하며 최소값은 0V가 됩니다.
조이스틱 스위치 모듈에는 1개의 버튼 스위치 기능이 있으며 위에서 아래는 누르면 동작합니다.
소스코드
아래는 소스코드입니다. 아두이노 IDE에 붙여넣기 하여 컴파일하고 업로드합니다.
#define joyX A0 #define joyY A1 int SW_pin = 2; int swState = 0; int swState1 = 0; void setup() { pinMode(7,OUTPUT); pinMode(SW_pin,INPUT); digitalWrite(SW_pin, HIGH); Serial.begin(9600); } void loop() { int xValue = analogRead(joyX); int yValue = analogRead(joyY); Serial.print("X-axis: "); Serial.print(xValue); Serial.print("\t"); Serial.print("Y-axis: "); Serial.println(yValue); swState = digitalRead(SW_pin); Serial.println(swState); if (xValue>=1000) digitalWrite(10, HIGH); else digitalWrite(10, LOW); if (xValue<25) digitalWrite(11, HIGH); else digitalWrite(11, LOW); if (yValue>=1000) digitalWrite(9, HIGH); else digitalWrite(9, LOW); if (yValue<25) digitalWrite(8, HIGH); else digitalWrite(8, LOW); if (swState == LOW) { Serial.println("Switch = High"); digitalWrite(7, HIGH); } else digitalWrite(7, LOW); swState1 = digitalRead(7); Serial.println(swState1); delay(50); }
Topic: