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