2014-12-04 4 views
1

node.js 및 arduino를 사용하는 응용 프로그램에서 작업하고 있습니다.johnny-five 및 arduino로 입력 핀 읽기

나는 조니 개의 프레임 워크를 사용하고 핀 2, 3, 4, 5

이에 연결된 아케이드 컨트롤러가 내 아두 이노,에 StandardFirmata 스케치를 업로드 한 나의 구현 한 것입니다 : 내 아케이드 컨트롤러를 아래로 당기거나 위로가 여러 번 ..이 5 시간을 할 수있다 '아래'또는, 그것은 10 시간 일 수있다 '최대'로그온 할 때

var five = require('johnny-five'); 
var board 

board = new five.Board(); 

board.on('ready', function(){ 
    console.log('board is ready'); 
    this.pinMode(2, five.Pin.INPUT); 
    this.pinMode(3, five.Pin.INPUT); 
    this.pinMode(4, five.Pin.INPUT); 
    this.pinMode(5, five.Pin.INPUT); 

    this.digitalRead(2, function(value) { 
     if(value === 0) 
     { 
      console.log('up'); 
     } 
    }); 

    this.digitalRead(3, function(value) { 
     if(value === 0) { 
      console.log('right'); 
     } 
    }); 

    this.digitalRead(4, function(value) { 
     if(value === 0) { 
      console.log('left'); 
     } 
    }); 

    this.digitalRead(5, function(value) { 
     if(value === 0) { 
      console.log('down'); 
     } 
    }); 

}); 

이제 문제입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

3

그건 완전히 맞습니다. 값은 손보다 빠르게 읽므로 장치의 물리적 상태를 변경하기 전에 현재 상태 ("HIGH"또는 "LOW"여부)를 읽는 횟수가 많을 수 있습니다. 추가 문의 사항이있는 경우

var five = require("../lib/johnny-five"); 
var board = new five.Board(); 

board.on("ready", function(){ 
    var directions = { 
    up: { pin: 2, value: null }, 
    right: { pin: 3, value: null }, 
    left: { pin: 4, value: null }, 
    down: { pin: 5, value: null }, 
    }; 

    Object.keys(directions).forEach(function(key) { 
    var pin = directions[key].pin; 

    this.pinMode(pin, five.Pin.INPUT); 
    this.digitalRead(pin, function(data) { 
     // Catpure the initial pin value 
     if (directions[key].value === null) { 
     directions[key].value = data; 
     } 

     // Something changed 
     if (directions[key].value !== data) { 
     console.log(pin, key); 
     } 

     directions[key].value = data; 
    }); 
    }, this); 
}); 

에서, Johnny-Five Gitter Channel에서 우리와 함께 주저하지 말아 주시기 바랍니다 : 하나 개의 솔루션이 핸들러 진동을 소거하는 것입니다, 다른 하나는 마지막 값을 저장 만 현재 값이 다른 경우에 동작입니다 .

+0

답변 해 주셔서 감사합니다. 이것은 내 문제를 해결 :) – user3144608

+0

신난다, 내가 도울 수있는 기쁜 :) – Rick

3

johnny-five의 표준 범퍼 버튼 클래스를 사용할 수도 있습니다. 이미 구현 된 데모가 있습니다.

https://github.com/rwaldron/johnny-five/blob/master/docs/button-bumper.md

var five = require("johnny-five"), 
    bumper, led; 

five.Board().on("ready", function() {  
    bumper = new five.Button(7); 
    led = new five.Led(13); 

    bumper.on("hit", function() { 
    led.on();  
    }).on("release", function() {  
    led.off();  
    }); 
}); 

그것은 당신에게 당신의 코드의 리팩토링을 필요로하지만, 훨씬 청소기 후가 될 것입니다.