gpt4 book ai didi

c - 通过C控制电机

转载 作者:行者123 更新时间:2023-11-30 15:43:42 25 4
gpt4 key购买 nike

我正在开发 NXT 乐高头脑 Storm 机器人,并且正在构建带有单个反射光传感器的巡线机器人,并且正在使用 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 毫秒后向逆时针方向移动。

我的代码有什么问题?

我怎样才能在这个间隔之后停止电机,并且电机应该在这个间隔之后向其他方向移动以寻找线,然后它一定会找到一条线

谢谢!

最佳答案

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

例如,在最后一个 while 语句中,当机器人松开黑线时,您的机器人将顺时针旋转,然后在每个方向逆时针旋转 200 毫秒,无论读取的新值如何你的传感器。这是因为最后一个 while 语句将在您的 a 更新之前首先完成其执行。

关于c - 通过C控制电机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com