UNPKG

obniz

Version:

obniz sdk for javascript

176 lines (175 loc) 7.47 kB
"use strict"; /** * @packageDocumentation * @module Parts.Grove_3AxisAccelerometer */ Object.defineProperty(exports, "__esModule", { value: true }); class Grove_3AxisAccelerometer { constructor() { this.displayName = '3axis'; this.displayIoNames = { sda: 'sda', scl: 'scl' }; this.address = 0x53; this.keys = ['gnd', 'vcc', 'sda', 'scl', 'grove']; this.requiredKeys = []; this.ioKeys = this.keys; this.regAdrs = {}; this.regAdrs.POWER_CTL = 0x2d; this.regAdrs.THRESH_ACT = 0x24; this.regAdrs.THRESH_INACT = 0x25; this.regAdrs.TIME_INACT = 0x26; this.regAdrs.ACT_INACT_CTL = 0x27; this.regAdrs.TAP_AXES = 0x2a; this.regAdrs.THRESH_TAP = 0x1d; this.regAdrs.DUR = 0x21; this.regAdrs.LATENT = 0x22; this.regAdrs.WINDOW = 0x23; this.regAdrs.THRESH_FF = 0x28; this.regAdrs.TIME_FF = 0x29; this.regAdrs.INT_MAP = 0x2f; this.regAdrs.INT_ENABLE = 0x2e; this.regAdrs.DATAX0 = 0x32; this.regAdrs.INT_DATA_READY_BIT = 0x07; this.regAdrs.INT_SINGLE_TAP_BIT = 0x06; this.regAdrs.INT_DOUBLE_TAP_BIT = 0x05; this.regAdrs.INT_ACTIVITY_BIT = 0x04; this.regAdrs.INT_INACTIVITY_BIT = 0x03; this.regAdrs.INT_FREE_FALL_BIT = 0x02; this.regAdrs.INT_WATERMARK_BIT = 0x01; this.regAdrs.INT_OVERRUNY_BIT = 0x00; this.constVal = {}; this.constVal.gainX = 0.0037639; this.constVal.gainY = 0.00376009; this.constVal.gainZ = 0.00349265; this.constVal.INT1_PIN = 0x00; this.constVal.INT2_PIN = 0x01; } static info() { return { name: 'Grove_3AxisAccelerometer', }; } wired(obniz) { this.obniz = obniz; if (this.params.grove) { this.i2c = this.params.grove.getI2c(400000, '5v'); } else { this.vcc = this.params.vcc; this.gnd = this.params.gnd; this.obniz.setVccGnd(this.params.vcc, this.params.gnd, '5v'); this.params.clock = 400000; this.params.mode = 'master'; this.i2c = obniz.getI2CWithConfig(this.params); } this.obniz.wait(100).then(() => { return this.initWait(); }); } async initWait() { // power on this.i2c.write(this.address, [this.regAdrs.POWER_CTL, 0]); this.i2c.write(this.address, [this.regAdrs.POWER_CTL, 16]); this.i2c.write(this.address, [this.regAdrs.POWER_CTL, 8]); this.i2c.write(this.address, [this.regAdrs.THRESH_ACT, 75]); // set activity threshold 0~255 this.i2c.write(this.address, [this.regAdrs.THRESH_INACT, 75]); // set inactivity threshold 0~255 this.i2c.write(this.address, [this.regAdrs.THRESH_INACT, 10]); // set time inactivity 0~255 await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 6, 1); // setActivityX await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 5, 1); // setActivityY await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 4, 1); // setActivityZ await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 2, 1); // setInactivityX await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 1, 1); // setInactivityY await this.setRegisterBitWait(this.regAdrs.ACT_INACT_CTL, 0, 1); // setInactivityZ await this.setRegisterBitWait(this.regAdrs.TAP_AXES, 2, 0); // setTapDetectionOnX await this.setRegisterBitWait(this.regAdrs.TAP_AXES, 1, 0); // setTapDetectionOnY await this.setRegisterBitWait(this.regAdrs.TAP_AXES, 0, 1); // setTapDetectionOnZ this.i2c.write(this.address, [this.regAdrs.THRESH_TAP, 50]); // setTapThreshold this.i2c.write(this.address, [this.regAdrs.DUR, 15]); // setTapDuration this.i2c.write(this.address, [this.regAdrs.LATENT, 80]); // setDoubleTapLatency this.i2c.write(this.address, [this.regAdrs.WINDOW, 200]); // setDoubleTapWindow this.i2c.write(this.address, [this.regAdrs.THRESH_FF, 7]); // setFreeFallThreshold this.i2c.write(this.address, [this.regAdrs.TIME_FF, 45]); // setFreeFallDuration // setInterruptMapping await this.setInterruptMappingWait(this.regAdrs.INT_SINGLE_TAP_BIT, this.constVal.INT1_PIN); await this.setInterruptMappingWait(this.regAdrs.INT_DOUBLE_TAP_BIT, this.constVal.INT1_PIN); await this.setInterruptMappingWait(this.regAdrs.INT_FREE_FALL_BIT, this.constVal.INT1_PIN); await this.setInterruptMappingWait(this.regAdrs.INT_ACTIVITY_BIT, this.constVal.INT1_PIN); await this.setInterruptMappingWait(this.regAdrs.INT_INACTIVITY_BIT, this.constVal.INT1_PIN); // setInterrupt await this.setInterruptWait(this.regAdrs.INT_SINGLE_TAP_BIT, 1); await this.setInterruptWait(this.regAdrs.INT_DOUBLE_TAP_BIT, 1); await this.setInterruptWait(this.regAdrs.INT_FREE_FALL_BIT, 1); await this.setInterruptWait(this.regAdrs.INT_ACTIVITY_BIT, 1); await this.setInterruptWait(this.regAdrs.INT_INACTIVITY_BIT, 1); } /** * @deprecated * @param regAddr * @param bitPos * @param state */ setRegisterBit(regAddr, bitPos, state) { return this.setRegisterBitWait(regAddr, bitPos, state); } async setRegisterBitWait(regAddr, bitPos, state) { this.i2c.write(this.address, [regAddr]); let b = await this.i2c.readWait(this.address, 1); if (state) { b = b | (1 << bitPos); // forces nth bit of b to be 1. all other bits left alone. } else { b = b & ~(1 << bitPos); // forces nth bit of b to be 0. all other bits left alone. } this.i2c.write(this.address, [b]); } /** * @deprecated * @param interruptBit * @param interruptPin */ setInterruptMapping(interruptBit, interruptPin) { return this.setInterruptMappingWait(interruptBit, interruptPin); } async setInterruptMappingWait(interruptBit, interruptPin) { await this.setRegisterBitWait(this.regAdrs.INT_MAP, interruptBit, interruptPin); } /** * @deprecated */ setInterrupt(interruptBit, state) { return this.setInterruptWait(interruptBit, state); } async setInterruptWait(interruptBit, state) { await this.setRegisterBitWait(this.regAdrs.INT_ENABLE, interruptBit, state); } signHandling(val) { const sign = val >> 15; if (sign) { val = -(0xffff - val); } return val; } /** * @deprecated */ getRawVal() { return this.getRawValWait(); } async getRawValWait() { this.i2c.write(this.address, [this.regAdrs.DATAX0]); const buff = await this.i2c.readWait(this.address, 6); const rawVal = [0, 0, 0]; rawVal[0] = this.signHandling((buff[1] << 8) | buff[0]); rawVal[1] = this.signHandling((buff[3] << 8) | buff[2]); rawVal[2] = this.signHandling((buff[5] << 8) | buff[4]); return rawVal; } async getWait() { const accelVal = [0, 0, 0]; const raw = await this.getRawVal(); accelVal[0] = raw[0] * this.constVal.gainX; accelVal[1] = raw[1] * this.constVal.gainY; accelVal[2] = raw[2] * this.constVal.gainZ; return accelVal; } } exports.default = Grove_3AxisAccelerometer;