2015-10-26 56 views
0

我想我一直在代码中游泳太久。我是socket.io,node和express的新手。现在我在服务器端有一个电位器发出消息,而在客户端,我在javascript控制台(我正在使用Chrome)接收它们。我的目标是让电位器改变HTML页面上滑块的位置,这反过来会改变使用tone.js库的振荡器的频率。如何使用来自Socket.io的变量功能

我已经提出了200的上限,并打印任何东西。这里是服务器端的一个片段,我app.js

cylon.robot({ 
    connections: { 
     edison: { 
      adaptor: 'intel-iot' 
     } 
    }, 
    devices: { 
     button: { 
      driver: 'button', 
      pin: 2 
     }, 
     sensor: { 
      driver: 'analogSensor', 
      pin: 0, 
      upperLimit: 200, 
      lowerLimit: 0 
     } 
    } 
}).on('ready', cylonReady); 
cylon.start() 
// this will be called each time a socket is opened, so each client will receive their own events when buttons are pushed. 
var registerSocketHandlers = function (my, socket) { 
    my.button.on('push', function() { 
     socket.emit('button', 'push') 
    }) 
    my.button.on('release', function() { 
     socket.emit('button', 'release') 
    }) 
    my.sensor.on('upperLimit', function (val) { 
     //console.log("Upper limit reached ===> " + val); 
     socket.emit('analogSensor', val) 
    }); 
} 

我的客户端的一个片段,INDEX.HTML:

var potVal = 0; 
socket.on('analogSensor', function (analogVal) { 
    potVal = analogVal; 
    console.log('sensor value', potVal) 
}); 
new Interface.Slider({ 
    drag: function (value) { 
     frequency.rampTo(value, 0.1); 
    }, 
    start: function() { 
     Tone.Master.mute = false; 
    }, 
    end: function() { 
     Tone.Master.mute = true; 
    }, 
    name: "frequency", 
    min: 0, 
    max: 1, 
    exp: .5, 
    value: potVal/10, //original value is .5 
    position: 5 
}); 

我已经看到了问题和答案在网上。主要是那些没有决心的结局。我仍然尝试过它们,并试图在上面的代码中看到的客户端设置全局变量,并在滑块中换出了值。它要么导致滑块完全不显示,要么对其没有影响。欢迎任何建议。谢谢!

+0

如果你指定哪个变量,凡在你的代码有问题这将有助于,它在客户端还是服务器上?现在很难说出问题所在。我敢打赌,如果你再提示我们,你可以在这里得到帮助。 – 1cgonza

+0

我们已经构建了一个功能齐全的Node.js应用程序,[aktos-webui](https://github.com/ceremcem/aktos-website),特别适用于这类应用程序;所以我确信我可以帮忙。但正如@ 1cgonza所说,你应该能够说出确切的问题。你做了什么,你期望什么,你得到了什么? – ceremcem

+0

感谢您的回复。问题出在客户端。我正在寻找使用包含我的analogSensor值的potVal变量来更改滑块的位置。在上面的代码中,在客户端,我试过哪个是potVal/10。原始值是0.5。而不是能够控制滑块,滑块不显示。当我将滑块嵌套在socket.on函数中时,每当数值来自电位计时,它都会在网页上创建。 – LaraCat

回答

0

此问题与SocketIo本身无关。您应该更新滑块每当你得到的消息,如下面的代码所示:

var potVal = 0; // this is useless actually 

//socket.on('analogSensor', function (analogVal) { 
function dummy_socket_on_analogSensor (analogVal) { 
    potVal = analogVal; 
    console.log('sensor value', potVal); 
    $('#chance_slider').val(potVal); 
}; 

// when a value is got from socket.io, this will happen: 
var i = 0; 
function simulateSocketIoMessages() { 
    dummy_socket_on_analogSensor(i); 
    i += 5; 
    setTimeout(simulateSocketIoMessages, 1000); 
} 
simulateSocketIoMessages(); 

这里是工作的jsfiddle:http://jsfiddle.net/sRbHZ/74/