我创建了一种算法来遵循黑线。但是我有一个问题,那就是十字路口的机器人总是会完成前进的道路。但是我希望他走到左边。我的意思是,他始终把前进放在首位,而不是探索迷宫的所有方式
了解所有道路仅是弯道或直路
我将传感器00100传感器[0]传感器[1]传感器[2]传感器[3]传感器[4]放在黑线的中间。
read_sensor_values();
// i use 5 sensor 0 to 4 in table sensor[];
if(sensor[2]==HIGH){
if(sensor[1]==LOW && sensor[3]==LOW){
go_Advance(); //straight
set_Motorspeed(M_SPEED1,M_SPEED1);
}
else if(sensor[1]==HIGH && sensor[3]==LOW){
go_Left(); //Turn left
set_Motorspeed(0,M_SPEED1);
}
else if(sensor[1]==LOW && sensor[3]==HIGH){
go_Right(); //Turn right
set_Motorspeed(M_SPEED1,0);
}
}
else {if(sensor[2]==LOW){
if(sensor[1]==HIGH && sensor[3]==LOW){ //Turn left
go_Left();
set_Motorspeed(0,M_SPEED1);
}
else if(sensor[1]==LOW && sensor[3]==HIGH){ //Turn right
go_Right();
set_Motorspeed(M_SPEED1,0);
}
}
else {
go_Back();
set_Motorspeed(M_SPEED1,M_SPEED1);
}
if(sensor[1]==HIGH){
if(sensor[0]==HIGH && sensor[2]==LOW){
go_Left();
set_Motorspeed(0,M_SPEED2);
}
else{ //Turn left
go_Left();
set_Motorspeed(0,M_SPEED1);
}
}
if(sensor[3]==HIGH){
if(sensor[2]==LOW && sensor[4]==HIGH){
go_Right();
set_Motorspeed(M_SPEED2,0);
}
else{
go_Right();
set_Motorspeed(M_SPEED2,0);
}
}
}
}
答案 0 :(得分:1)
您的一些情况彼此矛盾。在每种情况下检查每个传感器的状态。
如果我没记错的话,在十字路口,状态将是11111,这在任何地方都没有明确处理。 因此,当前在十字路口,'if(sensor [1] == HIGH)'块内的'else'部分和'if(sensor [3] == HIGH)'块内的'else'部分都将被执行。可能这将导致两个电动机都运行并向前移动。到十字路口过去时,它返回到00100状态并继续前进。
第一个if语句具有2个else语句,如果这是实际代码,则该语句不正确。假设第二个“ else”是“ else if”,则最终的“ else”将永远不会被执行,因为如果是“ sensor [2] == HIGH”,则永远为“ sensor [2] == LOW”。