【Arduino 101】最全超聲波測(cè)距模塊攻略!附修正方法。

以下是我修正后的代碼
#include <DFRobot_DHT11.h>
DFRobot_DHT11 DHT; //DHT-11 庫(kù)文件
#define Trig 11
#define Echo 12
#define Buzzer 2
#define DHTPIN 4
#define DHTTYPE DHT11
float sound_spd = 343; //聲速初始值
float distance, humid, temp; //距離,濕度,溫度
int LEDs; //LED點(diǎn)亮個(gè)數(shù)
void setup() {
Serial.begin(115200);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Buzzer, OUTPUT);
}
void loop() {
//**************************************************************************************************測(cè)距
// Write a pulse to the HC-SR04 Trigger Pin//做一個(gè)10uS的TTL,激發(fā)測(cè)距模塊。
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
distance = (pulseIn(Echo, HIGH) / 2) * sound_spd / 10000; //測(cè)距公式
// Send results to Serial Monitor//在串口監(jiān)視器顯示距離
Serial.print("Distance = ");
if (distance >= 400 || distance <= 2) {
Serial.println("Out of Range");
} else {
Serial.print(distance);
Serial.println(" cm");
}
//***********************************************************************************************報(bào)警模式
if (distance <= 20) {
tone(Buzzer, 1000);
LEDs = round(distance / 2);
for (int D = 10; D >= 10 - LEDs; D--) {
digitalWrite(D, HIGH);
}
delay(distance * 30);
noTone(Buzzer);
for (int i = 10; i >= 6; i--) {
digitalWrite(i, LOW);
}
}
//***********************************************************************************************修正模式
else {
noTone(Buzzer);
for (int i = 10; i >= 6; i--) {
digitalWrite(i, HIGH);
}
DHT.read(DHTPIN);
humid = DHT.humidity;
temp = DHT.temperature;
sound_spd = 331.4 + (0.606 * temp) + (0.0124 * humid); //聲速修正公式
// Send results to Serial Monitor//在串口監(jiān)視器顯示溫度,濕度,以及修正以后的聲速
Serial.print(" Correction: ");
Serial.print("\t");
Serial.print(" Temperature = ");
Serial.print(DHT.temperature);
Serial.print("C");
Serial.print("\t");
Serial.print(" Humidity = ");
Serial.println(DHT.humidity);
Serial.print("%");
Serial.print("\t");
Serial.print(" Sound Speed = ");
Serial.print(sound_spd);
Serial.println("m/s");
Serial.println(" ");
delay(1000);
}
delay(50);
}