1

我正在为机器人编程,不幸的是在它的自主模式下我遇到了一些问题。当按下按钮时,我需要将整数设置为 1,但为了让程序识别按钮,它必须处于 while 循环中。正如您可以想象的那样,程序以无限循环结束,整数值最终接近 4,000。

 task autonomous()
   {
    while(true)
        {
    if(SensorValue[positionSelectButton] == 1)
        {
            positionSelect = positionSelect + 1;
            wait1Msec(0350);
        }
        }
   }

我已经设法通过等待来获得价值,但我不想这样做。还有其他方法可以解决这个问题吗?

4

4 回答 4

1

假设SensorValue来自与while循环异步的物理组件,并且是一个按钮(即不是切换按钮)

task autonomous()
{
    while(true)
    {
        // check whether 
        if(current_time >= next_detect_time && SensorValue[positionSelectButton] == 1)
        {
            positionSelect = positionSelect + 1;

            // no waiting here
            next_detect_time = current_time + 0350;
        }

        // carry on to other tasks
        if(enemy_is_near)
        {
            fight();
        }

        // current_time 
        current_time = built_in_now()
    }
}

通过某些内置函数或递增整数获取当前时间,并在达到最大值时回绕。

或者,如果您处于另一种情况:

task autonomous()
{
    while(true)
    {
        // check whether the flag allows incrementing
        if(should_detect && SensorValue[positionSelectButton] == 1)
        {
            positionSelect = positionSelect + 1;

            // no waiting here
            should_detect = false;
        }

        // carry on to other tasks
        if(enemy_is_near)
        {
            if(fight() == LOSING)
               should_detect = true;
        }
    }
}
于 2013-01-25T03:58:48.627 回答
0

尝试记住按钮的当前位置,并且仅在其状态从关闭变为打开时才执行操作。

根据硬件的不同,您可能还会收到一个信号,就好像它在一毫秒内来回翻转了几次一样。如果这是一个问题,您可能还希望存储上次激活按钮的时间戳,然后在之后的一个短窗口中忽略重复事件。

于 2013-01-25T02:36:25.947 回答
0

你的问题有点含糊
,我不确定你为什么需要这个变量来增加以及事情是如何工作的......但我会尝试一下。解释一下机器人移动的工作方式......我们会能够提供更多帮助。

task autonomous()
{
    int buttonPressed=0;
    while(true)
    {
        if(SensorValue[positionSelectButton] == 1)
        {
            positionSelect = positionSelect +1;
            buttonPressed=1;
        }
        else{
            buttonPressed = 0;
        }


        //use your variables here 
        if( buttonPressed  == 1){
            //Move robot front a little
        }

    }
}

一般的想法是:
首先你检测所有按下的按钮,然后你根据它们做事
所有这些都进入你的while循环......这将(并且应该)永远运行(至少只要你的机器人还活着:))
希望这可以帮助!

于 2013-01-25T02:57:55.827 回答
0

您可以将按钮连接到中断,然后在中断处理程序中进行必要的更改。

这可能不是最好的方法,但它会是最简单的。


来自Vex 机器人目录

(12) 可用作中断的快速数字 I/O 端口

因此,您使用的 Vex 微控制器很可能会支持中断。

于 2013-01-25T03:00:20.313 回答