c - 随机开关

扫码查看

我如何为该代码创建一个随机循环,以使它不会一直执行相同的情况,而且这是一个被主函数调用的函数。希望这会有所帮助,我只是想使用rand()函数。

int escapeRoom()
{
    alt_u16 wheels;
    alt_u16 Bumper;
    int i;

        Bumper = IORD_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE);
        Bumper = rand() & (LEFT_FRONT_BUMPER | RIGHT_FRONT_BUMPER);

       switch(Bumper)
        {
            case BOTH_BUMPERS:
            wheels = BACKWARDS;
            IOWR_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE, wheels);
            break;

            case RIGHT_FRONT_BUMPER:
            wheels = RIGHT_BACKWARDS;
            IOWR_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE, wheels);
            break;

            case LEFT_FRONT_BUMPER:
            wheels = LEFT_BACKWARDS;
            IOWR_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE, wheels);
            break;

            case NO_BUMPERS:
            wheels = FORWARD;
            IOWR_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE, wheels);
            break;

            for (i=1 ; i<5 ; i++) ;
            {
            IOWR_ALTERA_AVALON_PIO_DATA(EXPANSION_JP1_BASE, !wheels);
            }
            break;

        }
}

最佳答案

您需要使Bumper是随机的。例如使用

Bumper = rand() & (LEFT_FRONT_BUMPER | RIGHT_FRONT_BUMPER);


该特定语句是否适合您取决于您​​所拥有的
心神。例如,我不知道为什么要从I / O端口进行初始读取。
如果需要这些位,则需要将它们保留在除
你的随机保险杠。

更新:rand()每次都可以给出相同的伪随机序列。这对于机器人与不确定的环境进行交互可能不错;但在大多数应用中,您需要随机种子。简单的选择是只调用srand(some unpredictable value such as sensor data or a high-resolution timer)。我一直以为您不需要高质量的随机性。

关于c - 随机开关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22761970/

10-11 23:07
查看更多