使用Arduino IDE编写代码,要求:1.初始状态三色LED熄灭2.使用超声波测距传感器检测有人靠近到35厘米以内时,三色LED灯发出绿色呼吸光,3.碰撞传感器感受到信号时,三色LED灯由绿色呼吸光转为红色光,六秒后转为蓝色光。4.如果感觉到触摸传感器信号,则蓝色光慢慢转为初始绿色呼吸光10秒后熄灭,如果没有检测到触摸传感器信号则保持蓝色光一分钟后,转为初始绿色呼吸光,10秒后熄灭。完成循环。
时间: 2023-10-07 15:10:22 浏览: 85
以下是基于Arduino UNO的代码实现:
```
#define trigPin 2 // 超声波传感器的触发引脚
#define echoPin 4 // 超声波传感器的回声引脚
#define touchPin 7 // 触摸传感器的引脚
#define collisionPin 8 // 碰撞传感器的引脚
#define redPin 9 // 红色LED的引脚
#define greenPin 10 // 绿色LED的引脚
#define bluePin 11 // 蓝色LED的引脚
int distance; // 超声波传感器测量到的距离
int state; // 状态变量,0表示初始状态,1表示检测到人靠近,2表示碰撞,3表示触摸
void setup() {
pinMode(trigPin, OUTPUT); // 设置超声波传感器的触发引脚为输出模式
pinMode(echoPin, INPUT); // 设置超声波传感器的回声引脚为输入模式
pinMode(touchPin, INPUT); // 设置触摸传感器的引脚为输入模式
pinMode(collisionPin, INPUT); // 设置碰撞传感器的引脚为输入模式
pinMode(redPin, OUTPUT); // 设置红色LED的引脚为输出模式
pinMode(greenPin, OUTPUT); // 设置绿色LED的引脚为输出模式
pinMode(bluePin, OUTPUT); // 设置蓝色LED的引脚为输出模式
digitalWrite(redPin, LOW); // 初始状态红色LED熄灭
digitalWrite(greenPin, LOW); // 初始状态绿色LED熄灭
digitalWrite(bluePin, LOW); // 初始状态蓝色LED熄灭
Serial.begin(9600); // 初始化串口通信
}
void loop() {
if (state == 0) { // 初始状态
digitalWrite(greenPin, HIGH); // 绿色LED呼吸灯效果
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(greenPin, brightness);
delay(10);
}
for (int brightness = 255; brightness > 0; brightness--) {
analogWrite(greenPin, brightness);
delay(10);
}
delay(1000);
digitalWrite(greenPin, LOW); // 绿色LED熄灭
distance = getDistance(); // 获取当前距离
if (distance < 35) { // 检测到人靠近
state = 1;
} else if (digitalRead(collisionPin) == HIGH) { // 检测到碰撞
state = 2;
}
} else if (state == 1) { // 检测到人靠近
digitalWrite(greenPin, LOW); // 绿色LED熄灭
digitalWrite(redPin, HIGH); // 红色LED呼吸灯效果
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(redPin, brightness);
delay(10);
}
for (int brightness = 255; brightness > 0; brightness--) {
analogWrite(redPin, brightness);
delay(10);
}
delay(1000);
digitalWrite(redPin, LOW); // 红色LED熄灭
state = 0;
} else if (state == 2) { // 检测到碰撞
digitalWrite(greenPin, LOW); // 绿色LED熄灭
digitalWrite(redPin, HIGH); // 红色LED常亮
delay(6000);
digitalWrite(redPin, LOW); // 红色LED熄灭
digitalWrite(bluePin, HIGH); // 蓝色LED呼吸灯效果
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(bluePin, brightness);
delay(10);
}
for (int brightness = 255; brightness > 0; brightness--) {
analogWrite(bluePin, brightness);
delay(10);
}
delay(10000);
digitalWrite(bluePin, LOW); // 蓝色LED熄灭
if (digitalRead(touchPin) == HIGH) { // 检测到触摸
state = 3;
} else {
state = 0;
}
} else if (state == 3) { // 检测到触摸
digitalWrite(greenPin, LOW); // 绿色LED熄灭
digitalWrite(bluePin, HIGH); // 蓝色LED呼吸灯效果
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(bluePin, brightness);
delay(10);
}
for (int brightness = 255; brightness > 0; brightness--) {
analogWrite(bluePin, brightness);
delay(10);
}
delay(10000);
digitalWrite(bluePin, LOW); // 蓝色LED熄灭
digitalWrite(greenPin, HIGH); // 绿色LED呼吸灯效果
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(greenPin, brightness);
delay(10);
}
for (int brightness = 255; brightness > 0; brightness--) {
analogWrite(greenPin, brightness);
delay(10);
}
delay(10000);
digitalWrite(greenPin, LOW); // 绿色LED熄灭
state = 0;
}
}
int getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
Serial.println(distance);
return distance;
}
```
代码中使用了四个传感器:超声波传感器、碰撞传感器、触摸传感器和三色LED。首先设置各个引脚的模式,然后初始状态下,绿色LED会呼吸灯效果,如果检测到有人靠近,则红色LED会呼吸灯效果,如果检测到碰撞,则红色LED常亮并且蓝色LED会呼吸灯效果,如果检测到触摸,则蓝色LED会呼吸灯效果。每个状态之间需要等待一定的时间。其中,超声波传感器测量距离的函数为getDistance()。
阅读全文