/************************************** **项目名:交通红绿灯** **作者:TTHHR** **日期:2015、12、03** **************************************/ int R=9,Y=10,G=11,ledBar=100,tempBar; /*R代表红灯引脚口,Y,G同意。ledBar是灯的亮度, tempBar是记录单片机开始运行时的R1的值。*/ unsigned long times=0,ended=0;//times是计数程序循环了多少次,ended是用来计录时间的变量 boolean runningg=true;//记录红绿灯是否在运行 char msg[2];//保存电脑端发来的数据 void setup() { for (int i=9;i<12;i++) pinMode(i,OUTPUT);//用循环来初始化引脚口 for (int i=9;i<12;i++)//第一个要求,每个灯各亮一秒 { digitalWrite(i,HIGH); delay(1000); digitalWrite(i,LOW); } Serial.begin(9600);//设置波特率 tempBar=analogRead(A5);//是记录单片机开始运行时的R1的值 } void loop() { if(Serial.available())//判断电脑有没有发送数据过来 { msg[0]=Serial.read();//先把'#'读取了,虽然没什么用 msg[1]=Serial.read();//再读取第二个字符 switch(msg[1])//对字符进行判断 { case'S':runningg=true;break;//如果是'S',runningg的值改为true case'T':runningg=false;break;//......... case'P':outInfo();break;//输出信息 default:Serial.print("bad code!!!!!"); } } if (runningg)//如果红绿灯在运行 { ledBar=ledBar+(analogRead(A5)-tempBar)*10;//led的亮度在原来基础上进行改变 if (ledBar>255)//防止led的亮度太大 ledBar=255; else if (ledBar<1)//防止led的亮度太small ledBar=0; unsigned long started=millis();//得到系统运行时间 rgyPlay();//进行红绿灯程序 ended=millis()-started;//再次得到系统运行的时间,减去上次得到的时间,就是rgyPlay()的运行时间 times++;// 程序循环的次数+1 } else//如果红绿灯不在运行,就暂停500毫秒 delay(500); } void rgyPlay() { analogWrite(R,ledBar);//红灯点亮 delay(2000); digitalWrite(R,LOW);//红灯熄灭 analogWrite(G,ledBar); delay(1000); digitalWrite(G,LOW); analogWrite(Y,ledBar); delay(100); digitalWrite(Y,LOW); } void outInfo() { Serial.print("time of green led on:");//绿灯亮的时长 Serial.print(times*1); Serial.println("s"); Serial.print("times of yello led on to off :");//黄灯闪烁的次数 Serial.println(times); Serial.print("every time of yello led on:");//黄灯每次闪烁的时长 Serial.print(100); Serial.println("ms"); Serial.print("time of red led on:");//红灯亮的时长 Serial.print(times*2); Serial.println("s"); Serial.print("the bar of red led:");//红灯亮的亮度 Serial.println(ledBar); Serial.print("every time of loop:");//每次循环的时长 Serial.print(ended); Serial.println("ms"); Serial.println("--------------------------------------------------------"); }