56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
var events = require('events'),
|
|
child = require('child_process'),
|
|
util = require('util'),
|
|
serial = require("serialport");
|
|
|
|
var Arduino = function (baudrate) {
|
|
this.baudrate = baudrate && baudrate || 9600;
|
|
this.writeBuffer = [];
|
|
this.success;
|
|
}
|
|
|
|
Arduino.prototype.setup = function () {
|
|
var self = this;
|
|
child.exec('cd ../arduino && ino build && ino upload', function(err, stdout, stderr){
|
|
|
|
if(err){console.log('Please install the ino utility and connect arduino!\nIf there are other open programs that communicate with the arduino, close them!'); return self.success = false;}
|
|
|
|
var buff = stdout.slice(stdout.indexOf('Guessing serial port ... ')+25);
|
|
buff = buff.slice(0, buff.indexOf('\n'));
|
|
console.log('Guessing serial port ... ' + buff);
|
|
|
|
self.serial = new serial.SerialPort(buff, {
|
|
baudrate: self.baudrate,
|
|
parser: serial.parsers.readline('\n')
|
|
}, false);
|
|
|
|
self.serial.open(function (error) {
|
|
if ( error ) {
|
|
console.log('Please check arduino!')
|
|
return self.success = false;
|
|
}
|
|
|
|
self.serial.write(new Buffer('00000000'));
|
|
});
|
|
|
|
self.success = true;
|
|
self.processWriteBuffer();
|
|
});
|
|
}
|
|
|
|
Arduino.prototype.write = function (m) {
|
|
if (this.serial) {
|
|
this.serial.write(m);
|
|
} else {
|
|
this.writeBuffer.push(m);
|
|
console.log('Board isn\'t available (yet?).')
|
|
}
|
|
}
|
|
|
|
Arduino.prototype.processWriteBuffer = function () {
|
|
while (this.writeBuffer.length > 0) {
|
|
this.write(this.writeBuffer.shift());
|
|
}
|
|
}
|
|
|
|
module.exports = Arduino;
|