lunijs
Version:
Javascript client for Arduino LuniLib device drivers.
99 lines (76 loc) • 3.03 kB
JavaScript
// This module defines a johnny-five Controller object for use with the
// J-5 Thermometer Component and a DDMCP9808 temperature sensor device
// driver on an Arduino.
//
// This program is strict-mode throughout.
//
// Doug Johnson, April 2016
const log4js = require("log4js");
const path = require("path");
const thisModule = path.basename(module.filename,".js");
const log = log4js.getLogger(thisModule);
log.setLevel('DEBUG');
const API = require("../lib/MCP9808API");
const RDD = API.RDD;
const five = require("johnny-five");
const Sequencer = require("../lib/Sequencer").Sequencer;
/**
* Create a CTL_MCP9808 Controller object for use with a Thermometer Component.
*
* @param custom.unit Logical unit name and number. default "MCP9808:0"
* @param custom.flags flags for device open. default ForceOpen
* @param freq Update period in milliseconds. default : 250
* @param board the Board object to use. default five.Board.mount()
*/
let CTL_MCP9808 = {
initialize: {
value: function(opts, datahandler) {
let handle = 0;
let board = opts.board || five.Board.mount();
let unitName = opts.custom.unit || "MCP9808:0";
let openFlags = opts.custom.flags || 1;
let openOpts = opts.custom.opts || 0;
let freq = opts.freq || 250;
let proxyRDD = new RDD.RemoteDeviceDriver({board: board});
log.debug(`RemoteDeviceDriver is created.`);
let api = new API.MCP9808API({driver : proxyRDD});
log.debug(`MCP9808API is created.`);
let seq = new Sequencer(api,["open", "read", "write", "close", "read-continuous"],{});
log.debug(`Sequencer is created.`);
seq.on("error", (apiError) => {
log.error(`Error ${RDD.SC[apiError.status].sym} (${apiError.status}) ${RDD.SC[apiError.status].msg}.`);
});
seq.on("done", (apiResult) => {
log.debug(`Initialization steps completed.`);
});
api.on("read-continuous", (apiResult) => {
log.trace(`${unitName} says temp is ${apiResult.C}°C, ${apiResult.F}°F, ${apiResult.K}°K.`);
datahandler(apiResult.C);
});
let step = [
(apiResult) => {
log.debug(`Begin MCP9808 controller initialization processing.`);
api.open(unitName,RDD.DAF.FORCE,0);
},
(apiResult) => {
log.trace(`Opened ${apiResult.unitName} with handle ${apiResult.handle}.`);
handle = apiResult.handle;
api.setHighPower(handle);
},
(apiResult) => {
log.trace(`High power (continuous conversion) set.`);
api.setIntervals(handle,null,freq);
},
(apiResult) => {
log.trace(`Report interval has been set.`);
api.readContinuousTempC(handle);
},
(apiResult) => {
log.debug(`Continuous temperature reading started.`);
}
];
seq.start(step);
}
}
};
module.exports = {CTL_MCP9808};