2013-11-05 64 views
0

我正在NXT lego智力风暴机器人上工作,并且我正在用单反射光传感器构建线性跟随器机器人,并使用C语言编程。电机通过C控制

传感器将原始模拟值的数字值与范围从0 - 1023

我不得不代码行是黑色然后电机将向前移动,并且如果不存在线(白基地),然后停下来,如果有灰色(在白线和黑线之间),然后稍微向右移动,然后以不同方式向左移动以找到丢失的黑线。

因此,代码是像

While (1) 
{ 
a=ecrobot_get_light_sensor(port_led); //storing the A/D converted value in variable 

while (a<300) // White area 
{ 
ecrobot_status_monitor("White Area"); 
nxt_motor_set_speed(port_motor_l, 0, 1); // left motor turns off 
nxt_motor_set_speed(port_motor_r, 0, 1); // right motor turns off 
} 
while (a>=600) // Black Line 
{ 
ecrobot_status_monitor("Black Area"); 
nxt_motor_set_speed(port_motor_l, 100, 1); // left motor turns on 
nxt_motor_set_speed(port_motor_r, 100, 1); // right motor turns on 
} 

while (a>=300 || a<600) // Robot loosing the black line 
{ 
ecrobot_status_monitor("grey Area"); 
nxt_motor_set_speed(port_motor_l, 50, 1); // left motor move forward 
nxt_motor_set_speed(port_motor_r, -50, 1); // right motor move backward 

delay_ms(200) 
nxt_motor_set_speed(port_motor_l, -50, 1); // left motor move backward 
nxt_motor_set_speed(port_motor_r, 50, 1); // right motor move forward 
delay_ms(200) 

} 

问题是,如果机器人失去线再启动而无需停止并朝后200毫秒延迟的逆时针移动顺时针移动。

我的代码有什么问题?

我怎样才能停止电机此区间和电机后,搜索线的这种间隔后在其他方向应移动,然后它一定会找到一个线

谢谢!

回答

0

我看到一对夫妇的事情,

  • 一些分号失踪。我相信你的真实代码不是这样,因为它甚至不会编译。在你的语句中也尝试并有正确的括号(更好的做法:-)

  • 你还需要在循环中重新读取传感器以避免死锁!!!

  • 同样如上所述,在大while循环中使用if/else if语句。

  • 您可以添加一些阈值,使之平滑:-)

好运

+0

多亏了你们俩,我改变了,而循环到如果条件下,现在的问题是,如果传感器在黑线上,有时它会检测到它,否则它只是顺时针旋转200毫秒,逆时针旋转200毫秒,有没有什么办法可以在移动过程中连续检测线条,并且如果发现黑线则移动呢? 谢谢 – user2828488

1

一种解决方案是将while(1)循环内的while语句更改为if语句。例如,在上一条while语句中,当机器人松开黑线时,机器人将按顺时针方向旋转,然后在每个方向逆时针旋转200ms,无论是多少,不管是从传感器读取的新值。这是因为最后一条语句将在您的a更新之前首先完成执行。