首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RobotC编程MindstormsNXT时遇到问题

使用RobotC编程MindstormsNXT时遇到问题
EN

Stack Overflow用户
提问于 2014-01-19 07:05:38
回答 1查看 207关注 0票数 0

我无法让我的机器人用RobotC控制我的Mindstorms NXT机器人。我希望我的机器人能够在桌子上向前移动,当到达桌子尽头时,面朝下的超声波传感器将通过查看地面有多远来确定它是否在边缘。当超声波传感器发现它在边缘时,机器人会从边缘向后移动,转过身,然后朝另一条路走。

下面是我的代码:

代码语言:javascript
复制
#pragma config(Sensor, S1,     ,               sensorSONAR)
//*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);
}
}
}
EN

回答 1

Stack Overflow用户

发布于 2014-02-27 11:33:22

这个程序的问题是,你实际上只从超声波传感器读取一次。下面是当你运行你的程序时发生的事情:

  1. 创建变量Ultrasonic,并为其赋值。
  2. 程序检查超声波传感器的值。
  3. 程序根据读取的超声波传感器执行某些操作。
  4. 程序根据读取的超声波传感器执行某些操作。

..。

要解决这个问题,您需要做的就是将超声波传感器的读数移动到while循环中,以便NXT不断检查传感器的值。以下是修改后的版本:

代码语言:javascript
复制
task main()
{
    int Ultrasonic; 

    while (true)
    {
        Ultrasonic = SensorValue[S1];
        if (Ultrasonic > 10)
        {
            // ... Do stuff here...
        }
        if (Ultrasonic <= 10)
        {
            // ... Do more stuff here...
        }
    }
}

实际上,您可以通过使用"if... else...“来组合对超声波传感器的值的检查,从而使这段代码更加”干净“。语句。这将检查一个值,然后根据该值是否为真做出决定。只需用else替换if (Ultrasonic <= 10)行即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21211025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档