Algoritmi si functii folosite: Logica principala a programului se afla in functiile `setup()` `loop()`. In functia de setup initializez toti pinii de input(butonul, care este input de PULL_UP, la fel si pin-ul pentru echo de la servomotor) si cele de output(led-urile, trigger pin-ul servomotorului). In setup de asemenea setez intreruperea folosita de buton prin ISR si initializez servomotorul. By default, led-ul rosu este pornit, deoarece la inceput bariera este coborata. In functia de loop, la inceput, verific permanent daca s-a activat intreruperea butonului, caz in care, daca bariera este coborata, setez led-ul pe galben prin intermediul GPIO-ului si urc bariera, LED-ul trecand pe verde. Daca aceasta era deja ridicata, resetez timpul la care s-a detectat masina(dupa ce a trecut masina de senzor se asteapta 3 secunde pana la coborarea barierei, se reseteaza acest timp). Daca bariera este ridicata, se verifica daca a trecut masina de senzor, dupa se asteapta 3 secunde, iar dupa trecerea acestora se verifica daca masina mai este in dreptul senzorului sau a trecut. Daca se respecta toate conditiile, LED-ul trece pe galben si bariera este coborata. Functia `checkObjectDetected()` verifica daca un obiect(in cazul nostru, masina RC) se afla in dreptul senzorului. Prima data, se seteaza trigpin-ul pe low pentru 2ms si apoi se citeste rezultatul echoPin. Am folosit urmatoarea formula de calcul a distantei: dist = duration * 0.034 / 2. Daca distanta < 10, se verifica daca obiectul se afla persistent in fata pentru 10 semnale de ceas in fata senzorului, caz in care se returneaza 1. Daca distanta este 0(bug), se returneaza 0, iar daca este >= 10 se returneaza -1. Pentru setarea culorii led-urilor m-am folosit de functia `setColor()`, in care am facut analogWrite pe pini pentru fiecare culoare.