在while循环中计算3秒

时间:2018-05-29 06:52:55

标签: c microcontroller

我目前正在开发'C'赛车游戏。我有一个始终处于循环中的进程函数,直到game_over设置为true。在过程功能中,我有一个功能,测试汽车是否停在燃料停止旁边,一旦停放,汽车停止,燃料恢复。

我想知道自从汽车停止燃油后我怎么能算3秒,然后让游戏在3秒后恢复。

我已经尝试将当前时间存储在变量中并将“3秒”添加到该值上,并在继续之前等待时间到达此值。这显然不起作用,因为循环不断更新当前时间。

if (fuel_stop_left() || fuel_stop_right()) {
   fuelRemaining = 10000;
   acceleration = 0;
}

2 个答案:

答案 0 :(得分:1)

clock_t begin;
double time_spent;
unsigned int i;

/* Mark beginning time */
begin = clock();
for (i=0;1;i++)
    {
    printf("hello\n");
    /* Get CPU time since loop started */
    time_spent = (double)(clock() - begin) / CLOCKS_PER_SEC;
    if (time_spent>=3.0)
        break;
    }

这段代码应该可以帮助您解决问题。不要忘记在代码开头#include time.h。

答案 1 :(得分:0)

例如,您可以将计时器设置为100毫秒。然后你需要使用一个变量来计算三秒并设置一个标志。在main()检查该标志的状态并执行您想要执行的操作,然后清除该标记。

这是一个简单的想法:

unsigned int cnt = 0;
bool isThreeSecs = false;

// Set this interrupt to 100ms
void myTimerInterrupt()
{
  cnt++;
  if (cnt == 30) // 100ms * 30 = 3 secs
  {
    isThreeSecs = true; // Set your flag here
    cnt = 0; // Clear the cnt variable for next use
  }
}

int main()
{
  // Some stuff
  if (isCarStopped()) // Check if the car has stopped
  {
    // Start your timer here and check your flag
    if (isThreeSecs)
    {
      letMeGo();
      isThreeSecs = false; // Clear the flag
    }
  }
}

实施可能因您的算法而异。例如,您可能希望在while的{​​{1}}检查周围使用isThreeSecs循环,以防止执行任何其他操作。我只想给你一个想法。