最近设计了一个超声波控制主次道路红绿灯而我自己是初次接触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); } }
|