標(biāo)題: Arduino超聲波控制主次道路紅綠燈設(shè)計 含源碼 [打印本頁]
作者: Michael1083 時間: 2019-4-9 00:38
標(biāo)題: Arduino超聲波控制主次道路紅綠燈設(shè)計 含源碼
最近設(shè)計了一個超聲波控制主次道路紅綠燈而我自己是初次接觸arduino,于是可能有些小問題。
自己原創(chuàng)想的,如有問題歡迎指教
float cm;
float duration;
int red1 =10; //定義針腳號
int green1 =9;
int yellow1=7;
int red2 =6;
int green2 =5;
int yellow2=4;
#define Trig 2 // Trigger Pin and Echo Pin of UltrasonicSensor
#define Echo 3
int ledgreen1State= HIGH; //定義綠燈1和紅燈2為點亮狀態(tài)
int ledred2State= HIGH;
unsigned long previousMillis= 0;
const long interval = 1000; //定義常量表示固定的時間間隔,為1秒
void setup()
{
Serial.begin(9600); //Starting Serial Terminal
pinMode(Trig, OUTPUT); //將Trig引腳設(shè)置為輸出
pinMode(Echo, INPUT); //將Echo引腳設(shè)置為輸入
pinMode(red1,OUTPUT); //設(shè)置LED針腳類型為狀態(tài)輸出針腳。
pinMode(green1,OUTPUT);
pinMode(yellow1,OUTPUT);
pinMode(red2,OUTPUT);
pinMode(green2,OUTPUT);
pinMode(yellow2,OUTPUT);
}
void loop()
{
digitalWrite(red1, LOW); //主道路的綠燈一直亮,副道路的紅燈一直亮。
digitalWrite(green1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(red2, HIGH);
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(Trig, LOW); //發(fā)送一個短的低電平脈沖,以確保得到一個平靜//的高脈沖
delayMicroseconds(2);
digitalWrite(Trig, HIGH); //發(fā)送一個10us的高脈沖來觸發(fā)傳感器
delayMicroseconds(10);
digitalWrite(Trig, LOW);
duration=float(pulseIn(Echo, HIGH)); //讀取從發(fā)送信號到接收回波的時間
cm= (duration/2)/29.1; //距離=(傳播時間/2)*聲速,聲速=1/29.1cm/us
Serial.print("Distance ="); //在串口監(jiān)視器中打出字符串“Distance=”,cm和//“cm”并換行
Serial.print(cm);
Serial.println("cm");
delay(100);
if(cm>=100)
{
return;
}
if(66<=cm && cm<100)
{
digitalWrite(red1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
unsigned long currentMillis = millis(); //記錄程序執(zhí)行到此處的時間;
if(currentMillis-previousMillis>= interval) //如果大于等于internal數(shù)值,則執(zhí)行//內(nèi)部操作
//否則進(jìn)入下一次loop操作
{
previousMillis = currentMillis; //更新previousMillis變量數(shù)值
if(ledgreen1State==HIGH and ledred2State==HIGH) //如果燈為亮的,變?yōu)榘档摹?/如果燈為滅的,變?yōu)榱恋摹?/div>
{
ledgreen1State=LOW;
ledred2State=LOW;
}
else
{
ledgreen1State=HIGH;
ledred2State=HIGH;
}
digitalWrite(green1,ledgreen1State); //將LED狀態(tài)變量的更改結(jié)果發(fā)送//LED燈元器件。
digitalWrite(red2,ledred2State);
}
}
else if (33<=cm && cm<66)
{
digitalWrite(red1, LOW);
digitalWrite(green1, LOW);
digitalWrite(yellow1, HIGH);
digitalWrite(red2, LOW);
digitalWrite(green2, LOW);
digitalWrite(yellow1, HIGH);
}
else if (cm<33)
{
digitalWrite(green1, LOW);
digitalWrite(yellow1,LOW);
digitalWrite(red1,HIGH);
digitalWrite(red2, LOW);
digitalWrite(green2, HIGH);
digitalWrite(yellow2, LOW);
}
}
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |