2016-02-13 46 views
0

有节点红色运行与arduino模拟输出通过串行到pi,我收集热敏电阻数据作为一个味精有效载荷的变化。Javascript数学节点红色热敏电阻功能

试图将Arduino信号转化为温度 - 这是adafruit销售的最常见的10K搪瓷热敏电阻。非常有用的代码。

问题是我是JS的总noob。

这里是我到目前为止的代码 - 使用功能节点 - 并试图复制斯坦哈特方程式(https://learn.adafruit.com/thermistor/using-a-thermistor

var input = { payload: msg.payload }; 
var R0 = 10000; 
var R = R0/((1023/input)-1); 
var T0 = 273 + 25; 
var B = 3950; 
var T = 1/((1/T0) + (1/B) * Math.log(R/R0)); 
return T; 
+1

你不能用一个对象('input')分隔数字('1023')。您需要访问包含要执行计算的值的对象的属性。 –

+0

'msg.payload'返回什么?这是一个数字吗? – user151496

+0

谢谢 - 这很有道理 - 是的,它总是一个数字。模拟值从热敏电阻引脚 – mdk

回答

1

我不知道会msg.payload是否会在实际的数据类型“号码”,意思是返回数或者一个字符串,这将是一个数字,但这样的事情企图分裂串

var numInput = Number(msg.payload); 
var R0 = 10000; 
var R = R0/((1023/input)-1); 
var T0 = 273 + 25; 
var B = 3950; 
var T = 1/((1/T0) + (1/B) * Math.log(R/R0)); 
return T; 

编辑时应该采取的任何异常的护理:这应该修复错误:

var numInput = Number(msg.payload); 
var R0 = 10000; 
var R = R0/((1023/numInput)-1); 
var T0 = 273 + 25; 
var B = 3950; 
var T = 1/((1/T0) + (1/B) * Math.log(R/R0)); 
msg.payload = T; 
return msg; 
+0

真棒谢谢 - 我去编辑第3行在您的答案numImput,但wouldn;吨让我改变 这看起来不错,谢谢。 运行时,我得到“未定义” - 我想知道是否允许使用* Mathlog(),或者我应该闯入另一个变量上游 – mdk

+0

你在哪里得到未定义?变量'T'是?如果你在那里没有定义,那可能意味着msg.payload没有任何内容,或者有更多的东西在其中。你的平台是否有类似记录器的东西?你可以做'console.log(msg)'看看它里面究竟有什么? – user151496

+0

Gotcha - 是的,它运行在NR很难做像控制台日志AFAIK网络般的东西。认为你是对的 - 仅msg.payload简化为味精。 现在提供一个空白(没有)。 我试过这个: var numInput = Number(msg); return msg; 并返回注入的号码 尝试过 var numInput = Number(msg); return numInput; 什么也没有返回 - Yet var numInput = msg; return numInput; 在调试窗口中正确返回编号。 尽管使用numInput变量,但后续代码不返回T – mdk