课后作业中,还碰到一个没法解释的现象,详情各位前辈指点。
具体现象:绿灯和红灯亮起时,串口监视器的数据刷新基本是500ms一次,但黄灯亮起时,串口监视器的刷新速率变为>1000ms一次。(目测)
不明白其中的原理。代码如下:
- //项目七 课后作业_温度报警+LED指示
- float sinVal;
- int toneVal;
- unsigned long tepTimer;
- int bee=8;
- int pinGreen=10;
- int pinYellow=11;
- int pinRed=12;
-
- void setup()
- {
- pinMode(bee,OUTPUT);
- pinMode(pinGreen,OUTPUT);
- pinMode(pinYellow,OUTPUT);
- pinMode(pinRed,OUTPUT);
- Serial.begin(9600); //设置波特率为9600 bps
- }
-
- void loop()
- {
- int val; //存LM35读到的数值
- double data; //存已转换的温度值
- val=analogRead(0); //LM35连到模拟口,并从模拟口读值
- data=(double)val*(5/10.24) ; //得到电压值,通过公式换成温度
-
- if(data>23 or data<10)
- {
- digitalWrite(pinRed,HIGH);
- digitalWrite(pinYellow,LOW);
- digitalWrite(pinGreen,LOW);
- beep(2);
- }
-
- if(data<=23 && data>=22)
- {
- digitalWrite(pinYellow,HIGH);
- digitalWrite(pinRed,LOW);
- digitalWrite(pinGreen,LOW);
- beep(10);
- }
- if(data<22)
- {
- noTone(8); //关闭蜂鸣器
- digitalWrite(pinGreen,HIGH);
- digitalWrite(pinRed,LOW);
- digitalWrite(pinYellow,LOW);
- }
-
- if(millis()-tepTimer>500)
- {
- tepTimer=millis();
- Serial.print("temperature:");
- Serial.print(data);
- Serial.println("C");
- }
- }
- void beep(int delayTime)
- {
- for(int x=0; x<180; x++)
- {
- //将sin函数角度转化为弧度
- sinVal = (sin(x*(3.1412/180)));
- //用sin函数值产生声音的频率
- toneVal = 2000+(int(sinVal*1000));
- //给引脚8一个
- tone(8, toneVal);
- delay(delayTime);
- }
- }
复制代码
|