203 lines
No EOL
6.5 KiB
JavaScript
203 lines
No EOL
6.5 KiB
JavaScript
var GrovePi = require('../libs').GrovePi
|
|
var Commands = GrovePi.commands
|
|
var Board = GrovePi.board
|
|
var AccelerationI2cSensor = GrovePi.sensors.AccelerationI2C
|
|
var UltrasonicDigitalSensor = GrovePi.sensors.UltrasonicDigital
|
|
var AirQualityAnalogSensor = GrovePi.sensors.AirQualityAnalog
|
|
var DHTDigitalSensor = GrovePi.sensors.DHTDigital
|
|
var LightAnalogSensor = GrovePi.sensors.LightAnalog
|
|
var DigitalButtonSensor = GrovePi.sensors.DigitalButton
|
|
var LoudnessAnalogSensor = GrovePi.sensors.LoudnessAnalog
|
|
var RotaryAngleAnalogSensor = GrovePi.sensors.RotaryAnalog
|
|
var DustDigitalSensor = GrovePi.sensors.dustDigital
|
|
|
|
var board
|
|
|
|
|
|
var testOptions = {
|
|
acceleration: false,
|
|
ultrasonic: false,
|
|
airQuality: false,
|
|
dhtDigital: false,
|
|
lightAnalog: false,
|
|
digitalButton: true,
|
|
loudnessAnalog: false,
|
|
rotaryAngle: true,
|
|
dust: true,
|
|
customAccelerationReading: false
|
|
}
|
|
|
|
function start() {
|
|
console.log('starting')
|
|
|
|
board = new Board({
|
|
debug: true,
|
|
onError: function (err) {
|
|
console.log('TEST ERROR')
|
|
console.log(err)
|
|
},
|
|
onInit: function (res) {
|
|
if (res) {
|
|
|
|
console.log('GrovePi Version :: ' + board.version())
|
|
|
|
if (testOptions.acceleration) {
|
|
var accSensor = new AccelerationI2cSensor()
|
|
// I2C sensor doesn't need to specify a port
|
|
// Acc. XYZ
|
|
console.log('Acceleration I2C Sensor (single read) :: ' + accSensor.read())
|
|
console.log('Acceleration I2C Sensor (start stream - 1sec delay)')
|
|
accSensor.stream(1000, function (res) {
|
|
console.log('Acceleration stream value=' + res)
|
|
})
|
|
console.log('Acceleration I2C Sensor (start watch)')
|
|
accSensor.on('change', function (res) {
|
|
console.log('Acceleration onChange value=' + res)
|
|
})
|
|
accSensor.watch()
|
|
}
|
|
|
|
if (testOptions.ultrasonic) {
|
|
var ultrasonicSensor = new UltrasonicDigitalSensor(3)
|
|
// Digital Port 3
|
|
// Ultrasonic Ranger
|
|
console.log('Ultrasonic Ranger Digital Sensor (start watch)')
|
|
ultrasonicSensor.on('change', function (res) {
|
|
console.log('Ultrasonic Ranger onChange value=' + res)
|
|
})
|
|
ultrasonicSensor.watch()
|
|
}
|
|
|
|
if (testOptions.airQuality) {
|
|
var airQualitySensor = new AirQualityAnalogSensor(1)
|
|
// Analog Port 1
|
|
// Air Quality Sensor
|
|
console.log('AirQuality Analog Sensor (start watch)')
|
|
airQualitySensor.on('change', function (res) {
|
|
console.log('AirQuality onChange value=' + res)
|
|
})
|
|
airQualitySensor.watch()
|
|
}
|
|
|
|
if (testOptions.dhtDigital) {
|
|
var dhtSensor = new DHTDigitalSensor(3, DHTDigitalSensor.VERSION.DHT22, DHTDigitalSensor.CELSIUS)
|
|
// Digital Port 3
|
|
// DHT Sensor
|
|
console.log('DHT Digital Sensor (start watch)')
|
|
dhtSensor.on('change', function (res) {
|
|
console.log('DHT onChange value=' + res)
|
|
})
|
|
dhtSensor.watch(500) // milliseconds
|
|
}
|
|
|
|
if (testOptions.lightAnalog) {
|
|
var lightSensor = new LightAnalogSensor(3)
|
|
// Analog Port 3
|
|
// Light Sensor
|
|
console.log('Light Analog Sensor (start watch)')
|
|
lightSensor.on('change', function (res) {
|
|
console.log('Light onChange value=' + res)
|
|
})
|
|
lightSensor.watch()
|
|
}
|
|
|
|
if (testOptions.loudnessAnalog) {
|
|
var loudnessSensor = new LoudnessAnalogSensor(2)
|
|
//Analog Port 2
|
|
// Loudness Sensor
|
|
console.log('Loudness Analog Sensor (start monitoring - reporting results every 10s)')
|
|
loudnessSensor.start()
|
|
setInterval(loudnessSensorGetAvgMax, 10000, loudnessSensor)
|
|
}
|
|
|
|
if (testOptions.digitalButton) {
|
|
var buttonSensor = new DigitalButtonSensor(4)
|
|
//Digital Port 4
|
|
// Button sensor
|
|
console.log('Digital Button Sensor (start watch)')
|
|
buttonSensor.on('down', function (res) {
|
|
//res will be either singlepress or longpress
|
|
console.log('Button onDown, data=' + res)
|
|
})
|
|
buttonSensor.watch()
|
|
}
|
|
|
|
if (testOptions.rotaryAngle) {
|
|
var rotaryAngleSensor = new RotaryAngleAnalogSensor(1)
|
|
//Analog Port 1
|
|
// Rotary Angle Sensor
|
|
console.log('Rotary Angle Sensor (start watch)')
|
|
rotaryAngleSensor.start()
|
|
rotaryAngleSensor.on('data', function (res) {
|
|
console.log('Rotary onData value=' + res)
|
|
})
|
|
}
|
|
|
|
if (testOptions.dust) {
|
|
var dustSensor = new DustDigitalSensor(2)
|
|
//digital port 2
|
|
// Dust Digital Sensor
|
|
console.log('Dust Digital Sensor (start monitoring - reporting results every 30s)')
|
|
//we must get results every 30 seconds
|
|
dustSensor.start()
|
|
setInterval(dustSensorGetAvgMax, 30 * 1000, dustSensor)
|
|
}
|
|
|
|
if (testOptions.customAccelerationReading) {
|
|
// Custom external reading
|
|
console.log('Custom external reading')
|
|
console.log('customAccelerationReading()::' + customAccelerationReading())
|
|
}
|
|
} else {
|
|
console.log('TEST CANNOT START')
|
|
}
|
|
}
|
|
})
|
|
board.init()
|
|
}
|
|
|
|
function loudnessSensorGetAvgMax(loudnessSensor) {
|
|
var res = loudnessSensor.readAvgMax()
|
|
console.log('Loudness avg value=' + res.avg + ' and max value=' + res.max)
|
|
}
|
|
|
|
function dustSensorGetAvgMax(dustSensor) {
|
|
var res = dustSensor.readAvgMax()
|
|
//avg and max will be the same in this test
|
|
//since we're gathering them over 30 seconds
|
|
//but that's the same pediod this loop runs
|
|
console.log('Dust avg value=' + res.avg + ' and max value=' + res.max)
|
|
}
|
|
|
|
function customAccelerationReading() {
|
|
var write = board.writeBytes(Commands.acc_xyz.concat([Commands.unused, Commands.unused, Commands.unused]))
|
|
if (write) {
|
|
board.wait(100)
|
|
board.readByte()
|
|
var bytes = board.readBytes()
|
|
if (bytes instanceof Buffer) {
|
|
var x = bytes[1] > 32 ? -(bytes[1] - 224) : bytes[1]
|
|
var y = bytes[2] > 32 ? -(bytes[2] - 224) : bytes[2]
|
|
var z = bytes[3] > 32 ? -(bytes[3] - 224) : bytes[3]
|
|
return [x, y, z]
|
|
} else {
|
|
return false
|
|
}
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
function onExit(err) {
|
|
console.log('ending')
|
|
board.close()
|
|
process.removeAllListeners()
|
|
process.exit()
|
|
if (typeof err != 'undefined')
|
|
console.log(err)
|
|
}
|
|
|
|
// starts the test
|
|
start()
|
|
// catches ctrl+c event
|
|
process.on('SIGINT', onExit) |