본문 바로가기

카테고리 없음

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

반응형

 

아두이노 우노 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

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩