无法使用RobotC编程MindstormsNXT

时间:2014-01-18 23:05:38

标签: robot nxt lego mindstorms

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

1 个答案:

答案 0 :(得分:1)

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

  1. 创建变量Ultrasonic,并为其分配传感器值。
  2. 程序检查超声波传感器的值。
  3. 程序根据读取的超声波传感器做了一些事情。
  4. 程序根据读取的超声波传感器做了一些事情。
  5. ...

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