아두이노우노 R4

아두이노 우노 R4 HID 장애인 키보드 구현

지구빵집 2024. 2. 29. 07:57
반응형

 

새로 출시한 아두이노 우도 R4는 펌웨어 코드로 컴퓨터의 키보드와아 마우스 제어를 훔치게 할 수가 있다. 그러니까 사용자는 평상시 처럼 키보드와 마우스를 사용하고 중간에 제어를 통해 키입력이나 마우스를 움직여 클릭하는 기능을 구현 할 수 있다.

 

아래는 그 기능을 구현한 이미지와 코드이다.

 

각 버튼 기능은 아래와 같이 정의한다.

 

파랑 검정 노랑 빨강
복사
Ctrl-c
붙여넣기
Ctrl-v
크롬에서 이미지를 다른 이름으로 저장 기능 잘라내기
Ctrl-x
모두선택
Ctrl-A

 

마우스를 움직여 드래그 하고 버튼을 누르면 잘 동작한다.

 

크롬에서 이미지 위에서 노랑 버튼을  누르면 순식간에 저장 된다. 그냥 크롬 전용으로 사용하게 끔 만들까? 흠~

 

 

해자성자 선배를 대동천에서 만났다. 다음주 금요일 따님이 화성 근처에 살고 쿠팡 로켓 배송을 염두에 두고 이사를 가신다고 한다. 자초지종을 설명하니 선배가 조언을 하신다.

 

"모든 척수 손상 환자가 나와 같지는 않다. 모두 상황이 다르고 정도가 다르다. 충분히 알아야 한다."

 

"너에게 도움이 된다면 내가 도와 줄게. 이 녀석아!"

 

일단 전진이다. 우리가 인생을 살아보기 전까지는 정말 아무것도 모른다. 그렇다고 범죄를 저지르거나 남들에게 피해를 주거나 이상한 약물에 중독되는 것을 하라는 것은 절대 아니다. 어떤 일에서건 극단은 항상 좋지 않은 결과를 가져온다. 

 

보완할 것: 지우기 키, 전체선택 키, 실행 키가 없다. 다 추가하지 않도록 조심해라. 

 

인터페이스 고려 사항

 

- 바로미터를 이용해 바람으로 명령 입력

- 발로도 입력 가능한지?

- 이런 장비를 가지고 일하는 것은 무엇이 있는지

- 무슨 일을 어떻게 만들 수 있는지?

- 네이버 카페 '척수야! 사랑해'

- 마라톤 온라인 사진 회원가입하면 공짜로 보내준다. 정보 입력하고면 사진을 찾아 인공지능이 편집한다. 무료!

 

 

현재까지 구현한 소스코드

 

#include "Keyboard.h"
#include "Mouse.h"

// set pin numbers for the five buttons:

const int startlow = 8;

const int blue = 6;
const int black = 5;
const int yellow = 4;
const int white = 3;
const int red = 2;

void setup() {  // initialize the buttons' inputs:

  pinMode(startlow, INPUT_PULLUP); //when num 8pin goes Low, Start!

  pinMode(blue, INPUT);
  pinMode(black, INPUT);
  pinMode(yellow, INPUT);
  pinMode(white, INPUT);
  pinMode(red, INPUT); // mouse drag

  Serial.begin(9600);
  
  // initialize mouse control:
  Mouse.begin();
  Keyboard.begin();

  while (digitalRead(startlow) == HIGH) {  // 2번 핀 LOW 입력받을때 시작 High 면 정지상태 유지
    delay(100);
  }
}

void loop() {
  
  while (digitalRead(startlow) == HIGH) {  // 2번 핀 점퍼 제거 시 중단 기능, 반드시 추가
    delay(100);
  }

  // use the pushbuttons to control the keyboard:
  if (digitalRead(blue) == HIGH) {
    Keyboard.press(KEY_LEFT_CTRL);  //ctrl
    Keyboard.press('c');            //c
    delay(100);
    Keyboard.releaseAll();
    delay(500);
    
  }
  if (digitalRead(black) == HIGH) {
    Keyboard.press(KEY_LEFT_CTRL);  //ctrl
    Keyboard.press('v');            //c
    delay(100);
    Keyboard.releaseAll();
    delay(500);
  }
  if (digitalRead(yellow) == HIGH) {
    Mouse.press(MOUSE_RIGHT);
    delay(100);
    Mouse.release(MOUSE_RIGHT);
    Keyboard.press('v');
    Keyboard.releaseAll();          //c
    delay(500);
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();
  }
  if (digitalRead(white) == HIGH) {
    Keyboard.press(KEY_LEFT_CTRL);  //ctrl
    Keyboard.press('x');            //c
    delay(100);
    Keyboard.releaseAll();
    delay(500);
  }
  if (digitalRead(red) == HIGH) {
    Keyboard.press(KEY_LEFT_CTRL);  //모두선택
    Keyboard.press('a');            //
    delay(100);
    Keyboard.releaseAll();
    delay(500);

    Keyboard.press(KEY_LEFT_CTRL);  //복사
    Keyboard.press('c');            //
    delay(100);
    Keyboard.releaseAll();
    delay(100);
  }
}

 

개발 노트 2장

 

 

 

 

반응형