先上程序
#include <LiquidCrystal.h>
#include <dht11.h>
LiquidCrystal lcd(12, 11,6, 5, 4, 3);
dht11 DHT11;
int IN1=13;
int IN2=2;
int speedpin=10;
const int TrigPin = 8;
const int EchoPin = 7;
int buzzer=A1;
int sum=0,i;
float cm;
int q;
float temperature = 0; //设置temperature为浮点变量
#define DHT11PIN 9
void setup()
{
pinMode(IN1,OUTPUT);//定义该接口为输出接口
pinMode(IN2,OUTPUT);
pinMode(speedpin,OUTPUT);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
pinMode(buzzer,OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
lcd.begin(16, 2);
lcd.clear();
delay(1000);
}
void loop()
{
lcd.clear();
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
int val;
val=analogRead(0);
lcd.setCursor(0, 1) ;
lcd.print("Gas:")+ lcd.print(val);
lcd.setCursor(0, 0); //设置光标位置为第1行第一个位置
lcd.print((float)DHT11.humidity, 2); //显示温度整数位
lcd.print("% "); //显示小数点
lcd.print( (float)DHT11.temperature-2, 2); //显示温度小数点后一位
lcd.print("oC"); //显示o符号
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor:OK ");
Serial.print("Humidity : ");
Serial.println((float)DHT11.humidity, 2);
Serial.println(" % ");
Serial.print("Temperature : ");
Serial.println((float)DHT11.temperature-2, 2);
Serial.println(" oC ");
for(i=9;i>0;i--)
{
sum+=cm;
}
if(sum>500)
{
lcd.setCursor(8, 1);
lcd.print("health");
}
else
{
lcd.setCursor(8, 1);
lcd.print("unhealth");
for(i=0;i<80;i++)
{
digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);
delay(1);
}
}
}
我要显示温湿度、空气质量和超声波测距。但是lcd在初始化后就显示乱码了??是什么原因?请指出并修改下。。如果我先输出其中两个比如温湿度、空气质量,那么显示正常,再将超声波插入单片机,显示也正常;但是如果三个一起接入单片机就会在初始化后就显示乱码。
什么情况?求指导!
|