gpt4 book ai didi

javascript - 使用 johnny-five 和 arduino 读取输入引脚

转载 作者:行者123 更新时间:2023-11-30 08:01:23 27 4
gpt4 key购买 nike

我正在使用 node.js 和 arduino 开发一个应用程序。

我正在使用 johnny-5 框架并将 StandardFirmata 草图上传到我的 arduino,它在引脚 2、3、4 和 5 上连接了一个街机 Controller 。

这是我的实现:

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');
}
});

});

现在的问题是,当我向下或向上拉我的街机 Controller 时,它会多次记录“向上”或“向下”……可能是 5 次,也可能是 10 次。我做错了什么?

最佳答案

完全正确。这些值的读取速度比您的手移动速度快,因此在您更改设备的物理状态之前,可能会多次读取当前状态(无论是“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 .

关于javascript - 使用 johnny-five 和 arduino 读取输入引脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com