2016-02-13 1 views
0

ont un nœud rouge fonctionnant avec une sortie analogique arduino via série vers pi, où je recueille des données de thermistance en tant que charge utile de msg en cas de changement.Javascript Maths Noeud Rouge Fonction de thermistance

Essayer de transformer le signal Arduino en une température - c'est la thermistance 10K émaillée la plus commune que l'adafruit vend. Donc code assez utile.

Le problème est que je suis un noob total chez JS.

Voici mon code à ce jour - à l'aide d'un nœud de fonction - et essayer de reproduire l'équation de Steinhart (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

Vous ne pouvez pas diviser un nombre ('1023') par un objet (' entrée'). Vous devez accéder à la propriété de l'objet contenant la valeur avec laquelle vous souhaitez effectuer le calcul. –

+0

que retourne le 'msg.payload'? est-ce un nombre? – user151496

+0

merci - c'est logique - oui c'est toujours un nombre. Valeur analogique de la broche de thermistance – mdk

Répondre

1

je ne suis pas sûr que la volonté msg.payload totaliseront retour dans un type de données réel « Number » qui signifie ou une chaîne qui sera un numérique, mais quelque chose comme cela devrait prendre soin de toutes les anomalies en essayant de diviser les chaînes

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; 

EDIT: cela devrait corriger les erreurs:

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

awesome thanks - Je suis allé à modifier la ligne 3 dans votre réponse à numImput mais wouldn; t laissez-moi changer Cela semble juste, merci. Lors de l'exécution je suis "non défini" - Je me demande si mon utilisation de * Mathlog() est autorisée, ou devrais-je entrer dans une autre var en amont – mdk

+0

où est-ce que vous obtenez indéfini? la variable 'T' était? Si vous n'avez pas de définition, cela signifie probablement que le fichier msg.payload ne contient rien ou contient plus qu'un numéro. votre plate-forme a-t-elle quelque chose comme un enregistreur? Peux-tu faire 'console.log (msg)' pour voir ce qu'il y a dedans? – user151496

+0

Gotcha - yeh ça marche en NR si difficile de faire des trucs sur le web comme le journal de la console AFAIK. Pensez que vous aviez raison - msg.payload simplifié en msg seulement. Fournit maintenant un blanc (rien). J'ai essayé ceci: var numInput = Nombre (msg); return msg; Et renvoie le nombre injecté Essayé var numInput = Nombre (msg); Renvoie numInput; Renvoie rien - Encore numInput = msg; Renvoie numInput; renvoie le numéro correctement dans la fenêtre de débogage. En utilisant le numInput var si, le code suivant ne retourne pas T – mdk