我是工作在一个NXT乐高头脑风暴机器人,我正在建立线跟随机器人与单反射光传感器,我正在编程的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 ms的延迟后朝逆时针方向移动。
我的代码有什么问题?
在这个间隔之后,我怎样才能停止电机,在这个间隔之后,电机应该向另一个方向移动,寻找直线,然后它就一定会找到一条线。
谢谢!
发布于 2013-11-05 01:40:11
我看到了一些东西,
祝好运
发布于 2013-11-05 01:23:20
一种解决方案是将while(1)循环中的所有while语句更改为if语句。
例如,在您的上一次while语句中,当机器人松开黑线时,您的机器人将按时钟方向旋转,然后逆时针旋转200 of,每个方向为,而不考虑从传感器读取的新值的。这是因为最后一个while语句将在更新()之前先完成它的执行。
https://stackoverflow.com/questions/19780290
复制相似问题