C Robotics中的随机整数问题

Problem with Random Integer in C Robotics

好吧,基本上,我想让我的机器人向前走,直到它检测到墙壁,然后倒退,然后转向随机方向。问题是,它只是右转。如果有人可以帮助解决这个问题,我将非常感激,因为我已经花了大约两天的时间,甚至我的老师也不知道它出了什么问题。它更像是机器人技术,而不仅仅是代码,但您可以忽略 motor/servo 行话。谢谢!

#include <PRIZM.h> // include PRIZM library
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define RAND_MAX 1
PRIZM prizm;            // instantiate a PRIZM object “prizm” so we can use its functions
    
void setup() {
    
  prizm.PrizmBegin();   //initialize PRIZM
  prizm.setServoSpeed(1,50);
  prizm.setMotorInvert(1,1);      // invert the direction of DC Motor 1
  // to harmonize the direction of
  // opposite facing drive motors
}
    
void loop() {
  int x;
  x = 1;
  int r;
  while((prizm.readSonicSensorCM(3) > 50)&&(x == 1))
    {
      prizm.setMotorPowers(40,40);    // if distance greater than 25cm, do this
      prizm.setServoPosition(1,146.75);
      prizm.setServoPosition(2,55.5);
      r = rand();
        
    }
  if((prizm.readSonicSensorCM(3) <= 50)||(x == 0))
    {
      x--;
      prizm.setServoPosition(1, 54.5);
      prizm.setServoPosition(2,145.25);
      prizm.setMotorPowers(0,0);
      delay(250);
      prizm.setMotorPowers(-30,-30);   
      delay(750);
      prizm.setMotorPowers(0,0);
      delay(300);
      if (r == 0) {
        prizm.setMotorPowers(-50,50);
        delay(1100);
      }
      else {
        prizm.setMotorPowers(50,-50);
        delay(1100);
      }
      prizm.setMotorPowers(0,0);
      delay(200);
      x++;
    }   
}

请注意,您对 RAND_MAX 的重新定义对 rand() 函数的输出没有影响。这不是函数的参数,而是一个常量,告诉你输出的最大值是多少。

if (r == 0) 中获得 50% 概率的最佳方法是,如果 r 是偶数,则选择一侧,如果是奇数,则选择另一侧:

if ((r % 2) == 0) {
  prizm.setMotorPowers(-50,50);
  delay(1100);
 }
 else {
   prizm.setMotorPowers(50,-50);
   delay(1100);
 }