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