[chronojump] New class RunEncoderCaptureGetSpeedAndDisplacement to manage RaceAnalyzer captured/loaded values



commit f0c77c28cfc2e635b59ccac2e770221a9b8fea47
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue Apr 6 19:09:16 2021 +0200

    New class RunEncoderCaptureGetSpeedAndDisplacement to manage RaceAnalyzer captured/loaded values

 src/runEncoder.cs | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)
---
diff --git a/src/runEncoder.cs b/src/runEncoder.cs
index f74bd60a..4b30244a 100644
--- a/src/runEncoder.cs
+++ b/src/runEncoder.cs
@@ -258,6 +258,92 @@ public class RunEncoder
        }
 }
 
+//get speed, total distance, ...
+public class RunEncoderCaptureGetSpeedAndDisplacement
+{
+       private int encoderDisplacement;
+       private int time;
+       private int force;
+       private int encoderOrRCA;
+
+       private int timePre;
+
+       private double runEncoderCaptureSpeed;
+       private double runEncoderCaptureSpeedMax;
+       private double runEncoderCaptureDistance;
+
+       public RunEncoderCaptureGetSpeedAndDisplacement()
+       {
+               timePre = 0;
+       }
+
+       public void PassCapturedRow (List<int> binaryReaded)
+       {
+               this.encoderDisplacement = binaryReaded[0];
+               this.time = binaryReaded[1];
+               this.force = binaryReaded[2];
+               this.encoderOrRCA = binaryReaded[3];
+       }
+
+       public bool PassLoadedRow (string row)
+       {
+               string [] cells = row.Split(new char[] {';'});
+               if(cells.Length != 3)
+                       return false;
+
+               if(! Util.IsNumber(cells[0], false) || ! Util.IsNumber(cells[1], false))
+                       return false;
+
+               this.encoderDisplacement = Convert.ToInt32(cells[0]);
+               this.time = Convert.ToInt32(cells[1]);
+               return true;
+       }
+
+       public bool Calcule ()
+       {
+               bool hasCalculed = false;
+               if(time > timePre)
+               {
+                       if(timePre > 0)
+                       {
+                               double runEncoderCaptureDistanceAtThisSample = Math.Abs(encoderDisplacement) 
* 0.0030321; //hardcoded: same as sprintEncoder.R
+                               runEncoderCaptureSpeed = 
UtilAll.DivideSafe(runEncoderCaptureDistanceAtThisSample, (time - timePre)) * 1000000;
+                               if(runEncoderCaptureSpeed > runEncoderCaptureSpeedMax)
+                                       runEncoderCaptureSpeedMax = runEncoderCaptureSpeed;
+
+                               runEncoderCaptureDistance += runEncoderCaptureDistanceAtThisSample;
+                               hasCalculed = true;
+                       }
+                       timePre = time;
+               }
+               return hasCalculed;
+       }
+
+       public int EncoderDisplacement {
+               get { return encoderDisplacement; }
+       }
+       public int Time {
+               get { return time; }
+       }
+       public int Force {
+               get { return force; }
+       }
+       public int EncoderOrRCA {
+               get { return encoderOrRCA; }
+       }
+
+       public double RunEncoderCaptureSpeed {
+               get { return runEncoderCaptureSpeed; }
+               set { runEncoderCaptureSpeed = value; }
+       }
+       public double RunEncoderCaptureSpeedMax {
+               get { return runEncoderCaptureSpeedMax; }
+       }
+       public double RunEncoderCaptureDistance {
+               get { return runEncoderCaptureDistance; }
+       }
+}
+
 public class RunEncoderExercise
 {
        private int uniqueID;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]