/// <summary> /// Thread used for scanning /// Populates a list of Measurements, and adds that list to /// </summary> public void ScanThread() { DateTime _LastSyncBit = new DateTime(); //Make some room for a measurement Response_PointFormat measurementType = null; //Start writing output (for piping to csv) if (WriteOutCoordinates) { Console.WriteLine("X:Y"); } //Loop while we're scanning while (this._isScanning) { //Init Point format measurementType = new Response_PointFormat(); //Poll for data and parse response measurementType.parseData(waitPoint(1000)); //measurementType.parseData(Reponse(1000, (iRPLidarResponse)measurementType)); //Check for new 360 degree scan bit if (measurementType.CheckBit) { _motorSpeed = (1 / (DateTime.Now - _LastSyncBit).TotalSeconds) * 60; _LastSyncBit = DateTime.Now; //New Frame _Frames.Add(Frame); if (Data != null) { //Publish new frame Data(Frame); } //Keep it below 10 frames if (_Frames.Count > 10) { _Frames.RemoveAt(0); } //Start a new Frame list Frame = new List <Response_PointFormat>(); if (Verbose) { Console.WriteLine(":: Syncbit, last # of valid measurements: " + _Frames[_Frames.Count - 1].Count); } } if (WriteOutCoordinates) { Console.WriteLine("{0}:{1}", measurementType.X.ToString(), measurementType.Y.ToString()); } //Dont collect invalid data if (measurementType.IsValid) { Frame.Add(measurementType); } } }
public static Frame Convert(Response_PointFormat frame) { return(new Frame(frame.X, frame.Y, frame.Distance, frame.AngleDegrees, frame.CheckBit)); }