我创建了一个遵循黑线的算法。但我有一个问题,它在十字路口机器人总是完成它前进的道路。但我希望他向左走。我的意思是,他总是优先考虑前进,而不是探索迷宫的所有方式
知道所有道路都是拐角或笔直的道路
我将传感器 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);
}
}
}
}
-
你的一些条件是相互矛盾的。检查每个传感器在每种条件下的状态。
-
如果我没记错的话,在十字路口,状态将是 11111,这在任何地方都没有明确处理。因此,目前处于十字路口,"if(sensor[1]==HIGH("块中的"else"部分和"if(sensor[3]==HIGH("块中的"else"部分都将被执行。这可能会导致两个电机都运行并向前移动。当十字路口结束时,它又回到00100状态并继续前进。
-
第一个 if 语句有 2 个 else 语句,如果这是实际代码,则不正确。假设第二个"else"是"else if",最后一个"else"将永远不会被执行,因为"sensor[2]==LOW"将始终为真,如果为假,则为"sensor[2]==HIGH"。