#random
#Случайный
Вопрос:
Итак, в принципе, я пытаюсь заставить своего робота двигаться вперед, пока он не обнаружит стену, затем повернуть вспять, а затем повернуть в случайном направлении. Проблема в том, что он поворачивает только направо. Если кто-нибудь сможет помочь в этом, я буду ОЧЕНЬ признателен, потому что я потратил на это около двух дней, и даже мой учитель не может понять, что с этим не так. Это больше похоже на робототехнику, а не просто на код, но вы, вероятно, можете просто игнорировать жаргон двигателя/сервопривода. Спасибо!
#include lt;PRIZM.hgt; // include PRIZM library #include lt;stdio.hgt; #include lt;stdlib.hgt; #include lt;time.hgt; #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) gt; 50)amp;amp;(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) lt;= 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 ; } }
Комментарии:
1. Любопытно, при чем тут комментарий
// if distance greater than 25cm, do this
?prizm.readSonicSensorCM(3) gt; 50
Это50
то же самое, что 25 см ?2. Я изменю его сейчас, но я использовал часть шаблона с комментариями, так что эта часть не точна
Ответ №1:
Обратите внимание, что ваше переопределение RAND_MAX
не влияет на вывод rand()
функции. Это не параметр для функции, а константа, указывающая вам, каково максимальное значение выходных данных.
Лучший способ получить 50% вероятности в вашем if (r == 0)
случае-это перейти на одну сторону , если r
она четная, на другую, если она нечетная:
if ((r % 2) == 0) { prizm.setMotorPowers(-50,50); delay(1100); } else { prizm.setMotorPowers(50,-50); delay(1100); }
Комментарии:
1. Я понимаю, что вы имели в виду, и мне не пришло в голову использовать модуляцию. Спасибо