我无法让我的机器人用RobotC控制我的Mindstorms NXT机器人。我希望我的机器人能够在桌子上向前移动,当到达终点时,面向下的超声波传感器将通过查看地面的距离来确定它是否在边缘。当超声波传感器发现它在边缘时,机器人将从边缘向后移动,转向,然后向另一个方向移动。
这是我的代码:
#pragma config(Sensor, S1, , sensorSONAR)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
task main()
{
int Ultrasonic;
Ultrasonic = SensorValue[S1];
while (true)
{
if (Ultrasonic >10)
{
motor[motorB] = -100;
motor[motorC] = -100;
wait1Msec(2000);
motor[motorB] = 100;
wait1Msec(2000);
}
if (Ultrasonic <= 10)
{
motor[motorB] = 50;
motor[motorC] = 50;
wait1Msec(5000);
}
}
}
答案 0 :(得分:1)
这个程序的问题是你真的只能从超声波传感器读取一次。以下是运行程序时会发生的情况:
Ultrasonic
,并为其分配传感器值。...
要解决此问题,您需要做的就是将超声波传感器的读数移动到while
循环中,以便NXT不断检查传感器的值。以下是修改后的版本:
task main()
{
int Ultrasonic;
while (true)
{
Ultrasonic = SensorValue[S1];
if (Ultrasonic > 10)
{
// ... Do stuff here...
}
if (Ultrasonic <= 10)
{
// ... Do more stuff here...
}
}
}
事实上,通过使用“if ... else ...”语句组合检查超声波传感器的值,您可以使此代码更“干净”。这会检查一个值,然后根据该值是否为真做出决定 - 否则。只需将行if (Ultrasonic <= 10)
替换为else
。