setup(): configurează pinii de intrare și de ieșire, atașează întreruperi butoanelor pentru a detecta rapid apăsările și senzorilor IR pentru a detecta schimbările, atașează cele două servomotoare și le setează unghiul, inițializează LCD-ul. Folosesc conceptul de GPIO prin interacțiunea cu aceste componente electronice de input / output.
button1ISR() și button2ISR(): setează flagurile corespunzătoare celor două butoane atunci când sunt apăsate.
irSensor1ISR() și irSensor2ISR() sunt rutine de întrerupere care detectează schimbarea senzorilor. Dacă senzorii nu detectează niciun vehicul, bariera va fi închisă după un timp de două secunde (am folosit timere — funcția millis()), pentru a lăsa suficient timp trecerii vehiculului. Dacă bariera detectează o mașină, atunci se deschide. De asemenea se ține incrementează / decrementează numărul de mașini care se află în parcare la momentul curent.
measureDistance(int trigPin, int echoPin) măsoară distanța cu ajutorul senzorului ultrasonic. Trimite un puls de 10 ms pe pinul de trigger și măsoară durata de timp până la ecou. Calculează distanța în cm și o returnează.
openBarrier() deschide bariera (90 grade) și closeBarrier() o închide (0 grade).
increaseLedIntensity() crește treptat intensitatea folosind PWM, iar decreaseLedIntensity() o scade treptat prin aceeași metodă.
moveElevatorUp() și moveElevatorDown() controlează mișcarea liftului (sus / jos). Pentru urcare, liftul funcționează până când senzorul ultrasonic măsoară o distanță de 3 cm între tavanul încăperii cu elevatorul și lift. Pentru coborâre, acesta se mișcă până când distanța crește peste 13.5 cm. Este calculată înălțimea curentă la care se află liftul și este afișată pe display-ul cu I2C. Intensitatea led-ului este maximă atunci când liftul este la parter (indicând etajul curent) și minimă atunci când liftul este la etajul superior.
loop() verifică dacă a trecut o secundă de când a trecut ultima mașină și închide bariera. Crește contorul mașinilor, actualizează LCD-ul, verifică să nu se fi atins numărul maxim de mașini din parcare.