public IEnumerator AsyncMeasure(FinishMeasurementCallback callback, DateTime startTime) { if (CheckConnection() && IsReady()) { if (startTime.CompareTo(DateTime.UtcNow) > 0) { var startTimeArgument = startTime.Hour.ToString("D2") + " " + startTime.Minute.ToString("D2") + " " + startTime.Second.ToString("D2"); Debug.Log("Send 'MEASURE_AT " + startTimeArgument + "' to microcontroller"); Write("MEASURE_AT " + startTimeArgument); //Wait till start of measurement while (startTime.CompareTo(DateTime.UtcNow) > 0) { yield return(new WaitForSeconds(0.5f)); } } else { Debug.Log("Start measuring directly. Send MEASURE message to microcontroller"); Write("MEASURE"); } _stream.ReadTimeout = 50; _asyncReadJob = new SerialAsyncReader(); _asyncReadJob.InStream = _stream; _asyncReadJob.Start(); while (!_asyncReadJob.Update()) { // Wait till job finished yield return(new WaitForSeconds(0.5f)); } callback(_asyncReadJob.OutReturnData); } else { Debug.LogError("Connection to microcontroller was not possible"); } }
/// <summary> /// Send MEASURE_AT command to microcontroller to start measurement at the exact next UTC timestamp received with the GPS-module. /// </summary> /// <param name="callback">Function which will be called when measurement is over.</param> public IEnumerator AsyncMeasure(FinishMeasurementCallback callback) { yield return(AsyncMeasure(callback, DateTime.UtcNow)); }