最近設計了一個超聲波控制主次道路紅綠燈而我自己是初次接觸arduino,于是可能有些小問題。
自己原創想的,如有問題歡迎指教
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為點亮狀態 int ledred2State= HIGH; unsigned long previousMillis= 0; const long interval = 1000; //定義常量表示固定的時間間隔,為1秒
void setup() { Serial.begin(9600); //Starting Serial Terminal pinMode(Trig, OUTPUT); //將Trig引腳設置為輸出 pinMode(Echo, INPUT); //將Echo引腳設置為輸入 pinMode(red1,OUTPUT); //設置LED針腳類型為狀態輸出針腳。 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); //發送一個短的低電平脈沖,以確保得到一個平靜//的高脈沖 delayMicroseconds(2); digitalWrite(Trig, HIGH); //發送一個10us的高脈沖來觸發傳感器 delayMicroseconds(10); digitalWrite(Trig, LOW); duration=float(pulseIn(Echo, HIGH)); //讀取從發送信號到接收回波的時間 cm= (duration/2)/29.1; //距離=(傳播時間/2)*聲速,聲速=1/29.1cm/us Serial.print("Distance ="); //在串口監視器中打出字符串“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(); //記錄程序執行到此處的時間; if(currentMillis-previousMillis>= interval) //如果大于等于internal數值,則執行//內部操作 //否則進入下一次loop操作 { previousMillis = currentMillis; //更新previousMillis變量數值 if(ledgreen1State==HIGH and ledred2State==HIGH) //如果燈為亮的,變為暗的。//如果燈為滅的,變為亮的。 { ledgreen1State=LOW; ledred2State=LOW; } else { ledgreen1State=HIGH; ledred2State=HIGH; } digitalWrite(green1,ledgreen1State); //將LED狀態變量的更改結果發送//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); } }
|