#include <LedControl.h>
// 定义触发和回声引脚
const int trigPin = 7;
const int echoPin = 8;
// 定义LED灯的引脚
const int led1 = 2;
const int led2 = 3;
const int led3 = 4;
const int led4 = 5;
void setup() {
// 初始化串行通讯
Serial.begin(9600);
// 设置传感器引脚模式
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// 设置LED引脚为输出模式
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop() {
long duration, cm;
// 触发超声波传感器
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 读取回声时间
duration = pulseIn(echoPin, HIGH);
cm = microsecondsToCentimeters(duration);
// 根据距离控制LED灯
controlLEDs(cm);
// 打印距离
Serial.print(cm);
Serial.println(" cm");
delay(100);
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
void controlLEDs(long cm) {
// 根据距离决定点亮多少个LED
if (cm < 100) {
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
} else if (cm < 200) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
} else if (cm < 300) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
} else {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
}
}