在arduino IDE环境下完成一个智能停车库的程序 使用设备如下 使用4个压电陶瓷传感器、一个一位的数码管、两个led灯、一个舵机 功能如下 使用压电陶瓷传感器检测是否有车辆停放,led灯显示是否有车辆停放, 舵机通过控制角度变化从而控制车辆入库,一位的数码管显示剩余停车位数量, 停车位总共两个,当两个停车位都已被停车或着库内车辆数量等于停车位数量,则不允许入库, 若停车位无车辆停放则显示该车位的led灯常亮,若有车辆停放led灯则不亮
时间: 2023-05-21 16:04:09 浏览: 32
以下是一个基本的智能停车库的程序,使用了4个压电陶瓷传感器、一个一位的数码管、两个led灯、一个舵机:
```
#include <Servo.h>
const int numSensors = 4;
const int sensorPins[numSensors] = {2, 3, 4, 5};
const int ledPin = 6;
const int servoPin = 7;
const int digitPins[7] = {8, 9, 10, 11, 12, 13, A0};
const int numDigits = 2;
int numCars = 0;
int maxCars = 2;
int availableSpaces = maxCars - numCars;
Servo servo;
int servoAngle = 0;
void setup() {
for (int i = 0; i < numSensors; i++) {
pinMode(sensorPins[i], INPUT);
}
pinMode(ledPin, OUTPUT);
servo.attach(servoPin);
for (int i = 0; i < numDigits; i++) {
pinMode(digitPins[i], OUTPUT);
}
}
void loop() {
numCars = 0;
for (int i = 0; i < numSensors; i++) {
if (digitalRead(sensorPins[i]) == HIGH) {
numCars++;
}
}
availableSpaces = maxCars - numCars;
if (availableSpaces == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
if (numCars < maxCars) {
if (servoAngle == 0) {
servo.write(90);
delay(1000);
servoAngle = 90;
numCars++;
availableSpaces--;
}
}
}
displayNumber(availableSpaces);
}
void displayNumber(int number) {
int digits[numDigits];
for (int i = 0; i < numDigits; i++) {
digits[i] = number % 10;
number /= 10;
}
for (int i = numDigits - 1; i >= 0; i--) {
digitalWrite(digitPins[i], HIGH);
for (int j = 0; j < 7; j++) {
digitalWrite(digitPins[j], LOW);
}
switch (digits[i]) {
case 0:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[5], LOW);
break;
case 1:
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
break;
case 2:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 3:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 4:
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 5:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 6:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 7:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
break;
case 8:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
break;
case 9:
digitalWrite(digitPins[0], LOW);
digitalWrite(digitPins[1], LOW);
digitalWrite(digitPins[2], LOW);
digitalWrite(digitPins[3], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
break;
}
delay(5);
}
}
```
这个程序使用了一个循环来检测每个传感器是否有车辆停放。如果有车辆停放,则增加车辆数量并更新可用停车位数量。如果没有车辆停放,则减少车辆数量并更新可用停车位数量。如果可用停车位数量为零,则显示红色led灯。如果可用停车位数量不为零,则显示绿色led灯,并检查是否可以将车辆入库。如果可以,则将舵机旋转到正确的位置,并增加车辆数量和减少可用停车位数量。程序还使用一个函数来显示剩余停车位数量。这个函数将数字分解为单个数字,并根据数字在数码管上点亮相应的LED。