int pin[3] = {A0, A4, A3}; //從左至右對應
int velocity = 210; //定義速率
byte value;
byte value_his = 0; //記錄上一次的傳感器值
void setup()
{
pinMode( 5 , OUTPUT);//右
pinMode( 6 , OUTPUT);
pinMode( 9 , OUTPUT);
pinMode( 10 , OUTPUT);
}
void loop()
{
value = 0;
for(int i=0; i<3; i++)
{
value |= (digitalRead(pin[i]) << i);
}
if(value == 0x00)
{ //當傳感器都沒有觸發時默認為上一次的值
value = value_his;
}
switch (value)
{
case 0x07: //全部觸發
Forwards();
break;
case 0x06: //觸發右邊兩個
while(!digitalRead(pin[1])){ //通過while 循環使小車回到跑道中間
Right();
}
break;
case 0x04: //觸發右邊一個
while(!digitalRead(pin[1]))
{
Right();
}
break;
case 0x03: //觸發左邊兩個
while(!digitalRead(pin[1]))
{
Left();
}
break;
case 0x02: //觸發中間一個
Forwards();
break;
case 0x01: //觸發左邊一個
while(!digitalRead(pin[1]))
{
Left();
}
break;
}
value_his = value;
}
void Left()
{
analogWrite( 5 ,230);//左
analogWrite( 6 ,0 );
analogWrite( 9 ,240);
analogWrite( 10 , 0);
delay(1);
}
void Right()
{
analogWrite( 5 ,230);
analogWrite( 6 , 0 );
analogWrite( 9 ,220);
analogWrite( 10 ,0 );
delay(1);
}
void Forwards()
{
analogWrite( 5 ,240 );//左
analogWrite( 6 , 0 );
analogWrite( 9 ,220);
analogWrite( 10 ,0 );
delay(1);
}
void back()
{
analogWrite( 5 , 0 );
analogWrite( 6 ,230 );
analogWrite( 9 , 0 );
analogWrite( 10 ,255 );
delay(1);
}
|