???? - 3. 누를 것이 필요해! (내부풀업 사용)

 

보통은 스위치에 풀다운 저항을 붙여서 많이 사용하는데, 여기서는 귀차니즘에 굴복하라!는 일일과제 달성을 위하여 내부 풀업 저항을 이용한 방법을 확인해보겠습니다. 이 경우, 출력값이 버튼을 누르지 않았을 때 HIGH, 눌렀을 경우에 LOW로 들어오게 됩니다.

 

 

배선도

 

 

소스

void setup() {
  pinMode(4, INPUT_PULLUP);
}

void loop() {
  int buttonD4 = digitalRead(4);

  if (buttonD4 == LOW) {
    Serial.println("button pressed!");
  }
}

 

실행 결과

  • 위 소스를 테스트해보면 위에서 말한대로 입력이 들어오는 것을 확인할 수 있다.
  • 하지만 실사용의 경우에는 아래와 같이 previous 값 관리를 해야 버튼이 한번 눌릴 때 이벤트 처리가 여러번 되는 것을 방지할 수 있다.
void setup() {
  pinMode(4, INPUT_PULLUP);
}

int buttonD4Prev = HIGH;

void loop() {
  int buttonD4 = digitalRead(4);

  if (buttonD4Prev == HIGH && buttonD4 == LOW) {
    Serial.println("button pressed!");
  }
  buttonD4Prev = buttonD4;
}

 

,

???? - 2. 돌릴 것이 필요해! (포텐셔미터)

 

흔히 가변저항으로 알려진 포텐셔미터의 사용법을 확인해보겠습니다.

 

 

배선도

 

 

소스

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
}

 

실행 결과

  • 시리얼 모니터를 통해 결과를 확인해보면 포텐셔미터를 돌림에 따라 0 ~ 1023 사이의 값이 출력되는 것을 확인할 수 있다.

 

,

???? - 1. 아두이노를 활용한 조이스틱 제작방법 요약

 

다들 집안 냉장고에 요리하다 남은 아두이노(Arduino)가 하나씩들 있으실텐데요. 이 놀고있는 아두이노를 활용해 조이스틱(게임 컨트롤러)를 만들 수 있는 라이브러리 및 특징에 대해 조사한 내용을 요약 정리해보았습니다.

 

 

1. UnoJoy

  • 사이트1 : https://github.com/AlanChatham/UnoJoy (2019/3/27 버전)
  • 사이트2 : https://code.google.com/archive/p/unojoy/ (2013/2/21 버전)
  • 아두이노 우노, 메가, 레오나르도 지원
  • PS3-Compatible 기기 제작이 목적이므로 지원되는 컨트롤 종류 및 갯수가 PS3 패드에서 지원하는 기능에 한정된다. 스로틀, 러더 컨트롤 등은 미지원.
  • 프로그래밍을 한 후에 조이스틱 장치로 인식시키기 위해 펌웨어를 변경해주는 별도의 작업이 필요하다.(다시 되돌릴수도 있다)(Java 32비트 버전만 지원함에 유의)
  • 개발 과정에서 펌웨어를 변경하지 않고 조이스틱 기능을 테스트할 수 있는 툴이 제공된다.

 

2. Arduino Joystick Library

  • 사이트 : https://github.com/MHeironimus/ArduinoJoystickLibrary
  • 아두이노 레오나르도만 지원
  • 다음과 같은 컨트롤을 지원한다. 하나의 아두이노로 최대 세개의 조이스틱으로 인식시킬 수도 있다.
      
     - Buttons (default: 32)
     - Up to 2 Hat Switches
     - X, Y, and/or Z Axis (up to 16-bit precision)
     - X, Y, and/or Z Axis Rotation (up to 16-bit precision)
     - Rudder (up to 16-bit precision)
     - Throttle (up to 16-bit precision)
     - Accelerator (up to 16-bit precision)
     - Brake (up to 16-bit precision)
     - Steering (up to 16-bit precision)
    
  • 아두이노 레오나르도는 업로딩만으로 USB 입력장치로 인식시킬 수 있는 기능을 자체적으로 지원하므로 별도의 펌웨어 변경은 필요없다.

사양 상으로는 후자 쪽이 더 훌륭해 보이는 것이 사실이지만, 냉동실에서 고인얼음과 친구먹고 있는 아두이노라면 높은 확률로 우노일 가능성이 높겠죠.

 

그럼, 알아본 내용을 바탕으로 ‘뭔가’를 향한 여정을 계속해 보도록 하겠습니다.

 

I will be back..

To be continued..

,

wxPython에서 별도의 어플리케이션 아이콘을 지정하지 않으면 기본 아이콘으로 표시된다. 이를 원하는 아이콘으로 지정하는 방법에 대해 정리해보았다.

  1. 프레임 창 좌측 상단에 표시되는 아이콘은 다음의 방법으로 바꿀 수 있다. PNG 파일 외에 다른 타입의 이미지를 사용하려면 wx.BITMAP_TYPE_PNG를 해당하는 상수로 바꿔주면 된다. (예를 들어 아이콘 파일(.ICO)의 경우는 wx.BITMAP_TYPE_ICO)
    class MainWindow(wx.Frame):
        def __init__(self, parent, id, title):
    
            ...
    
            ICON_PATH = 'icon_image.png'
            self.SetIcon(wx.Icon(ICON_PATH, wx.BITMAP_TYPE_PNG))
    
    
  2. 태스크바의 아이콘까지 바꾸려면 아래의 작업을 추가로 해주어야 한다.
    import ctypes   # for taskbar icon
    
    ...
    
    class MainWindow(wx.Frame):
        def __init__(self, parent, id, title):
    
            ...
    
            my_app_id = r'mycompany.myproduct.subproduct.version'   # 임의의 스트링
            ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(my_app_id)
    
    


- OS : Windows 10
- Python 버전 : 3.6.5
- wxPython 버전 : 4.1.1
,

자바스크립트 탭 사이즈를 2 <-> 4로(스페이스 문자 사용) 토글시키는 함수 정의입니다.

(defun jstoggle ()
  "Toggle setting javascript tab widths between 2 and 4"
  (interactive)
  (if (= js-indent-level 4)
      (setq js-indent-level 2)
    (setq js-indent-level 4)
    )
  (message (number-to-string js-indent-level))
  (redraw-display))
  


보너스


자바스크립트 탭 사이즈와 Prettier-js의 탭 사이즈를 동시에 2 <-> 4로 토글시키는 함수 정의

(defun jstoggle ()
  "Toggle setting javascript tab widths between 2 and 4"
  (interactive)
  (if (= js-indent-level 4)
      (progn
        (setq js-indent-level 2)
        (setq prettier-js-args '(
                                 "--use-tabs" "false"
                                 "--tab-width" "2"
                                 )))
    (progn
      (setq js-indent-level 4)
      (setq prettier-js-args '(
                               "--use-tabs" "false"
                               "--tab-width" "4"
                               )))
    )
  (message (number-to-string js-indent-level))
  (redraw-display))
  
<테스트 환경> 
- OS : Windows 10 
- Emacs 버전 : Emacs 24.5.1 윈도우
,

자바스크립트 모드에서 기본적으로 들여쓰기시 탭 문자를 사용하도록 되어있습니다. 이것을 스페이스를 사용하도록 설정하는 방법입니다.

 

.emacs 파일에 아래와 같이 정의합니다.

(add-hook 'js-mode-hook
          (function (lambda ()
                      (setq indent-tabs-mode nil
                            ))))

(setq-default js-indent-level 4) ; 사용할 스페이스 갯수

혹은

(dolist (hook '(js2-mode-hook js-mode-hook json-mode-hook))
  (add-hook hook (function (lambda ()
                             (setq indent-tabs-mode nil
                                   )))))

(setq-default js-indent-level 4) ; 사용할 스페이스 갯수

 

<테스트 환경> 
OS : Windows 10
Emacs 버전 : Emacs 24.5 윈도우
,

문제점

 

웹 프론트엔드 빌드 중, 다음과 같은 에러가 날 때가 있다.

Module build failed: Error: Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (83)

 

원인 및 대책

 

yarn install 시에 현재 설치된 nodejs 버전에 맞게 node-sass를 설치하게 되는데, 그 이후 nodejs의 버전이 바뀌었을 경우에 발생함.

 

보통은 npm rebuild node-sass를 하면 해결됨. 그러나 해당 버전의 node-sass가 현재 버전의 nodejs를 지원하지 않아 에러가 발생하는 경우가 있는데, 이 경우 node-sass를 현재 버전의 nodejs를 지원하는 버전으로 높이거나 nodejs의 버전을 낮춰야 됨.

,

생성 커맨드

yarn create react-app my-app


성공 메세지


이후 사용법에 대한 가이드가 담겨져 있다.

Success! Created my-app at D:\test\my-app
Inside that directory, you can run several commands:

  yarn start
    Starts the development server.

  yarn build
    Bundles the app into static files for production.

  yarn test
    Starts the test runner.

  yarn eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd my-app
  yarn start

Happy hacking!

<테스트 환경>
- OS : Windows 10
- yarn create v1.17.3
- create-react-app@4.0.1
,