Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:alexandru.predescu:bogdan.andrei0509 [2026/05/26 14:39]
bogdan.andrei0509 [Arhitectura Functiilor]
pm:prj2026:alexandru.predescu:bogdan.andrei0509 [2026/05/26 17:17] (current)
bogdan.andrei0509
Line 67: Line 67:
  
  
-Nume Functie | Descriere / Rol in Proiect | +Nume functie ^ Explicatie componenta si legatura directa cu proiectul de parcare ^ 
-| I2C_init | Initializeaza magistrala I2C (configurand prescalerul TWSR si registrul de rata TWBR la valoarea 72pentru ​stabili ​frecventa de ceas. | +| I2C_init() | Initializeaza magistrala ​de comunicare ​I2C (TWI) a microcontrolerului,​ setand ​frecventa de ceas necesara pentru a putea trimite date catre noul ecran LCD 1602. | 
-| I2C_start | Genereaza conditia de START pe magistrala I2C si asteapta finalizarea acesteia prin verificarea flag-ului hardware (TWINT). | +| I2C_start() | Genereaza conditia de START pe magistrala I2C pentru a initia sesiunea de transmisie a datelor text sau a comenzilor catre ecranul LCD. | 
-| I2C_stop | Genereaza conditia de STOP pe magistrala I2C pentru a elibera linia de comunicatie,​ urmata de o scurta temporizare. | +| I2C_stop() | Genereaza conditia de STOP pe magistrala I2C pentru a elibera linia de comunicare dupa ce ecranul a primit datele despre starea parcarii. | 
-| I2C_write | Incarca ​un octet de date in registrul TWDR si il transmite pe magistrala catre dispozitivul sclav (expandorul LCD-ului), asteptand confirmarea. | +| I2C_write() Trimite ​un octet de date primit ca parametru ​(comanda sau caracterdirect catre cipul adaptor PCF8574 de pe spatele ecranului LCD 1602. | 
-| LCD_send_internal | Functie ajutatoare care impacheteaza transmisia ​I2C completa (START, ​adresa ​LCD in mod scriere ​0x27 << 1trimitere date si STOP). | +| LCD_send_internal() Incapsuleaza protocolul ​I2C: trimite ​adresa ​hardware a ecranului (0x27)urmata de datele efective pentru controlul pinilor ecranului (RS, RW, EN, Backlight). | 
-| LCD_pulse | Genereaza un impuls pe pinul EN (Enable) al LCD-ului (tranzitie Sus-Jos) pentru a determina ecranul ​sa preia nibble-ul de date trimis prin expandor, pastrand iluminarea de fundal (BL) activa. | +| LCD_pulse() Activeaza si dezactiveaza rapid pinul de Enable (EN) al ecranului ​LCD prin intermediul I2C, fortand display-ul sa preia datele trimise pentru procesare. | 
-| LCD_send | Imparte ​un octet de date in doua grupuri de cate 4 biti (high nibble si low nibblesi le trimite succesiv catre LCD folosind functia LCD_pulse (mod de lucru pe 4 biti). | +| LCD_send() Transmite o comanda sau un caracter catre LCD impartind octetul ​in doua jumatati ​(nibbles), deoarece ecranul este configurat sa functioneze in mod economic ​pe 4 biti. | 
-| LCD_command | Trimite ​o comanda ​de configurare catre LCD (cum ar fi mutarea cursorului) apeland LCD_send cu parametrul ​de mod setat pe 0 (pinul RS dezactivat). | +| LCD_command() | Trimite ​instructiuni ​de configurare ​hardware ​catre ecran, ​cum ar fi mutarea cursorului, stergerea ecranului sau setarea modului ​de scriere. | 
-| LCD_char | Trimite un caracter ASCII catre ecran pentru a fi afisat pe pozitia curentaapeland LCD_send cu pinul RS activat ​(1 << RS). | +| LCD_char() | Trimite un singur ​caracter ASCII (litera, cifra sau simbol) ​pentru a fi afisat ​fizic pe ecranul LCDsetand ​pinul RS (Register Selectpe HIGH. | 
-| LCD_init | Realizeaza ​secventa hardware ​standard ​de initializare ​a ecranului LCD in modul de lucru pe 4 biti, urmata ​de configurarea cursorului ​si stergerea ecranului. | +| LCD_init() Ruleaza ​secventa hardware ​obligatorie ​de pornire ​a ecranului LCD 1602, setandu-l ​in modul de lucru pe 4 biti, activand lumina albastra ​de fundal ​si stergand memoria. | 
-| LCD_print | Primeste un sir de caractere (string) si afiseaza fiecare caracter pe rand pe ecran, pana la intalnirea terminatorului de sir. | +| LCD_print() | Primeste un sir de caractere (string) si apeleaza succesiv functia LCD_char pentru a afisa cuvinte complete ​pe ecran (ex: "​Locuri libere"​). | 
-| LCD_clear ​| Trimite comanda de stergere completa a ecranului ​(0x01) si asteapta timpul necesar executiei acesteia. | +| LCD_clear() ​| Sterge instantaneu tot textul afisat pe cele doua randuri ale LCD-ului ​si readuce cursorul la pozitia initiala (sus-stanga) pentru a pregati o noua afisare. | 
-| ADC_init ​| Initializeaza perifericul ADC (Analog-to-Digital ​Converter), setand tensiunea de referinta la AVCC (5Vsi activand ​prescalerul ​(divizor ​de frecventa). | +| ADC_init() | Configureaza convertorul ​Analog-Digital ​(ADCal ATmega328P, setand tensiunea de referinta la 5V si prescalerul ​pentru citirea senzorilor ​de lumina. | 
-| ADC_read | Selecteaza canalul ​analogic primit ca parametru (0-3 pentru senzori), porneste conversia, asteapta finalizarea acesteia ​si returneaza ​valoarea digitala (0-1023). | +| ADC_read() | Selecteaza canalul ​ADC corespunzator unuia dintre cele 4 locuri de parcare ​si returneaza ​o valoare numerica proportionala cu intensitatea luminii de pe acel senzor. | 
-| Interrupt_init | Configureaza pinii PD2 si PD3 ca intrari cu rezistente de pull-up ​interne ​activate si seteaza ​intreruperile externe INT0 si INT1 sa se declanseze ​pe front cazator (Falling Edge). | +| Interrupt_init() | Configureaza pinii PD2 si PD3 ca intrari cu rezistente de pull-up activate si activeaza ​intreruperile externe INT0 si INT1 pe front cazator (apasare de buton). | 
-| ISR(INT0_vect) | Rutina de intrerupere ​pentru ​butonul de intrareDaca sunt locuri ​libere ​si bariera ​e inactiva, porneste ​bariera (sens intrare). Daca parcarea este plina, activeaza flag-ul de bip de eroare. | +| ISR(INT0_vect) | Rutina de intrerupere ​declansata de butonul de IntrareVerifica daca parcare are locuri: daca da, aproba accesul ​si ridica ​bariera; daca nu, porneste ​alarma sonora. | 
-| ISR(INT1_vect) | Rutina de intrerupere ​pentru ​butonul de iesireDaca bariera este inactiva, o activeaza si seteaza ​directia de iesire. | +| ISR(INT1_vect) | Rutina de intrerupere ​declansata de butonul de IesireSeteaza ​directia de miscare pe "iesire" si activeaza ridicarea barierei pentru masina care paraseste parcarea. | 
-| servo_pozitie_jos | Genereaza ​un impuls ​software de PWM (1.5 ms pe starea High, restul pana la 20 ms pe Low) pe pinul PB4 pentru a pozitiona bratul servomotorului ​in pozitia de bariera coborata. | +| servo_pozitie_jos() | Genereaza ​semnalul PWM software de 1.5ms necesar ​pentru a mentine servomotorul ​in pozitia ​orizontala ​de 0 grade, blocand accesul in parcare (bariera coborata). | 
-| servo_pozitie_sus | Genereaza ​un impuls ​software de PWM (1.0 ms pe starea High, restul pana la 20 ms pe Low) pe pinul PB4 pentru a pozitiona bratul ​servomotorului ​in pozitia ​de bariera ridicata. | +| servo_pozitie_sus() | Genereaza ​semnalul PWM software de 1.0ms necesar ​pentru a roti axul servomotorului ​la 90 de grade, deschizand accesul masinilor (bariera ridicata). | 
-| main | Punctul de intrare in programConfigureaza directia pinilor pentru ​LED-uri, servo si buzzer, apeleaza initializarile,​ activeaza global intreruperile (sei()), iar in bucla infinita monitorizeaza senzorii LDR, actualizeaza ​numarul ​de locuri, aprinde LED-urile aferente ​si gestioneaza starile barierei sau ale alertei de parcare plina. |+| main() Bucla principala a proiectuluiCiteste continuu cei 4 senzori LDR, aprinde ​LED-urile corespunzatoare ​(Verde/Rosu), calculeaza locurile libere, actualizeaza ​ecranul LCD si controleaza timpii ​de actionare ai barierei ​si buzzerului. |
  
 ==== Fluxul de Executie ==== ==== Fluxul de Executie ====
  
-1. **Etapa de Initializare:​** La alimentarea placii, se apeleaza ​''​Hardware_Init'' ​care configureaza registrele de directie ​(DDRDDDRC) si pregateste comunicarea cu ecranul ​si senzorii.+1. **Etapa de Initializare:​** La alimentarea placii, se configureaza perifericele prin functiile de initializare: ​''​I2C_init()'' ​si ''​LCD_init()''​ pentru pornirea ecranului''​ADC_init()''​ pentru senzorii de lumina ​si ''​Interrupt_init()''​ pentru activarea butoanelor pe pinii de intreruperi externe (PD2 si PD3). Tot acum se seteaza pinii de iesire pentru LED-uri, buzzer si servomotor (DDRB si DDRD).
  
-2. **Etapa de Scanare (Loop):** In bucla infinita, se apeleaza ciclic ​''​Actualizeaza_Locuri_Si_Numara'' ​pentru a verifica statusul ​celor 4 locuriDatele sunt procesate ​si trimise instant catre LCD prin ''​LCD_Afiseaza_Locuri''​.+2. **Etapa de Scanare ​si Monitorizare ​(Loop):** In bucla principala ​''​main()''​, microcontrolerul citeste ciclic starea ​celor 4 senzori LDR folosind ''​ADC_read()''​In functie de pragul de lumina, algoritmul aprinde LED-ul corespunzator (Verde pentru loc liber, Rosu pentru loc ocupat) ​si calculeaza in timp real numarul total de ''​locuri_libere''​.
  
-3. **Etapa de Decizie:** Sistemul monitorizeaza pinul butonului ​(PD6). La apasare, algoritmul verifica variabila de locuri ​libere: daca este > 0, se apeleaza ''​Bariera_Deschide''​in caz contrarse declanseaza ''​Buzzer_Sunet_Eroare''​.+3. **Etapa de Afisare:** Datele procesate sunt trimise catre ecranul LCD 1602 prin functiile ''​LCD_command()''​ si ''​LCD_print()''​Daca mai exista ​locuri, se afiseaza numarul lordaca parcarea este plinape ecran va aparea mesajul "​PARCARE PLINA!"​.
  
 +4. **Etapa de Eveniment (Intreruperi):​** Sistemul reactioneaza instant la actiunile soferilor prin rutinele de intrerupere:​
 +  * **La apasarea butonului de Intrare (INT0):** Daca sunt locuri libere, se activeaza flag-ul ''​bariera_activa'',​ se afiseaza mesajul de bun venit si se apeleaza ''​servo_pozitie_sus()''​. Daca parcarea e plina, se activeaza flag-ul ''​parcare_plina_bip''​ si buzzerul emite 3 semnale sonore scurte de respingere.
 +  * **La apasarea butonului de Iesire (INT1):** Se ridica automat bariera pentru a permite iesirea masinii, afisand mesajul de drum bun.
 +
 +5. **Etapa de Resetare Bariera:** Dupa ce masina a trecut si timpul de asteptare s-a scurs, se apeleaza ''​servo_pozitie_jos()''​ pentru a cobori bariera, iar ecranul revine la starea initiala de monitorizare.
 ==== Cod sursa ==== ==== Cod sursa ====
 https://​github.com/​Bogdan594/​Smart-Parking-System/​tree/​main https://​github.com/​Bogdan594/​Smart-Parking-System/​tree/​main
 +
 +==== Video cu proiectul ====
 +https://​www.youtube.com/​watch?​v=XeezoRPa95w
pm/prj2026/alexandru.predescu/bogdan.andrei0509.1779795557.txt.gz · Last modified: 2026/05/26 14:39 by bogdan.andrei0509
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0