再多加個LED七段顯示器來顯示距離變化吧!!
超聲波模組HC-SR04。
市面上有賣一種收發合一的版本,但這種收發分開的版本比較便宜。
再來是LED七段顯示器,加了一顆74HC595,這暫存器可減少過多連接處理器的線路。
但線路看起來還是很多啊,
LED七段顯示器每一段記得加1個330歐姆的電阻來限流,不然用久了會罷工。
我寫成10個階段(0~9),雷達越遠顯示器的數字越大。
我還加了個蜂鳴器,這樣更像倒車雷達了。
程式如下:
const int trigPin=10;
const int echoPin=9;
const int mike=5;
unsigned long data;
const byte dataPin = 2;
const byte latchPin = 3;
const byte clockPin = 4;
//74HC595的數位PIN宣告。
const byte num[10]={
B01111110,
B00110000,
B01101101,
B01111001,
B00110011,
B01011011,
B01011111,
B01110000,
B01111111,
B01110011
};
//LED顯示器的數字陣列宣告。
void LED7(int N){
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,LSBFIRST,N);
digitalWrite(latchPin,HIGH);
delay(10);
//控制七段LED的函式。
}
unsigned long ping(){
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
return pulseIn(echoPin,HIGH);
//超聲波回傳變數的函式。
}
void setup(){
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
pinMode(mike,OUTPUT);
pinMode(dataPin,OUTPUT);
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
Serial.begin(9600);
}
void loop(){
data=ping()/58;
//算出距離值
int A=abs(data/10);
//算出分類帽變數。
switch(A)
{
case 1:
tone(5, 1047,100);
LED7(num[1]);
break;
case 2:
tone(5, 1047,100);
LED7(num[2]);
break;
case 3:
tone(5, 1047,100);
LED7(num[3]);
break;
case 4:
tone(5, 1047,100);
LED7(num[4]);
break;
case 5:
tone(5, 1047,100);
LED7(num[5]);
break;
case 6:
tone(5, 1047,100);
LED7(num[6]);
break;
case 7:
tone(5, 1047,100);
LED7(num[7]);
break;
case 8:
tone(5, 1047,100);
LED7(num[8]);
break;
case 9:
tone(5, 1047,100);
LED7(num[9]);
break;
case 0:
tone(5, 1047,100);
LED7(num[0]);
break;
default:
noTone(5);
//分類帽定義。
}
Serial.print("Distance ");
Serial.print(data);
Serial.print("cm");
Serial.println();
//序列阜監控。
delay(300);
}
感覺不像市面上的倒車雷達來的快和準,可能是我程式Delay那邊沒有寫好,
但是有一定的功能了,差不多就好。
沒有留言:
張貼留言