Mario accelerometer support

This commit is contained in:
Nathan Kellenicki 2020-12-23 10:15:57 -08:00
parent e88cec2635
commit 5094c8269f
4 changed files with 55 additions and 4 deletions

View File

@ -18,13 +18,15 @@ poweredUP.on("discover", async (hub) => { // Wait to discover hubs
await mario.connect(); // Connect to Mario await mario.connect(); // Connect to Mario
console.log(`Connected to Mario!`); console.log(`Connected to Mario!`);
const pants = await mario.waitForDeviceByType(PoweredUP.Consts.DeviceType.MARIO_PANTS_SENSOR); mario.on("accel", (_, { x, y, z }) => {
pants.on("pants", ({ pants }) => { console.log("Accelerometer", x, y, z);
});
mario.on("pants", (_, { pants }) => {
console.log("Pants detected", pants); console.log("Pants detected", pants);
}); });
const barcodeSensor = await mario.waitForDeviceByType(PoweredUP.Consts.DeviceType.MARIO_BARCODE_SENSOR); mario.on("barcode", (_, { barcode, color }) => {
barcodeSensor.on("barcode", ({ barcode, color }) => {
if (color) { if (color) {
console.log("Color detected", color); console.log("Color detected", color);
} else if (barcode) { } else if (barcode) {

View File

@ -85,6 +85,7 @@ export enum DeviceType {
TECHNIC_COLOR_SENSOR = 61, // Spike Prime TECHNIC_COLOR_SENSOR = 61, // Spike Prime
TECHNIC_DISTANCE_SENSOR = 62, // Spike Prime TECHNIC_DISTANCE_SENSOR = 62, // Spike Prime
TECHNIC_FORCE_SENSOR = 63, // Spike Prime TECHNIC_FORCE_SENSOR = 63, // Spike Prime
MARIO_ACCELEROMETER = 71,
MARIO_BARCODE_SENSOR = 73, MARIO_BARCODE_SENSOR = 73,
MARIO_PANTS_SENSOR = 74, MARIO_PANTS_SENSOR = 74,
TECHNIC_MEDIUM_ANGULAR_MOTOR_GREY = 75, // Technic Control+ TECHNIC_MEDIUM_ANGULAR_MOTOR_GREY = 75, // Technic Control+

View File

@ -0,0 +1,46 @@
import { Device } from "./device";
import { IDeviceInterface } from "../interfaces";
import * as Consts from "../consts";
/**
* @class MarioAccelerometer
* @extends Device
*/
export class MarioAccelerometer extends Device {
constructor (hub: IDeviceInterface, portId: number) {
super(hub, portId, ModeMap, Consts.DeviceType.MARIO_ACCELEROMETER);
}
public receive (message: Buffer) {
const mode = this._mode;
switch (mode) {
case Mode.ACCEL:
/**
* Emits when accelerometer detects movement. Measured in mG.
* @event MarioAccelerometer#accel
* @type {object}
* @param {number} x
* @param {number} y
* @param {number} z
*/
const x = message[4];
const y = message[5];
const z = message[6];
this.notify("accel", { x, y, z });
break;
}
}
}
export enum Mode {
ACCEL = 0x00
}
export const ModeMap: {[event: string]: number} = {
"accel": Mode.ACCEL
};

View File

@ -13,6 +13,7 @@ import { DuploTrainBaseSpeedometer } from "../devices/duplotrainbasespeedometer"
import { HubLED } from "../devices/hubled"; import { HubLED } from "../devices/hubled";
import { Light } from "../devices/light"; import { Light } from "../devices/light";
import { MarioAccelerometer } from "../devices/marioaccelerometer";
import { MarioBarcodeSensor } from "../devices/mariobarcodesensor"; import { MarioBarcodeSensor } from "../devices/mariobarcodesensor";
import { MarioPantsSensor } from "../devices/mariopantssensor"; import { MarioPantsSensor } from "../devices/mariopantssensor";
import { MediumLinearMotor } from "../devices/mediumlinearmotor"; import { MediumLinearMotor } from "../devices/mediumlinearmotor";
@ -419,6 +420,7 @@ export class BaseHub extends EventEmitter {
[Consts.DeviceType.DUPLO_TRAIN_BASE_MOTOR]: DuploTrainBaseMotor, [Consts.DeviceType.DUPLO_TRAIN_BASE_MOTOR]: DuploTrainBaseMotor,
[Consts.DeviceType.DUPLO_TRAIN_BASE_SPEAKER]: DuploTrainBaseSpeaker, [Consts.DeviceType.DUPLO_TRAIN_BASE_SPEAKER]: DuploTrainBaseSpeaker,
[Consts.DeviceType.DUPLO_TRAIN_BASE_SPEEDOMETER]: DuploTrainBaseSpeedometer, [Consts.DeviceType.DUPLO_TRAIN_BASE_SPEEDOMETER]: DuploTrainBaseSpeedometer,
[Consts.DeviceType.MARIO_ACCELEROMETER]: MarioAccelerometer,
[Consts.DeviceType.MARIO_BARCODE_SENSOR]: MarioBarcodeSensor, [Consts.DeviceType.MARIO_BARCODE_SENSOR]: MarioBarcodeSensor,
[Consts.DeviceType.MARIO_PANTS_SENSOR]: MarioPantsSensor, [Consts.DeviceType.MARIO_PANTS_SENSOR]: MarioPantsSensor,
}; };