Motion and tilt sensor

This commit is contained in:
Nathan Kellenicki 2019-12-16 11:48:09 -08:00
parent 81cbdac591
commit 31ac93275c
8 changed files with 116 additions and 5 deletions

View File

@ -65,7 +65,7 @@ poweredUP.on("discover", async (hub) => { // Wait to discover hubs
}
if (
device instanceof PoweredUP.Lights
device instanceof PoweredUP.Light
) {
const lights = device;
@ -82,7 +82,7 @@ poweredUP.on("discover", async (hub) => { // Wait to discover hubs
if (device instanceof PoweredUP.ColorDistanceSensor) {
const sensor = device;
sensor.on("distance", (distance) => { // Adding an event handler for distance automatically subscribes to distance notifications
sensor.on("distance", (distance) => {
console.log(`Distance ${distance}`);
});
sensor.on("color", (color) => {
@ -90,6 +90,20 @@ poweredUP.on("discover", async (hub) => { // Wait to discover hubs
});
}
if (device instanceof PoweredUP.MotionSensor) {
const sensor = device;
sensor.on("distance", (distance) => {
console.log(`Distance ${distance}`);
});
}
if (device instanceof PoweredUP.TiltSensor) {
const sensor = device;
sensor.on("tilt", (x, y) => {
console.log(`Tilt ${x} ${y}`);
});
}
});
hub.on("disconnect", () => {

View File

@ -59,8 +59,8 @@ export enum DeviceType {
CURRENT = 21,
PIEZO_TONE = 22,
RGB_LIGHT = 23,
WEDO2_TILT = 34,
WEDO2_DISTANCE = 35,
TILT_SENSOR = 34,
MOTION_SENSOR = 35,
COLOR_DISTANCE_SENSOR = 37,
MEDIUM_LINEAR_MOTOR = 38,
MOVE_HUB_MEDIUM_LINEAR_MOTOR = 39,

View File

@ -7,7 +7,7 @@ export class Device extends EventEmitter {
public autoSubscribe: boolean = true;
protected _mode: number = 0x00;
protected _mode: number | undefined;
protected _busy: boolean = false;
protected _finished: (() => void) | undefined;

View File

@ -14,10 +14,12 @@ import { ColorDistanceSensor } from "./colordistancesensor";
import { Device } from "./device";
import { Light } from "./light";
import { MediumLinearMotor } from "./mediumlinearmotor";
import { MotionSensor } from "./motionsensor";
import { MoveHubMediumLinearMotor } from "./movehubmediumlinearmotor";
import { SimpleMediumLinearMotor } from "./simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "./techniclargelinearmotor";
import { TechnicXLargeLinearMotor } from "./technicxlargelinearmotor";
import { TiltSensor } from "./tiltsensor";
import { TrainMotor } from "./trainmotor";
import { isWebBluetooth } from "./utils";
@ -37,10 +39,12 @@ window.PoweredUP = {
Device,
Light,
MediumLinearMotor,
MotionSensor,
MoveHubMediumLinearMotor,
SimpleMediumLinearMotor,
TechnicLargeLinearMotor,
TechnicXLargeLinearMotor,
TiltSensor,
TrainMotor,
isWebBluetooth
};

View File

@ -14,10 +14,12 @@ import { ColorDistanceSensor } from "./colordistancesensor";
import { Device } from "./device";
import { Light } from "./light";
import { MediumLinearMotor } from "./mediumlinearmotor";
import { MotionSensor } from "./motionsensor";
import { MoveHubMediumLinearMotor } from "./movehubmediumlinearmotor";
import { SimpleMediumLinearMotor } from "./simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "./techniclargelinearmotor";
import { TechnicXLargeLinearMotor } from "./technicxlargelinearmotor";
import { TiltSensor } from "./tiltsensor";
import { TrainMotor } from "./trainmotor";
import { isWebBluetooth } from "./utils";
@ -37,10 +39,12 @@ export {
Device,
Light,
MediumLinearMotor,
MotionSensor,
MoveHubMediumLinearMotor,
SimpleMediumLinearMotor,
TechnicLargeLinearMotor,
TechnicXLargeLinearMotor,
TiltSensor,
TrainMotor,
isWebBluetooth
};

View File

@ -4,10 +4,12 @@ import { Hub } from "./hub";
import { ColorDistanceSensor } from "./colordistancesensor";
import { Light } from "./light";
import { MediumLinearMotor } from "./mediumlinearmotor";
import { MotionSensor } from "./motionsensor";
import { MoveHubMediumLinearMotor } from "./movehubmediumlinearmotor";
import { SimpleMediumLinearMotor } from "./simplemediumlinearmotor";
import { TechnicLargeLinearMotor } from "./techniclargelinearmotor";
import { TechnicXLargeLinearMotor } from "./technicxlargelinearmotor";
import { TiltSensor } from "./tiltsensor";
import { TrainMotor } from "./trainmotor";
import * as Consts from "./consts";
@ -301,6 +303,12 @@ export class LPF2Hub extends Hub {
case Consts.DeviceType.MOVE_HUB_MEDIUM_LINEAR_MOTOR:
device = new MoveHubMediumLinearMotor(this, portId);
break;
case Consts.DeviceType.MOTION_SENSOR:
device = new MotionSensor(this, portId);
break;
case Consts.DeviceType.TILT_SENSOR:
device = new TiltSensor(this, portId);
break;
case Consts.DeviceType.MEDIUM_LINEAR_MOTOR:
device = new MediumLinearMotor(this, portId);
break;

41
src/motionsensor.ts Normal file
View File

@ -0,0 +1,41 @@
import { Device } from "./device";
import { Hub } from "./hub";
import * as Consts from "./consts";
export class MotionSensor extends Device {
constructor (hub: Hub, portId: number) {
super(hub, portId, Consts.DeviceType.MOTION_SENSOR);
this.on("newListener", (event) => {
if (this.autoSubscribe) {
switch (event) {
case "distance":
this.subscribe(0x00);
break;
}
}
});
}
public receive (message: Buffer) {
const mode = this._mode;
switch (mode) {
case 0x00:
let distance = message[4];
if (message[5] === 1) {
distance = message[4] + 255;
}
/**
* Emits when a distance sensor is activated.
* @event MotionSensor#distance
* @param {number} distance Distance, in millimeters.
*/
this.emit("distance", distance * 10);
break;
}
}
}

40
src/tiltsensor.ts Normal file
View File

@ -0,0 +1,40 @@
import { Device } from "./device";
import { Hub } from "./hub";
import * as Consts from "./consts";
export class TiltSensor extends Device {
constructor (hub: Hub, portId: number) {
super(hub, portId, Consts.DeviceType.TILT_SENSOR);
this.on("newListener", (event) => {
if (this.autoSubscribe) {
switch (event) {
case "tilt":
this.subscribe(0x00);
break;
}
}
});
}
public receive (message: Buffer) {
const mode = this._mode;
switch (mode) {
case 0x00:
const tiltX = message.readInt8(4);
const tiltY = message.readInt8(5);
/**
* Emits when a tilt sensor is activated.
* @event LPF2Hub#tilt
* @param {number} x
* @param {number} y
*/
this.emit("tilt", tiltX, tiltY);
break;
}
}
}