[ev3 dev] nodejs에서 스마트 블록의 단추를 누르는 상태를 확인하는 프로그램

개시하다


EV3에서 실행되는 Linux 환경 ev3 dev를 사용하여 개발합니다.이 글은 EV3에 ev3 dev를 설치해 SSH 연결이 가능한 상태라는 전제를 달았다.
환경을 구축하지 못한 분들은 여기 기사를 참고하세요.
Linux로 Mindstorm-EV3 제어하세요!ev3 dev OS 설치와 SSH 연결

만든 물건


JavaScript(nodejs)를 사용하여 ev3 dev 스마트블록 버튼을 누른 상태의 라이브러리를 가져옵니다.ev3 dev의 nodejs 라이브러리ev3-lang-js는 있지만 스마트 블록의 단추를 누르고 상태를 얻기 전에는 지원되지 않을 것 같습니다.
nodejs에서mindstrom-EV3를 제어하는 v3 dev-lang-js 입문

절차.


단추를 눌렀을 때 장치 파일/dev/input/by-path/platform-gpio-keys입니다.0-이벤트를 통과한 이진 데이터에 근거하여 판정할 수 있다.
모니터링 장치 파일을 만들고 상태 변화를 누르는 이벤트 함수를 확인합니다.
button.다음 프로그램을 js로 저장합니다.
button.js
const fs = require("fs");
const util = require('util');
const events = require('events');
const keysEventsFile = '/dev/input/by-path/platform-gpio-keys.0-event';

var readButton = function(){
    events.EventEmitter.call(this);
}

util.inherits(readButton, events.EventEmitter);

readButton.prototype.read = function(){
        var self = this;
        fs.open(keysEventsFile, "r", function(error, fd) {
                if (error) {
                        self.emit('error', error);
                        console.log(error);
                }
                var buffer = new Buffer(16);
                fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
                        var code = buffer.readUInt16LE(10);
                        var value = buffer.readUInt32LE(12);
                        self.emit('data', code, value);
                        self.read();
                });
        });
}


var reader = new readButton();

reader.on('data',function(code,value){
        console.log("code : " + code + "," + "value : " + value);
});

reader.read();

프로그램 실행


프로그램을 실행하고 스마트 블록 단추를 눌렀을 때 출력 단추 코드와 상태 (value)를 눌렀습니다.
$ nodejs button.js
code : 103,value : 0
code : 108,value : 0
code : 108,value : 1
code : 106,value : 0
code : 106,value : 1
code : 105,value : 0
code : 105,value : 1

코드의 숫자는 각각 위의 그림에 대응하는 단추입니다
UP = 103;
DOWN = 108;
LEFT = 105;
RIGHT = 106;
ENTER = 28;
ESCAPE = 14;
이벤트는 버튼을 누르고 떠나는 단추를 눌렀을 때 발생합니다.value의 값에 따라 상태를 판단할 수 있습니다.
0 = 누르면
1 = 떠날 때

프로그램 설명


이벤트 정의


장치 파일을 열고 바이트 열을 불러오고 int형으로 변환합니다.변수 코드 단추를 누르는 상태, 변수value를 누르는 상태를 저장하고 데이터 이벤트에 불을 붙입니다.함수에서 자신을 호출하여 연속 처리를 계속합니다.
readButton.prototype.read = function(){
        var self = this;
        fs.open(keysEventsFile, "r", function(error, fd) {
                if (error) {
                        self.emit('error', error);
                        console.log(error);
                }
                var buffer = new Buffer(16);
                fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
                        var code = buffer.readUInt16LE(10);
                        var value = buffer.readUInt32LE(12);
                        //dataイベントを定義
                        self.emit('data', code, value);
                        self.read();
                });
        });
}

이벤트 호출


데이터 이벤트를 호출하는 부분입니다.표준 출력 변수 코드,value.
var reader = new readButton();

reader.on('data',function(code,value){
        console.log("code : " + code + "," + "value : " + value);
});

reader.read();

총결산


다음은 스마트 블록 버튼이 압력 상태를 눌러 판단하는 프로그램의 미니 프로그램을 소개한다.
ev3dev를 사용하는 프로그래밍 범위가 더욱 확대될 것 같습니다.

좋은 웹페이지 즐겨찾기