UNPKG

sensorium

Version:

makeblock mainboards protocol api

83 lines (76 loc) 2.15 kB
import { warnNotSupport } from '../core/validate'; import { composer, fiterWithBinaryStr } from '../core/utils'; import Electronic from './electronic'; import PIDForDistance from './encoder_motor_on_board_pid_for_distance'; import PIDForSpeed from './encoder_motor_on_board_pid_for_speed'; import PIDForPwm from './encoder_motor_on_board_pid_for_pwm'; import PIDForDoubleMotor from './encoder_motor_on_board_pid_for_doubleMotor'; import protocolAssembler from '../protocol/cmd'; import Control from '../core/control'; import { SUPPORTLIST } from '../settings'; const auriga = SUPPORTLIST[1].toLowerCase(); const megapipro = SUPPORTLIST[5].toLowerCase(); /** * EncoderMotorOnBoardPID 的速度模式经常被直接作为板载编码电机的设置速度来使用 * 插头可选 slot1 slot2 */ class EncoderMotorOnBoardPID extends Electronic { constructor(slot) { super(); let host = warnNotSupport(arguments[arguments.length - 1]) || megapipro; //宿主 this.hostname = host.toLowerCase(); //位置模式 this.distanceMode = function() { return new PIDForDistance(slot); } //速度模式 this.speedMode = function() { return new PIDForSpeed(slot); } //auriga 会多出两个 API if (this.hostname === auriga) { //pwm 模式 this.pwmMode = function() { return new PIDForPwm(slot); } //双电机模式, 即平衡车模式 this.doubleMotorMode = function() { return new PIDForDoubleMotor(slot); } } } /** * getter of protocol */ get protocol() { let subCmd = []; if (this.hostname == auriga) { subCmd = [0x04]; } else if (this.hostname == megapipro) { subCmd = [0x03]; } return composer(protocolAssembler.setEncoderMotorPIDZeroPoint, subCmd); } /** * 设置零点 * @example * let pid = new EncoderMotorOnBoardPID() * pid.setZeroPoint() */ setZeroPoint() { Control.write(this.protocol); return this; } static get SUPPORT() { return fiterWithBinaryStr(SUPPORTLIST, '010001'); } } export default EncoderMotorOnBoardPID;