[chronojump] encoder diameter almost done



commit f1f98e5d55b0df5572951cb01708c99ea8272ae2
Author: Xavier de Blas <xaviblas gmail com>
Date:   Fri Jan 17 13:49:59 2014 +0100

    encoder diameter almost done

 encoder/graph.R       |   10 ++++++----
 src/gui/encoder.cs    |   26 ++++++++++++++------------
 src/sqlite/encoder.cs |    2 +-
 src/utilEncoder.cs    |   14 +++++++++++---
 4 files changed, 32 insertions(+), 20 deletions(-)
---
diff --git a/encoder/graph.R b/encoder/graph.R
index 300a17a..935879f 100644
--- a/encoder/graph.R
+++ b/encoder/graph.R
@@ -1602,13 +1602,15 @@ find.yrange <- function(singleFile, rawdata, curves) {
 #encoderMode conversions
 #in signals and curves, need to do conversions (invert, inertiaMomentum, diameter)
 encoderModeConversions <- function(rawdata, encoderMode, diameter) {
-       if(encoderMode == "LINEARINVERTED")
+       #write(rawdata, "debug-file.txt")
+       if(encoderMode == "LINEARINVERTED") {
                rawdata = -rawdata
-       if(encoderMode == "ROTARYAXIS") {
+       } else if(encoderMode == "ROTARYAXIS") {
                ticksRotaryEncoder = 200 #our rotary axis encoder send 200 ticks by turn
-               rawdata = ( rawdata / ticksRotaryEncoder ) * 2 * pi * ( diameter / 2 )
+               #diameter m -> mm
+               rawdata = ( rawdata / ticksRotaryEncoder ) * 2 * pi * ( diameter * 1000 / 2 )
        }
-       #write(rawdata, "debug-file.txt")
+       #write(rawdata, "debug-file2.txt")
        return(rawdata)
 }
 
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 35932da..73d001f 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -51,7 +51,7 @@ public partial class ChronoJumpWindow
        //at graph.R is converted to Kg*m^2 ( /10000 )
        [Widget] Gtk.SpinButton spin_encoder_capture_inertial; 
        
-       [Widget] Gtk.SpinButton spin_encoder_capture_diameter;
+       [Widget] Gtk.SpinButton spin_encoder_capture_diameter;  //diameter is always in m except in gui: 
there is in cm
        [Widget] Gtk.Button button_encoder_capture_inertial;
        [Widget] Gtk.Box hbox_encoder_capture_diameter;
 
@@ -154,7 +154,7 @@ public partial class ChronoJumpWindow
        private ArrayList encoderCompareInterperson;    //personID:personName
        private ArrayList encoderCompareIntersession;   //sessionID:sessionDate
 
-       private static int [] encoderReaded;            //data coming from encoder
+       private static double [] encoderReaded;         //data coming from encoder and converted (can be 
double)
        private static int encoderCaptureCountdown;
        private static Gdk.Point [] encoderCapturePoints;               //stored to be realtime displayed
        private static int encoderCapturePointsCaptured;                //stored to be realtime displayed
@@ -608,7 +608,8 @@ public partial class ChronoJumpWindow
                else
                        data.Add(0);
                
-               data.Add((double) spin_encoder_capture_diameter.Value);
+               //diameter is always in m except in gui: there is in cm
+               data.Add((double) spin_encoder_capture_diameter.Value / 100);
 
                return data;
        }
@@ -649,7 +650,8 @@ public partial class ChronoJumpWindow
                        checkbutton_encoder_capture_inverted.Active = false;
                }
 
-               spin_encoder_capture_diameter.Value = Convert.ToDouble(eSQL.diameter);  
+               //diameter is always in m except in gui: there is in cm
+               spin_encoder_capture_diameter.Value = Convert.ToDouble(eSQL.diameter) * 100;  
        }
 
 
@@ -662,7 +664,7 @@ public partial class ChronoJumpWindow
                 * 2: "l", "li", "rf" or "ra". Linear, linear inverted, rotatory friction, rotatory axes
                 * 3: "i" or "-". Inertial or not
                 * 4: inertial moment in Kgxcm^2 or "-".
-                * 5: diameter in cm
+                * 5: diameter in cm (in GUI. the rest is in meters)
                 *
                 * eg:
                 * p;ra;i;100;4
@@ -1854,11 +1856,11 @@ public partial class ChronoJumpWindow
                //it's stored in file like this
                int byteReadedRaw;
                //this it's converted applying encoderModeConversions: inverted, inertial, diameter, demult, 
...
-               int byteReaded;
+               double byteReaded;
                
                //initialize
                int [] encoderReadedRaw = new int[recordingTime]; //stored to file in this method
-               encoderReaded = new int[recordingTime];           //readed from drawing process: 
updateEncoderCaptureGraphRCalc() 
+               encoderReaded = new double[recordingTime];        //readed from drawing process: 
updateEncoderCaptureGraphRCalc() 
                
                ArrayList encoderTypeArray = getEncoderTypeByCombos();
                string encoderMode = encoderTypeArray[0].ToString();
@@ -1866,7 +1868,7 @@ public partial class ChronoJumpWindow
                double diameter = Convert.ToDouble(encoderTypeArray[2]);
 
 
-               int sum = 0;
+               double sum = 0;
                string dataString = "";
                string sep = "";
                
@@ -1945,7 +1947,7 @@ public partial class ChronoJumpWindow
                                //if string goes up or down
                                if(byteReaded != 0)
                                        //store the direction
-                                       directionNow = byteReaded / Math.Abs(byteReaded); //1 (up) or -1 
(down)
+                                       directionNow = (int) byteReaded / (int) Math.Abs(byteReaded); //1 
(up) or -1 (down)
                                        
                                //if we don't have changed the direction, store the last non-zero that we can 
find
                                if(directionChangeCount == 0 && directionNow == directionLastMSecond) {
@@ -3894,7 +3896,7 @@ Log.WriteLine(str);
                        
                        double height = 0;
 
-                       int [] curve = new int[ecc.endFrame - ecc.startFrame];
+                       double [] curve = new double[ecc.endFrame - ecc.startFrame];
                        for(int k=0, j=ecc.startFrame; j < ecc.endFrame ; j ++) {
                                height += encoderReaded[j];
                                curve[k]=encoderReaded[j];
@@ -3912,7 +3914,7 @@ Log.WriteLine(str);
                        
                        Log.Write(" uECGRC2 calling rdotnet ");
 
-                       IntegerVector curveToR = rengine.CreateIntegerVector(curve);
+                       NumericVector curveToR = rengine.CreateNumericVector(curve);
                        rengine.SetSymbol("curveToR", curveToR);
 
                        //cannot do smooth.spline with less than 4 values
@@ -4003,7 +4005,7 @@ Log.WriteLine(str);
                                        Log.Write(curveToR[i] + ","); //TODO: provar aixo!!                   
          
 
                        //create a curveToR with only reduced curve
-                       IntegerVector curveToRreduced = rengine.CreateIntegerVector(new int[x_end - x_ini]);
+                       NumericVector curveToRreduced = rengine.CreateNumericVector(new double[x_end - 
x_ini]);
                        for(int k=0, i=x_ini; i < x_end; i ++)
                                curveToRreduced[k++] = curveToR[i];                             
                        rengine.SetSymbol("curveToRreduced", curveToRreduced);
diff --git a/src/sqlite/encoder.cs b/src/sqlite/encoder.cs
index aec4edf..4e058ac 100644
--- a/src/sqlite/encoder.cs
+++ b/src/sqlite/encoder.cs
@@ -155,7 +155,7 @@ class SqliteEncoder : Sqlite
                                "', videoURL = '" + es.videoURL + 
                                "', mode = '" + es.encoderMode + 
                                "', inertiaMomentum = " + es.inertiaMomentum + 
-                               ", diameter = " + es.diameter + 
+                               ", diameter = " + Util.ConvertToPoint(es.diameter) + 
                                ", future1 = '" + es.future1 + 
                                "', future2 = '" + es.future2 + 
                                "', future3 = '" + es.future3 + 
diff --git a/src/utilEncoder.cs b/src/utilEncoder.cs
index 6acc321..5985348 100644
--- a/src/utilEncoder.cs
+++ b/src/utilEncoder.cs
@@ -441,12 +441,20 @@ public class UtilEncoder
                return fileCurve;
        }
 
-       public static int EncoderModeConversions(int byteReaded, string encoderMode, int inertiaMomentum, 
double diameter) {
+       public static double EncoderModeConversions(int byteReaded, string encoderMode, int inertiaMomentum, 
double diameter) {
+               double byteConverted = byteReaded;
+
                //invert sign if inverted is selected
                if(encoderMode == Constants.EncoderSignalMode.LINEARINVERTED.ToString())
-                       byteReaded *= -1;
+                       byteConverted *= -1;
+               else if(encoderMode == "ROTARYAXIS") {
+                       int ticksRotaryEncoder = 200; //our rotary axis encoder send 200 ticks by turn
+                       //diameter m -> mm
+                       byteConverted = ( byteConverted / ticksRotaryEncoder ) * 2 * Math.PI * ( diameter * 
1000 / 2 );
+               }
+               //Log.Write(" " + byteReaded + ":" + byteConverted);
 
-               return byteReaded;
+               return byteConverted;
        }       
 
 }


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