@@ -94,8 +94,12 @@ void setup() {
9494 navigator.attachSteeringServo (STEERING_SERVO_PIN);
9595}
9696
97- const long UPDATE_FREQUENCY_MS = 50 ;
97+ const long UPDATE_FREQUENCY_MS = 10 ;
9898
99+ float avgWorkMs;
100+ long minWorkMs;
101+ long maxWorkMs;
102+ long workCount = 0 ;
99103bool started = false ;
100104long startedTimestamp = 0 ;
101105long lastUpdatedTimestamp = 0 ;
@@ -115,6 +119,9 @@ void loop() {
115119 emergencyStop ();
116120 }
117121 else {
122+ avgWorkMs = 0.0 ;
123+ minWorkMs = 2147483647 ;
124+ maxWorkMs = 0 ;
118125 start ();
119126 }
120127 return ;
@@ -129,6 +136,7 @@ void loop() {
129136 long timestamp = millis ();
130137 if (millis () - lastUpdatedTimestamp > UPDATE_FREQUENCY_MS) {
131138 // Update position, waypoint, check done, and navigation
139+ timestamp = millis ();
132140 Position position = tracker.update ();
133141 manager.update (position);
134142 if (manager.finished ()) {
@@ -137,6 +145,11 @@ void loop() {
137145 navigator.update (position, manager.getWaypoint ());
138146 lastUpdatedTimestamp = millis ();
139147 }
148+ long workElapsedMs = millis () - timestamp;
149+ // Calculate running average of time in loop
150+ minWorkMs = min (minWorkMs, workElapsedMs);
151+ maxWorkMs = max (maxWorkMs, workElapsedMs);
152+ avgWorkMs = (avgWorkMs * float (workCount) + workElapsedMs)/++workCount;
140153 }
141154}
142155
@@ -184,6 +197,12 @@ void stop() {
184197 Serial.print (" **** END NAVIGATION -- " );
185198 Serial.print (float (duration) / 1000.0 );
186199 Serial.println (" s ****" );
200+ Serial.print (" WORK: avg=" );
201+ Serial.print (avgWorkMs);
202+ Serial.print (" , min=" );
203+ Serial.print (minWorkMs);
204+ Serial.print (" , max=" );
205+ Serial.println (maxWorkMs);
187206 }
188207 blink (LED_PIN, 3 , 100 , 100 );
189208}
0 commit comments