// 定义超声波传感器的引脚const int trigPin = 2;const int echoPin = 3;// 定义LED的引脚const int ledPin = 9;// 定义距离范围const int minDist = 2;const int maxDist = 400;void setup() { // 初始化串口和LED Serial.begin(9600); pinMode(ledPin, OUTPUT);}void loop() { // 发送超声波信号 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 接收超声波信号并计算距离 long duration = pulseIn(echoPin, HIGH); int distance = duration / 58; // 控制LED亮度 if (distance >= minDist && distance <= maxDist) { int brightness = map(distance, minDist, maxDist, 255, 0); analogWrite(ledPin, brightness); } else { analogWrite(ledPin, 0); } // 输出距离和LED亮度 Serial.print("Distance: "); Serial.print(distance); Serial.print(" cm, Brightness: "); Serial.println(analogRead(ledPin)); // 等待一段时间 delay(100);}在这代码中添加一个舵机并且在15度到165度之间循环转动,再加上两个LED是他们能实现在15到65度和65到165度之间分别在2到400cm之间亮度不一样
时间: 2024-02-24 08:00:01 浏览: 78
要实现这个功能,我们需要在原来的代码中添加一个舵机和两个LED,并根据舵机的角度和距离控制LED的亮度。下面是修改后的代码实现:
```arduino
// 定义超声波传感器的引脚
const int trigPin = 2;
const int echoPin = 3;
// 定义LED的引脚
const int ledPin1 = 9;
const int ledPin2 = 10;
// 定义舵机的引脚和角度范围
const int servoPin = 5;
const int minAngle = 15;
const int maxAngle = 165;
// 定义距离范围
const int minDist = 2;
const int maxDist = 400;
void setup() {
// 初始化串口、LED和舵机
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(servoPin, OUTPUT);
}
void loop() {
// 循环转动舵机
for (int angle = minAngle; angle <= maxAngle; angle++) {
// 设置舵机角度
int pulseWidth = map(angle, 0, 180, 544, 2400);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(servoPin, LOW);
delay(20);
// 发送超声波信号
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 接收超声波信号并计算距离
long duration = pulseIn(echoPin, HIGH);
int distance = duration / 58;
// 控制LED亮度
if (angle >= minAngle && angle <= 65) {
if (distance >= minDist && distance <= maxDist) {
int brightness = map(distance, minDist, maxDist, 255, 0);
analogWrite(ledPin1, brightness);
} else {
analogWrite(ledPin1, 0);
}
} else if (angle > 65 && angle <= maxAngle) {
if (distance >= minDist && distance <= maxDist) {
int brightness = map(distance, minDist, maxDist, 255, 0);
analogWrite(ledPin2, brightness);
} else {
analogWrite(ledPin2, 0);
}
}
// 输出距离和LED亮度
Serial.print("Angle: ");
Serial.print(angle);
Serial.print(", Distance: ");
Serial.print(distance);
Serial.print(" cm, Brightness1: ");
Serial.print(analogRead(ledPin1));
Serial.print(", Brightness2: ");
Serial.println(analogRead(ledPin2));
// 等待一段时间
delay(50);
}
}
```
这个程序中,我们添加了一个舵机和两个LED,并在for循环中循环转动舵机。在每个角度下,我们发送超声波信号并计算距离,根据舵机的角度和距离控制LED的亮度。当舵机在15到65度之间时,我们控制ledPin1的亮度,当舵机在65到165度之间时,我们控制ledPin2的亮度。如果距离小于2厘米或大于4米,LED会完全关闭。程序还会通过串口输出角度、距离和LED亮度的值,方便调试和观察。
阅读全文