首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电机通过C

电机通过C
EN

Stack Overflow用户
提问于 2013-11-05 01:08:00
回答 2查看 254关注 0票数 0

我是工作在一个NXT乐高头脑风暴机器人,我正在建立线跟随机器人与单反射光传感器,我正在编程的C语言。

传感器将原始模拟值转换为0- 1023范围内的数字值.

我必须编码,这条线是黑色的,然后电机会向前移动,如果没有线(白色底座),然后停止,如果有灰色(在白线和黑线之间),然后稍微向右移动,然后左转,以找到丢失的黑线。

所以代码就像

代码语言:javascript
复制
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的延迟后朝逆时针方向移动。

我的代码有什么问题?

在这个间隔之后,我怎样才能停止电机,在这个间隔之后,电机应该向另一个方向移动,寻找直线,然后它就一定会找到一条线。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-05 01:40:11

我看到了一些东西,

  • 一些分号不见了。我相信,在您的实际代码中,情况并非如此,因为它甚至不会编译。在你的陈述中也要有适当的括号(最好练习:-)
  • 您还需要在循环中重新读取传感器,以避免死锁!
  • 同样,在一个大while循环中使用if/else语句。
  • 您可以添加一些阈值以使其更平滑:-)

祝好运

票数 0
EN

Stack Overflow用户

发布于 2013-11-05 01:23:20

一种解决方案是将while(1)循环中的所有while语句更改为if语句。

例如,在您的上一次while语句中,当机器人松开黑线时,您的机器人将按时钟方向旋转,然后逆时针旋转200 of,每个方向为,而不考虑从传感器读取的新值的。这是因为最后一个while语句将在更新()之前先完成它的执行。

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

https://stackoverflow.com/questions/19780290

复制
相关文章

相似问题

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