#include <Servo.h>
const int trigPin = 3;
const int echoPin = 2;
const int servoPin = 8;
const int segmentPins[] = {10, 9, 8, 6, 7, 11, 12}; // A-G сегменты
Servo myServo;
int freeSpaces;
unsigned long duration;
float distance;
void setup() {
Serial.begin(9600);
myServo.attach(servoPin);
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
freeSpaces = random(1, 10);
Serial.print("Свободные места: ");
Serial.println(freeSpaces);
displayNumber(freeSpaces);
myServo.write(0); // Закрытый шлагбаум
}
void loop() {
distance = measureDistance();
if (distance < 30 && freeSpaces > 0) {
openBarrier();
freeSpaces--;
displayNumber(freeSpaces);
Serial.print("Свободные места: ");
Serial.println(freeSpaces);
delay(7000);
closeBarrier();
}
}
float measureDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return (duration * 0.034) / 2;
}
void displayNumber(int num) {
bool segments[7] = {0};
switch (num) {
case 1: segments[1] = segments[2] = 1; break;
case 2: segments[0] = segments[1] = segments[3] = segments[4] = segments[6] = 1; break;
case 3: segments[0] = segments[1] = segments[2] = segments[3] = segments[6] = 1; break;
case 4: segments[1] = segments[2] = segments[5] = segments[6] = 1; break;
case 5: segments[0] = segments[2] = segments[3] = segments[5] = segments[6] = 1; break;
case 6: segments[0] = segments[2] = segments[3] = segments[4] = segments[5] = segments[6] = 1; break;
case 7: segments[0] = segments[1] = segments[2] = 1; break;
case 8: segments[0] = segments[1] = segments[2] = segments[3] = segments[4] = segments[5] = segments[6] = 1; break;
case 9: segments[0] = segments[1] = segments[2] = segments[3] = segments[5] = segments[6] = 1; break;
default: break;
}
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], segments[i]);
}
}
void openBarrier() {
myServo.write(90);
}
void closeBarrier() {
myServo.write(0);
}