polarity in synched motor (#945)
* account for polarity * more comments * handle dual motor in runtime * invert steer * don't use firmware polarity
This commit is contained in:
@ -159,6 +159,7 @@ namespace motors {
|
||||
private _accelerationTime: number;
|
||||
private _decelerationSteps: number;
|
||||
private _decelerationTime: number;
|
||||
private _inverted: boolean;
|
||||
|
||||
protected static output_types: number[] = [0x7, 0x7, 0x7, 0x7];
|
||||
|
||||
@ -176,6 +177,7 @@ namespace motors {
|
||||
this._accelerationTime = 0;
|
||||
this._decelerationSteps = 0;
|
||||
this._decelerationTime = 0;
|
||||
this._inverted = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -225,9 +227,11 @@ namespace motors {
|
||||
//% help=motors/motor/set-inverted
|
||||
setInverted(inverted: boolean) {
|
||||
this.init();
|
||||
const b = mkCmd(this._port, DAL.opOutputPolarity, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, inverted ? 0 : 1);
|
||||
writePWM(b)
|
||||
this._inverted = inverted;
|
||||
}
|
||||
|
||||
protected invertedFactor(): number {
|
||||
return this._inverted ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -294,8 +298,9 @@ namespace motors {
|
||||
}
|
||||
|
||||
private normalizeSchedule(speed: number, step1: number, step2: number, step3: number, unit: MoveUnit): MoveSchedule {
|
||||
// motor polarity is not supported at the firmware level for sync motor operations
|
||||
const r: MoveSchedule = {
|
||||
speed: Math.clamp(-100, 100, speed >> 0),
|
||||
speed: Math.clamp(-100, 100, speed | 0) * this.invertedFactor(),
|
||||
useSteps: true,
|
||||
steps: [step1 || 0, step2 || 0, step3 || 0]
|
||||
}
|
||||
@ -562,6 +567,7 @@ namespace motors {
|
||||
|
||||
private __init() {
|
||||
this.setOutputType(this._large);
|
||||
this.setInverted(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -741,7 +747,7 @@ namespace motors {
|
||||
//% help=motors/synced/steer
|
||||
steer(turnRatio: number, speed: number, value: number = 0, unit: MoveUnit = MoveUnit.MilliSeconds) {
|
||||
this.init();
|
||||
speed = Math.clamp(-100, 100, speed >> 0);
|
||||
speed = Math.clamp(-100, 100, speed >> 0) * this.invertedFactor();
|
||||
if (!speed) {
|
||||
this.stop();
|
||||
return;
|
||||
|
Reference in New Issue
Block a user