问题描述
我有一个问题。在此代码中,一步时间和循环时间计算为 0。它不会计算一分钟过去之前的秒。但是,当它是 1 分钟时,它会计算分钟。但我们希望它单独计算。我们在哪里犯错?
30 秒内完成一分钟,60 秒内必须是 1 分钟。
StepPerMinute 应该只在它完成一分钟后才响应,否则它应该落入导管块,但我遇到了问题。
AStepDuration 必须每秒计算一次,但 1 分钟后开始计算,然后返回零。
循环时间总是为零。
if (stepCount == 1)
{
firstStepTime = DateTime.Now;
}
else if (stepCount > 1)
{
DateTime stepTime = DateTime.Now;
var result = stepTime.Subtract(firstStepTime);
var totalMinutes = Convert.ToInt16(result.TotalMinutes);
totalSeconds = Convert.ToInt16(result.TotalSeconds);
try
{
stepsPerMinute = Convert.ToInt16(stepCount / totalMinutes);
AStepDuration = (Convert.Todouble( totalSeconds ) / stepCount);
CycleTime = totalSeconds * (2 / stepCount);
}
catch (DivideByZeroException)
{
stepsPerMinute = stepCount;
}
Console.WriteLine("Total time: {0}",totalMinutes+"dk");
Console.WriteLine("Total second : {0}",totalSeconds+"sn");
Console.WriteLine("Steps Per Minute(Cadence): {0}",stepsPerMinute +"step/min");
Console.WriteLine("A Step Duration: {0}",AStepDuration);
Console.WriteLine("Cycle Time: {0}",CycleTime + "sn");
}
解决方法
我不确定 Kinect 是否有 StopWatch
,但是,如果它可用,那么您可以像这样使用它,而不是使用 DateTime
。
Stopwatch stopWatch = new Stopwatch();
// you may stop like this stopWatch.Stop()
// or reset like this stopWatch.Reset()
if (stepCount == 1)
{
stopWatch.Start();
}
else if (stepCount > 1)
{
try
{
stepsPerMinute = Convert.ToInt16(stepCount / stopWatch.Elapsed.Minutes);
BirAdimSüresi = (Convert.ToDouble(stopWatch.Elapsed.Seconds) / stepCount);
CycleTime = stopWatch.Elapsed.Seconds * (2 / stepCount); // saniye or CycleTime =120/ cadence
}
catch (DivideByZeroException)
{
stepsPerMinute = stepCount;
}
Console.WriteLine("Total time: {0}",stopWatch.Elapsed.Minutes + "dk");
Console.WriteLine("Total seconds : {0}",stopWatch.Elapsed.Seconds + "sn");
Console.WriteLine("Steps Per Minute(Cadence): {0}",stepsPerMinute + "step/min");
Console.WriteLine("Bir Adim Süresi: {0}",BirAdimSüresi);
Console.WriteLine("Cycle Time: {0}",CycleTime + "sn");
}