cherry-pick Cooperate (#985)
* cooperate pause * fix math * update lastPause before pausing * faster cooperation Co-authored-by: Peli de Halleux <peli@DESKTOP-5B7QRAM.corp.microsoft.com>
This commit is contained in:
		
				
					committed by
					
						
						Peli de Halleux
					
				
			
			
				
	
			
			
			
						parent
						
							1db61720fc
						
					
				
				
					commit
					f0821f8d6c
				
			
							
								
								
									
										11
									
								
								libs/core/cooperate.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								libs/core/cooperate.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
namespace control {
 | 
			
		||||
    let lastPause = 0;
 | 
			
		||||
    const COOPERATION_INTERVAL = 20
 | 
			
		||||
    export function cooperate() {
 | 
			
		||||
        const now = control.millis()
 | 
			
		||||
        if (now - lastPause > COOPERATION_INTERVAL) {
 | 
			
		||||
            lastPause = now
 | 
			
		||||
            pause(1)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -21,8 +21,7 @@ namespace sensors.internal {
 | 
			
		||||
            const now = control.millis();
 | 
			
		||||
            if (now - this.lastQuery >= this.interval * 2)
 | 
			
		||||
                this.queryAndUpdate(); // sensor poller is not allowed to run
 | 
			
		||||
            if (now - this.lastPause >= this.interval * 5)
 | 
			
		||||
                pause(1); // allow events to trigger
 | 
			
		||||
            control.cooperate(); // allow events to trigger
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private queryAndUpdate() {
 | 
			
		||||
 
 | 
			
		||||
@@ -124,7 +124,7 @@ namespace motors {
 | 
			
		||||
    export function stopAll() {
 | 
			
		||||
        const b = mkCmd(Output.ALL, DAL.opOutputStop, 0)
 | 
			
		||||
        writePWM(b);
 | 
			
		||||
        pause(1);
 | 
			
		||||
        control.cooperate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -136,7 +136,7 @@ namespace motors {
 | 
			
		||||
    //% help=motors/reset-all
 | 
			
		||||
    export function resetAll() {
 | 
			
		||||
        reset(Output.ALL)
 | 
			
		||||
        pause(1);
 | 
			
		||||
        control.cooperate();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface MoveSchedule {
 | 
			
		||||
@@ -269,7 +269,7 @@ namespace motors {
 | 
			
		||||
            if (this._brake && this._brakeSettleTime > 0)
 | 
			
		||||
                pause(this._brakeSettleTime);
 | 
			
		||||
            else {
 | 
			
		||||
                pause(1);
 | 
			
		||||
                control.cooperate();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -280,7 +280,7 @@ namespace motors {
 | 
			
		||||
                // allow robot to settle
 | 
			
		||||
                this.settle();
 | 
			
		||||
            } else {
 | 
			
		||||
                pause(1);
 | 
			
		||||
                control.cooperate();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -357,7 +357,7 @@ namespace motors {
 | 
			
		||||
            // special: 0 is infinity
 | 
			
		||||
            if (schedule.steps[0] + schedule.steps[1] + schedule.steps[2] == 0) {
 | 
			
		||||
                this._run(schedule.speed);
 | 
			
		||||
                pause(1);
 | 
			
		||||
                control.cooperate();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,8 @@
 | 
			
		||||
        "platform.h",
 | 
			
		||||
        "platform.cpp",
 | 
			
		||||
        "dmesg.cpp",
 | 
			
		||||
        "integrator.ts"
 | 
			
		||||
        "integrator.ts",
 | 
			
		||||
        "cooperate.ts"
 | 
			
		||||
    ],
 | 
			
		||||
    "testFiles": [
 | 
			
		||||
        "test.ts"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user