串口发送测距指令,通过SR-04测距,dht11测温,用温度算出音速,再根据音速算出距离,然后用1602显示出距离与湿温度
请看看有没有错误
# include <dht11.h>
#include <LiquidCrystal.h>
#define DHT11PIN 8
unsigned int EchoPin=6;//将Arduino的Pin6 连接至 HC-SR04 的Echo/RX
unsigned int TrigPin=7;//将Arduino的 Pin7 连接至 HC-SR04 的Trig/TX
unsigned long Time_Echo_us=0; //用于记录传感器返回的脉冲宽度
unsigned long Len_mm=0; //用于存储距离值
float temperature=0; //设置temperature为浮点变量
float chk=0; //设置val为长整数变量
dht11 DHT11;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
pinMode(EchoPin,INPUT); //设置EchoPin 为输入模式
pinMode(TrigPin,OUTPUT); //设置TrigPin 为输出模式
lcd.begin(16,2);
lcd.cursor();
lcd.blink();
}
void loop()
{
if(Serial.available()>0)
{
int chk = DHT11.read(DHT11PIN);
temperature = (chk*5*100)/1023; //把读取到的val转换为温度数值
//通过Trig/Pin 发送脉冲,触发 HC-SR04 测距
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH); //开始通过 Trig/Pin 发送脉冲
delayMicroseconds(50); //设置脉冲宽度为 50us (>10us)
digitalWrite(TrigPin,LOW); //结束脉冲
Time_Echo_us=pulseIn(EchoPin,HIGH); //获取 HC-SR04 返回的脉冲宽度
//Len_mm = (Time_Echo_us * Vmm/us) / 2 (mm) //根据返回脉冲宽度计算距离
//V = 331×sqrt(1+temperature/273)/1000 (mm/us) //根据温度计算音速
Len_mm=(Time_Echo_us*(331*sqrt(1+temperature/273)/1000))/2; //通过脉冲宽度计算距离
lcd.clear();
lcd.print("dis:");
lcd.print(Len_mm);
lcd.print("MM");
lcd.setCursor(0,1);
lcd.print(temperature);//显示温度
lcd.print((char)223); //显示o符号
lcd.print("C"); //显示字母C
lcd.print("Hum: ");
lcd.print((float)DHT11.humidity, 2);
lcd.print("%RH");
}
else
{
lcd.clear();
lcd.print("More than measuring range, please range again......");
}
delay(1000);
}
请看看有没有错误
# include <dht11.h>
#include <LiquidCrystal.h>
#define DHT11PIN 8
unsigned int EchoPin=6;//将Arduino的Pin6 连接至 HC-SR04 的Echo/RX
unsigned int TrigPin=7;//将Arduino的 Pin7 连接至 HC-SR04 的Trig/TX
unsigned long Time_Echo_us=0; //用于记录传感器返回的脉冲宽度
unsigned long Len_mm=0; //用于存储距离值
float temperature=0; //设置temperature为浮点变量
float chk=0; //设置val为长整数变量
dht11 DHT11;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
pinMode(EchoPin,INPUT); //设置EchoPin 为输入模式
pinMode(TrigPin,OUTPUT); //设置TrigPin 为输出模式
lcd.begin(16,2);
lcd.cursor();
lcd.blink();
}
void loop()
{
if(Serial.available()>0)
{
int chk = DHT11.read(DHT11PIN);
temperature = (chk*5*100)/1023; //把读取到的val转换为温度数值
//通过Trig/Pin 发送脉冲,触发 HC-SR04 测距
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH); //开始通过 Trig/Pin 发送脉冲
delayMicroseconds(50); //设置脉冲宽度为 50us (>10us)
digitalWrite(TrigPin,LOW); //结束脉冲
Time_Echo_us=pulseIn(EchoPin,HIGH); //获取 HC-SR04 返回的脉冲宽度
//Len_mm = (Time_Echo_us * Vmm/us) / 2 (mm) //根据返回脉冲宽度计算距离
//V = 331×sqrt(1+temperature/273)/1000 (mm/us) //根据温度计算音速
Len_mm=(Time_Echo_us*(331*sqrt(1+temperature/273)/1000))/2; //通过脉冲宽度计算距离
lcd.clear();
lcd.print("dis:");
lcd.print(Len_mm);
lcd.print("MM");
lcd.setCursor(0,1);
lcd.print(temperature);//显示温度
lcd.print((char)223); //显示o符号
lcd.print("C"); //显示字母C
lcd.print("Hum: ");
lcd.print((float)DHT11.humidity, 2);
lcd.print("%RH");
}
else
{
lcd.clear();
lcd.print("More than measuring range, please range again......");
}
delay(1000);
}