[Arduino] 아두이노 레오나르도 절대 좌표 이동 구현 (영상 포함)


이미지 출처 : https://www.reichelt.com/it/en/arduino-leonardo-atmega32u4-usb-ard-leonardo-woh-p230577.html?&trstct=vrt_pdn&nbc=1

 

아두이노 레오나르도를 이용한 절대 좌표 이동 테스트 입니다.

기본적으로 레오나르도에서 제공하는 Mouse.move() 함수의 경우 옮길 수 있는 양이 한번에 127 스탭만큼 옮길 수 있는 제한도 있고 기본적으로 절대 좌표가 아니라 현재 마우스 위치에서 x , y 좌표 만큼 +/- 옮길 수 밖에 없습니다.

 

아두이노를 이용해서 절대 좌표 이동을 구현하고 싶으면, 기본적으로 MouseTo 같은 라이브러리를 이용하거나, 현재 마우스 좌표 위치와 원하는 좌표 위치를 같이 보내서 처리하면 됩니다.

 

저는 2번째 방법인 현재 마우스 좌표 위치는 PC쪽에서 pyautogui로 계산해서 보내고, 원하는 좌표를 레오나르도에 시리얼 통신으로 제공하면 레오나르도에서 알아서 계산해서 그 좌표로 이동하는, 절대 좌표 기능을 구현했습니다. (당연하지만 127 스탭만큼 이동 할수 밖에 없는 제한도 제거했습니다, 사실 제거라기 보단 여러번 호출하는거긴 합니다만 ^^;;)

 

예를 들어서 현재 마우스 좌표가 (0, 0) 이고 원하는 절대 좌표 이동이 (100, 100) 이라면 아래처럼 전송해주면 레오나르도에서 알아서 좌표 이동 처리를 해줍니다.

 

command : MV2 0 0 100 100

 

사실 첫번째 방법인 MouseTo 라이브러리 사용도 괜찮긴 했는데, 일단 처음 시작할 때 홈(0,0) 을 먼저 찍고 가야해서 너무 비효율적이기도 했고 속도도 마음에 안들어서 직접 만들게 되었습니다.

 

<시연 영상>

 

보시면 알겠지만 딜레이를 0.1초로 해도 좌표가 전혀 틀어지지 않고 정확히 이동합니다. 그리고 코드 내부적으로 해당 좌표까지 이동할때까지 대기하는 안전장치 또한 존재해서 속도를 한계까지 올릴수도 있습니다. (근데 이거때문에 중간에 마우스를 사람이 잘못해서 움직이면 거기서 프로그램이 멈춰버립니다)

딜레이 없이 마우스를 옮기면 눈에 이동하는 흔적이 안보일 정도로 빨라서 아마 SW 매크로 속도에 버금가는 속도로 처리가 되지 않을까 싶습니다.

 

 

사실 개고생하면서 코드를 작성해서 코드를 공개할지 말지 고민이 좀 크긴한데.. 만약에 댓글에 원하시는 분들이 많다면 한번 공개를 고려해보겠습니다 ㅎㅎ;

COMMENT WRITE