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