循跡辨識模組TCRT5000,上面有一顆LED,觸發才會亮,基本原理是紅外線反射。
安裝位置愈低愈好,我一開始安裝太高反應很遲鈍。
意外的強,還以為這東西會有跟超聲波一樣反應遲鈍的問題。
程式如下:
const int SRight = 2;
const int SLeft = 3;
//右、左輪感測器宣告。
const int motorIn1 = 10;
const int motorIn2 = 9;
const int motorIn3 = 8;
const int motorIn4 = 7;
char val;
int SRR;
int SLL;
byte byteSensorStatus=0;
void setup()
{
pinMode(SLeft, INPUT);
pinMode(SRight, INPUT);
pinMode(motorIn1, OUTPUT);
pinMode(motorIn2, OUTPUT);
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
}
void loop(){
byteSensorStatus = 0;
SRR = digitalRead(SRight);
if(SRR == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 1));
SLL = digitalRead(SLeft);
if(SLL == 1)
byteSensorStatus = (byteSensorStatus | 0x01);
//辨識循跡狀態的公式。
switch(byteSensorStatus)
{
case 0:
motorstop();
break;
//0、0(黑、黑,停止)。
case 1:
left();
break;
//1、0(白、黑,左轉)。
case 2:
right();
break;
//0、1(黑、白,右轉)。
case 3:
forward() ;
break;
//1、1(白、白,前進)。
}
}
void motorstop()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
}
void forward()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
}
void backward()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
}
void right()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
}
void left()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
}
你好
回覆刪除有人嗎
刪除。
。。。
。
回覆刪除。。
。。。
。。。。
。。。。。
。。。。。。
。。。。。。。
。。。。。。。。
。。。。。。。。。
。
回覆刪除。。
。。。
。。。。
。。。。。