1602的温湿度程序
- #include <LiquidCrystal.h>
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- int temp;//温度
- int humi;//湿度
- int tol;//校对码
- int j;
- unsigned int loopCnt;
- int chr[40] = {0};//创建数字数组,用来存放40个bit
- unsigned long time;
- #define pin 7
- int Aout=A0 ;//MQ-135 AO 接 Arduino Uno A0
- int temp1 = 0; //临时变量,存储A0读取的数据
- void setup() {
- Serial.begin(9600);//定义波特率
- pinMode(A0, INPUT);//定义A0为INPUT模式
- lcd.begin(16, 2);
- }
-
- void loop() {
- bgn:
- delay(2000);
- //设置2号接口模式为:输出
- //输出低电平20ms(>18ms)
- //输出高电平40μs
- pinMode(pin,OUTPUT);
- digitalWrite(pin,LOW);
- delay(20);
- digitalWrite(pin,HIGH);
- delayMicroseconds(40);
- digitalWrite(pin,LOW);
- //设置2号接口模式:输入
- pinMode(pin,INPUT);
- //高电平响应信号
- loopCnt=10000;
- while(digitalRead(pin) != HIGH)
- {
- if(loopCnt-- == 0)
- {
- //如果长时间不返回高电平,输出个提示,重头开始。
- Serial.println("HIGH");
- goto bgn;
- }
- }
- //低电平响应信号
- loopCnt=30000;
- while(digitalRead(pin) != LOW)
- {
- if(loopCnt-- == 0)
- {
- //如果长时间不返回低电平,输出个提示,重头开始。
- Serial.println("LOW");
- goto bgn;
- }
- }
- //开始读取bit1-40的数值
- for(int i=0;i<40;i++)
- {
- while(digitalRead(pin) == LOW)
- {}
- //当出现高电平时,记下时间“time”
- time = micros();
- while(digitalRead(pin) == HIGH)
- {}
- //当出现低电平,记下时间,再减去刚才储存的time
- //得出的值若大于50μs,则为‘1’,否则为‘0’
- //并储存到数组里去
- if (micros() - time >50)
- {
- chr[i]=1;
- }
- else{
- chr[i]=0;
- }
- }
-
- //湿度,8位的bit,转换为数值
- humi=chr[0]*128+chr[1]*64+chr[2]*32+chr[3]*16+chr[4]*8+chr[5]*4+chr[6]*2+chr[7];
-
- //温度,8位的bit,转换为数值
- temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23];
- //校对码,8位的bit,转换为数值
- tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39];
- //输出:温度、湿度、校对码
- lcd.clear ();
- lcd.setCursor(0,0);
- lcd.print("temp:");
- lcd.print(temp);
- lcd.print((char) 0xDF);
- lcd.print("C");
- lcd.setCursor(0,1);
- lcd.print("humidity:");
- lcd.print(humi);
- lcd.print("%");
- delay (5000);
-
-
-
- temp1 = analogRead(Aout); //读取A0的模拟数据
-
- if (temp<500 )
- {
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("status:normal");
- lcd.setCursor(0,1);
- lcd.print("potency:");
- lcd.print(temp1);
-
- }
- if (temp1>500)
- {
-
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整代码下载:
1602 DTH11 MQ-5.doc
(19 KB, 下载次数: 102)
|