0

我无法让我的机器人使用 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);
}
}
}
4

1 回答 1

1

这个程序的问题是你真的只能从超声波传感器读取一次。以下是运行程序时发生的情况:

  1. 创建变量Ultrasonic,并将传感器值分配给它。
  2. 程序检查超声波传感器的值。
  3. 该程序根据读取的超声波传感器执行某些操作。
  4. 该程序根据读取的超声波传感器执行某些操作。

...

要解决这个问题,您需要做的就是将超声波传感器的读数移动到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.

于 2014-02-27T03:33:22.383 回答