카테고리 없음

아두이노 우노 R4 HID 마우스 제어

지구빵집 2024. 3. 18. 08:06
반응형

 

아두이노 우노 R4 HID 키보드 제어  

 

왔다 갔다 할 시간이 없어서, 지루할 틈이 없다. 이렇게 열심히 공부하고, 나누고, 무제한 주는 일을 또 언제 다시 해볼 수 있을까란 생각이 들었다.

 

돌아다닐 것 없이 그냥 여기에 마우스 API, 예제 프로그램 전부 다 싣는다. 여기만 보자. 딴 데 가지 말고... 

 

마우스 [USB] 설명

 

마우스 기능을 사용하면 32u4 또는 SAMD 마이크로 기반 보드에서 마이크로의 기본 USB 포트를 통해 연결된 컴퓨터에서 커서 이동을 제어할 수 있습니다. 커서 위치를 업데이트할 때는 항상 커서의 이전 위치를 기준으로 합니다.

 

참고 및 경고

 

이러한 핵심 라이브러리를 사용하면 32u4 및 SAMD 기반 보드(레오나르도, 에스플로라, 제로, 듀, MKR 제품군)가 연결된 컴퓨터에 기본 마우스 및/또는 키보드로 표시될 수 있습니다.

 

마우스 및 키보드 라이브러리 사용 시 주의할 점: 마우스 또는 키보드 라이브러리가 계속 실행 중이면 보드를 프로그래밍하기 어려울 수 있습니다. Mouse.move() 및 Keyboard.print()와 같은 함수는 커서를 이동하거나 키 입력을 연결된 컴퓨터로 전송하므로 이를 처리할 준비가 되었을 때만 호출해야 합니다. 이 기능을 켜려면 물리적 스위치와 같은 제어 시스템을 사용하거나 제어할 수 있는 특정 입력에만 응답하는 것이 좋습니다. 이를 처리하는 몇 가지 방법은 마우스 및 키보드 예제를 참조하세요.

 

마우스 또는 키보드 라이브러리를 사용할 때는 Serial.print()를 사용하여 출력을 먼 저 테스트하는 것이 가장 좋습니다. 이렇게 하면 어떤 값이 보고되고 있는지 확인할 수 있습니다.

 

함수 - 아래 테이블에 아주 깔끔하게 정리했다. 

 

Mouse.begin()

Mouse.click()

Mouse.end()

Mouse.move()

Mouse.press()

Mouse.release()

Mouse.isPressed()

 

끽 해봤자 7개다. 이거 그냥 표로 정리한다. 함수 설명은 이렇게 5가지면 충분하다. 바로 설명, 구문(문법), 매개변수, 리턴값, 예제 코드까지 5가지다. 꼭 기억해라

 

Mouse.begin()

설명: 컴퓨터에 연결된 마우스 에뮬레이션을 시작합니다. 컴퓨터를 제어하기 전에 시작()을 호출해야 합니다. 제어를 종료하려면 Mouse.end()를 사용합니다.
구문: Mouse.begin()
매개변수: None
리턴값: 없음

예제 코드

#include <Mouse.h>

void setup() {
  pinMode(2, INPUT);
}

void loop() {
  //버튼을 누르면 마우스 라이브러리를 시작합니다.
  if (digitalRead(2) == HIGH) {
    Mouse.begin();
  }
}
Mouse.click()

설명: 커서 위치의 컴퓨터에 순간 클릭을 전송합니다. 이는 마우스 버튼을 눌렀다가 즉시 놓는 것과 동일합니다.

Mouse.click()의 기본값은 마우스 왼쪽 버튼입니다.

구문
Mouse.click()
Mouse.click(button)

매개변수
button: 누를 마우스 버튼. 허용되는 데이터 유형: 문자.

MOUSE_LEFT(기본값)
MOUSE_RIGHT
MOUSE_MIDDLE

반환값: 없음

예제 코드
#include <Mouse.h>

void setup() {
  pinMode(2, INPUT);
  //마우스 라이브러리를 시작합니다.
  Mouse.begin();
}

void loop() {
  //버튼이 눌리면 마우스 왼쪽 클릭을 전송합니다.
  if (digitalRead(2) == HIGH) {
    Mouse.click();
  }
}

참고 및 경고
Mouse.click() 명령을 사용하면 아두이노가 마우스를 대신합니다! 명령을 사용하기 전에 마우스를 제어할 수 있는지 확인하세요. 마우스 제어 상태를 전환하는 푸시 버튼이 효과적입니다.
Mouse.end()

설명:  컴퓨터에 연결된 마우스 에뮬레이션을 중지합니다. 제어를 시작하려면 Mouse.start()를 사용합니다.

구문: Mouse.end()

매개변수: None

리턴: 아무것도

예제 코드
#include <Mouse.h>

void setup() {
  pinMode(2, INPUT);
  //마우스 라이브러리를 시작합니다
  Mouse.begin();
}

void loop() {
  //버튼이 눌리면 마우스 왼쪽 클릭을 보내고
  //그런 다음 마우스 에뮬레이션을 종료합니다.
  if (digitalRead(2) == HIGH) {
    Mouse.click();
    Mouse.end();
  }
}
Mouse.move()

설명: 연결된 컴퓨터에서 커서를 이동합니다. 화면의 움직임은 항상 커서의 현재 위치를 기준으로 합니다. Mouse.move()를 사용하기 전에 Mouse.begin()을 호출해야 합니다.

구문: Mouse.move(xVal, yVal, wheel)

매개변수
xVal: x축을 따라 이동할 양입니다. 허용되는 데이터 유형: 부호화된 문자.
yVal: y축을 따라 이동할 양입니다. 허용되는 데이터 유형: 부호화된 문자.
휠: 스크롤 휠을 이동할 양입니다. 허용되는 데이터 유형: 부호화된 문자.

반환값: 아무것도

예제 코드
#include <Mouse.h>

const int xAxis = A1; //X축용 아날로그 센서
const int yAxis = A2; // Y축용 아날로그 센서

int range = 12; // X 또는 Y 움직임의 출력 범위
int responseDelay = 2; // 마우스의 응답 지연, ms 단위
int threshold = range / 4; // 휴식 임계값
int center = range / 2; // 휴식 위치 값
int minima[] = {1023, 1023}; // {x, y}에 대한 실제 아날로그 읽기 최소값
int maxima[] = {0, 0}; // {x, y}에 대한 실제 아날로그 읽기 최대값
int axis[] = {xAxis, yAxis}; // {x, y}에 대한 핀 번호
int mouseReading[2]; // {x, y}에 대한 최종 마우스 판독값


void setup() {
  Mouse.begin();
}

void loop() {
  // 두 축을 읽고 크기를 조정합니다:
  int xReading = readAxis(0);
  int yReading = readAxis(1);

  // 마우스를 움직입니다:
  Mouse.move(xReading, yReading, 0);
  delay(responseDelay);
}

/*
  축을 읽고 (x 또는 y의 경우 0 또는 1) 아날로그 입력 범위를
  아날로그 입력 범위를 0에서 <범위>까지로 스케일링합니다.
*/

int readAxis(int axisNumber) {
  int distance = 0; // 출력 범위의 중심으로부터의 거리

  // 아날로그 입력을 읽습니다:
  int reading = analogRead(axis[axisNumber]);

  // 현재 판독값이 이 축의 최대값 또는 최소값을 초과합니다,
  // 최대값 또는 최소값을 재설정합니다:
  if (reading < minima[axisNumber]) {
    minima[axisNumber] = reading;
  }
  if (reading > maxima[axisNumber]) {
    maxima[axisNumber] = reading;
  }

  // 아날로그 입력 범위의 판독값을 출력 범위로 매핑합니다:
  reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range);

  // 출력 판독값이
  // 휴식 위치 임계값을 벗어나면 사용합니다:
  if (abs(reading - center) > threshold) {
    distance = (reading - center);
  }

  // 움직임을 올바르게 매핑하려면 Y축을 반전시켜야 합니다.
  // 움직임을 올바르게 매핑하려면 Y축이 반전되어야 합니다:
  if (axisNumber == 1) {
    distance = -distance;
  }

  // 이 축의 거리를 반환합니다:
  return distance;
}

참고 및 경고
Mouse.move() 명령을 사용하면 아두이노가 마우스를 대신합니다! 명령을 사용하기 전에 마우스를 제어할 수 있는지 확인하세요. 마우스 제어 상태를 전환하는 푸시 버튼이 효과적입니다.
Mouse.press()

설명: 버튼을 누르는 동작을 연결된 컴퓨터로 전송합니다. 누름은 마우스 버튼을 클릭하고 계속 누르고 있는 것과 같습니다. 누름은 Mouse.release()로 취소됩니다.

Mouse.press()를 사용하기 전에 Mouse.begin()으로 통신을 시작해야 합니다.

Mouse.press()의 기본값은 왼쪽 버튼 누르기입니다.

구문
Mouse.press()
Mouse.press(button)

매개변수
button: 누를 마우스 버튼. 허용되는 데이터 유형: 문자.

MOUSE_LEFT(기본값)

MOUSE_RIGHT

MOUSE_MIDDLE

반환값
아무것도

예제 코드
#include <Mouse.h>

void setup() {
  //마우스 누름을 시작할 스위치
  pinMode(2, INPUT);
  //마우스 누름을 종료할 스위치
  pinMode(3, INPUT);
  //마우스 라이브러리를 시작합니다
  Mouse.begin();
}

void loop() {
  //핀 2에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼을 길게 누릅니다.
  if (digitalRead(2) == HIGH) {
    Mouse.press();
  }
  //핀 3에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼을 놓습니다.
  if (digitalRead(3) == HIGH) {
    Mouse.release();
  }
}

참고 및 경고
Mouse.press() 명령을 사용하면 아두이노가 마우스를 대신합니다! 명령을 사용하기 전에 마우스를 제어할 수 있는지 확인하세요. 마우스 제어 상태를 전환하는 푸시 버튼이 효과적입니다.
Mouse.release()

설명: 이전에 눌렀던 버튼(Mouse.press()를 통해 호출)이 해제되었다는 메시지를 전송합니다. Mouse.release()의 기본값은 왼쪽 버튼입니다.

구문
Mouse.release()
Mouse.release(button)

매개변수: button: 누를 마우스 버튼. 허용되는 데이터 유형: 문자.

MOUSE_LEFT(기본값)
MOUSE_RIGHT
MOUSE_MIDDLE

반환값: 아무것도

예제 코드
#include <Mouse.h>

void setup() {
  //마우스 누름을 시작할 스위치
  pinMode(2, INPUT);
  //마우스 누름을 종료할 스위치
  pinMode(3, INPUT);
  //마우스 라이브러리를 시작합니다
  Mouse.begin();
}

void loop() {
  //핀 2에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼을 길게 누릅니다.
  if (digitalRead(2) == HIGH) {
    Mouse.press();
  }
  //핀 3에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼을 놓습니다.
  if (digitalRead(3) == HIGH) {
    Mouse.release();
  }
}

참고 및 경고
Mouse.release() 명령을 사용하면 아두이노가 마우스를 대신합니다! 명령을 사용하기 전에 마우스를 제어할 수 있는지 확인하세요. 마우스 제어 상태를 전환하는 푸시 버튼이 효과적입니다.
Mouse.isPressed() 설명: 모든 마우스 버튼의 현재 상태를 확인하고 눌린 버튼이 있는지 여부를 보고합니다.

구문
Mouse.isPressed();
Mouse.isPressed(button);

매개변수
전달된 값이 없으면 마우스 왼쪽 버튼의 상태를 확인합니다.

button: 검사할 마우스 버튼. 허용되는 데이터 유형: 문자.

MOUSE_LEFT(기본값)
MOUSE_RIGHT
MOUSE_MIDDLE

리턴
버튼이 눌렸는지 여부를 리턴합니다. 데이터 유형: 부울.

예제 코드
#include <Mouse.h>

void setup() {
  //마우스 누름을 시작할 스위치
  pinMode(2, INPUT);
  //마우스 누름을 종료할 스위치
  pinMode(3, INPUT);
  //컴퓨터와 시리얼 통신을 시작합니다.
  Serial.begin(9600);
  //마우스 라이브러리를 시작합니다
  Mouse.begin();
}

void loop() {
  //버튼의 상태를 확인하기 위한 변수
  int mouseState = 0;
  //핀 2에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼을 길게 누르고 상태를 변수에 저장합니다.
  if (digitalRead(2) == HIGH) {
    Mouse.press();
    mouseState = Mouse.isPressed();
  }
  //핀 3에 연결된 스위치가 닫혀 있으면 마우스 왼쪽 버튼에서 손을 떼고 상태를 변수에 저장합니다.
  if (digitalRead(3) == HIGH) {
    Mouse.release();
    mouseState = Mouse.isPressed();
  }
  //현재 마우스 버튼 상태를 출력합니다.
  Serial.println(mouseState);
  delay(10);
}

 

참조

 

예제 키보드 앤 마우스 컨트롤: 하나의 프로그램에서 마우스와 키보드 명령을 보여줍니다.

예제 ButtonMouseControl: 5개의 푸시 버튼으로 커서 이동을 제어합니다.

예제 조이스틱 마우스 컨트롤: 버튼을 눌렀을 때 조이스틱으로 컴퓨터의 커서 이동을 제어합니다. 

 

 

이미지 엘레파츠 유튜브&nbsp;https://www.youtube.com/watch?v=h9O1rt810E8

 

 

반응형