This shows you the differences between two versions of the page.
|
pm:prj2026:bianca.popa1106:cezar_andrei.enciu [2026/05/09 14:32] cezar_andrei.enciu |
pm:prj2026:bianca.popa1106:cezar_andrei.enciu [2026/05/18 18:25] (current) cezar_andrei.enciu |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| ==== Descriere generala ==== | ==== Descriere generala ==== | ||
| - | Reflex Analyzer este un sistem embedded pentru masurarea precisa a timpului de reactie uman. Placa ATmega324P primeste o comanda de start dintr-o aplicatie desktop, genereaza un interval de asteptare pseudo-aleator intre 1 si 4 secunde, dupa care emite simultan un semnal sonor (buzzer) si unul luminos (LED). La apasarea butonului de catre utilizator, cronometrul hardware se opreste, iar rezultatul — exprimat in milisecunde — este trimis aplicatiei prin USART. Display-ul OLED I2C afiseaza starea sistemului in timp real. Aplicatia centralizeaza rezultatele si prezinta statistici: medie, minim, maxim si un grafic al evolutiei pe sesiune. | + | Reflex Analyzer este un sistem embedded pentru masurarea precisa a timpului de reactie uman. Placa ESP32 DevKit V1 primeste comanda de start prin USB-Serial, genereaza un interval de asteptare pseudo-aleator intre 1 si 4 secunde, dupa care emite simultan un semnal sonor prin buzzer si un semnal luminos prin LED. La apasarea butonului de catre utilizator, cronometrul se opreste, iar rezultatul — exprimat in milisecunde — este afisat pe display-ul LCD 2004 I2C si transmis in Monitorul Serial. |
| + | |||
| + | Sistemul functioneaza independent, fara aplicatie desktop externa, folosind doar firmware-ul incarcat pe ESP32 si componentele hardware conectate. | ||
| ==== Scop ==== | ==== Scop ==== | ||
| - | Crearea unui instrument simplu, precis si portabil care sa masoare obiectiv reflexele unui utilizator si sa permita urmarirea progresului in timp, cu o precizie superioara aplicatiilor software pure. | + | Crearea unui instrument simplu, precis si portabil care sa masoare obiectiv reflexele unui utilizator, folosind componente hardware accesibile si o implementare embedded bazata pe ESP32. |
| ==== Ideea de baza ==== | ==== Ideea de baza ==== | ||
| - | Microcontrollerul **ATmega324P** cronometreaza timpul de reactie folosind **Timer1 pe 16 biti** (rezolutie ~4μs), activat in momentul emiterii semnalului si oprit prin intreruperea externa **INT0** la apasarea butonului. Rezultatul este trimis prin **USART** catre o aplicatie desktop **Python + PyQt5**. Un display **OLED I2C (SSD1306)** ofera feedback local. | + | Microcontrollerul **ESP32 DevKit V1** cronometreaza timpul de reactie folosind functia **millis()** cu rezolutie de 1ms. Cronometrul porneste in momentul activarii semnalului luminos si sonor, iar oprirea se face prin intreruperea de pe **GPIO4**, declansata la apasarea butonului. |
| + | |||
| + | Rezultatul este afisat local pe display-ul **LCD 2004 I2C (0x27)** si este transmis prin **USB-Serial (115200 baud)** pentru debugging si verificare. Buzzer-ul pasiv este controlat prin modulul **LEDC (PWM hardware)** al ESP32. | ||
| ==== Utilitate practica ==== | ==== Utilitate practica ==== | ||
| - | * **Sportivi** care vor sa isi masoare si imbunateasca reflexele in antrenament | + | * **Sportivi** care vor sa isi masoare si imbunatateasca reflexele in antrenament |
| * **Utilizatori generali** curiosi sa isi testeze timpul de reactie cu precizie reala | * **Utilizatori generali** curiosi sa isi testeze timpul de reactie cu precizie reala | ||
| - | * **Demonstratii educationale** — ilustreaza concret timere hardware, intreruperi si comunicatie seriala | + | * **Demonstratii educationale** — ilustreaza concret timere, intreruperi, PWM, I2C si comunicatie seriala |
| ==== De ce e util ==== | ==== De ce e util ==== | ||
| - | * Precizie hardware reala (~4μs rezolutie) vs. aplicatii web/mobile cu latenta de zeci de ms | + | * Precizie hardware reala, cu rezolutie de 1ms folosind millis() |
| - | * Detectie **false start** — apasare buton inainte de semnal, tratata si raportata separat | + | * Detectie **false start** — apasare buton inainte de semnal, tratata separat |
| - | * Delay **pseudo-aleator** (LFSR) — nu se poate anticipa momentul semnalului | + | * Delay **pseudo-aleator** intre 1 si 4 secunde, pentru a evita anticiparea semnalului |
| - | * **Display local** (OLED I2C) — feedback instant fara a privi spre ecranul PC-ului | + | * **Display local LCD 2004 I2C** — afiseaza starea sistemului si rezultatul fara a depinde de o aplicatie externa |
| - | * **Export CSV** din aplicatie pentru analiza ulterioara | + | * Feedback dublu: semnal luminos prin LED si semnal sonor prin buzzer |
| + | * Implementare clara folosind automat de stari, intreruperi si PWM hardware | ||
| ===== Descriere generala ===== | ===== Descriere generala ===== | ||
| Line 36: | Line 41: | ||
| Schema bloc a sistemului: | Schema bloc a sistemului: | ||
| - | {{ :pm:prj2026:bianca.popa1106:schema_bloc_cezar.png?700 |Schema bloc Reflex Analyzer}} | + | {{ :pm:prj2026:bianca.popa1106:schema_bloc_cezar_1.png?700 |Schema bloc Reflex Analyzer}} |
| - | Fluxul de date pe scurt: | + | Fluxul de functionare pe scurt: |
| - | - Aplicatia desktop trimite comanda S (start) prin portul serial catre ATmega324P. | + | - Utilizatorul trimite comanda START prin Monitorul Serial catre ESP32. |
| - | - Microcontrollerul genereaza un delay aleator (1-4s) cu LFSR, dupa care activeaza LED-ul si buzzer-ul simultan. | + | - Microcontrollerul genereaza un delay aleator intre 1 si 4 secunde cu random(). |
| - | - Display-ul OLED trece de la "Gata..." la "GO!" la momentul semnalului. | + | - Display-ul LCD trece de la "Asteptare" la "Gata..." si apoi la "GO!". |
| - | - Utilizatorul apasa butonul — intreruperea externa INT0 opreste Timer1 si calculeaza diferenta de timp. | + | - La momentul semnalului, ESP32 activeaza simultan LED-ul si buzzer-ul. |
| - | - Rezultatul in milisecunde este trimis prin USART aplicatiei si afisat pe OLED. | + | - Utilizatorul apasa butonul, iar intreruperea de pe GPIO4 opreste cronometrul. |
| - | - Daca butonul e apasat inainte de semnal, sistemul semnalizeaza false start si se reseteaza. | + | - Timpul de reactie este calculat in milisecunde, afisat pe LCD si trimis prin Serial. |
| + | - Daca butonul este apasat inainte de semnal, sistemul detecteaza false start, emite 3 beep-uri scurte si se reseteaza automat. | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 52: | Line 58: | ||
| ^ Componenta ^ Cantitate ^ Rol ^ | ^ Componenta ^ Cantitate ^ Rol ^ | ||
| - | | ATmega324P-PU (DIP-40) | 1 | Microcontroller principal | | + | | ESP32 DevKit V1 (38 pini) | 1 | Microcontroller principal cu WiFi/BT integrat | |
| - | | USBasp Programmer | 1 | Programare firmware prin ISP | | + | |
| - | | Crystal 16MHz | 1 | Sursa de ceas externa | | + | |
| - | | Condensator 22pF | 2 | Stabilizare crystal | | + | |
| - | | Condensator 100nF | 1 | Decuplare alimentare | | + | |
| | LED rosu 5mm | 1 | Stimul vizual de start | | | LED rosu 5mm | 1 | Stimul vizual de start | | ||
| | Rezistor 220 Ohm | 1 | Limitare curent LED | | | Rezistor 220 Ohm | 1 | Limitare curent LED | | ||
| - | | Buzzer pasiv 5V | 1 | Stimul sonor de start, controlat prin PWM | | + | | Buzzer pasiv | 1 | Stimul sonor de start, controlat prin PWM (LEDC) | |
| - | | Buton tactil 6x6mm | 1 | Input reactie utilizator | | + | | Buton tactil 12x12mm | 1 | Input reactie utilizator | |
| - | | Display OLED I2C 0.96" SSD1306 | 1 | Afisare stare sistem si timp de reactie | | + | | Display LCD 2004 I2C | 1 | Afisare stare sistem si timp de reactie (20x4 caractere) | |
| - | | Convertor USB-UART CP2102 | 1 | Comunicare seriala cu PC | | + | | Breadboard 830 puncte | 1 | Prototipare circuit | |
| - | | Breadboard + fire jumper | 1 set | Conectica si prototipare | | + | | Fire jumper M-M | 1 set | Conexiuni intre componente | |
| - | | Sursa alimentare 5V USB | 1 | Alimentare circuit | | + | | Cablu micro-USB | 1 | Programare + alimentare ESP32 | |
| + | |||
| + | ==== Schema electrica ==== | ||
| + | |||
| + | {{ :pm:prj2026:bianca.popa1106:schema_electrica_czr.png?700 |Schema electrica Reflex Analyzer}} | ||
| ==== Schema de conexiuni ==== | ==== Schema de conexiuni ==== | ||
| - | ^ Pin ATmega324P ^ Componenta ^ | + | ^ Pin ESP32 ^ Componenta ^ |
| - | | PB0 | Anod LED rosu (prin 220 Ohm la GND) | | + | | GPIO5 | Anod LED rosu, prin rezistor 220 Ohm | |
| - | | PD5 / OC0B | Buzzer pasiv (semnal PWM) | | + | | GPIO18 | Buzzer pasiv + pin, semnal PWM prin LEDC | |
| - | | PD2 / INT0 | Buton (pull-up intern, cealalta latura GND) | | + | | GPIO4 | Buton tactil, configurat INPUT_PULLUP, cealalta latura la GND | |
| - | | PC0 / SCL | SCL display OLED SSD1306 | | + | | GPIO21 / SDA | SDA display LCD 2004 I2C | |
| - | | PC1 / SDA | SDA display OLED SSD1306 | | + | | GPIO22 / SCL | SCL display LCD 2004 I2C | |
| - | | PD1 / TXD | TX convertor USB-UART | | + | | VIN (5V) | VCC display LCD 2004 I2C | |
| - | | PD0 / RXD | RX convertor USB-UART | | + | | GND | GND comun pentru LED, buzzer, buton si LCD | |
| - | | XTAL1 / XTAL2 | Crystal 16MHz (cu 2x 22pF la GND) | | + | |
| - | | VCC / AVCC / GND | Alimentare 5V + 100nF decuplare | | + | **Nota:** ESP32 lucreaza la 3.3V logic. LCD-ul este alimentat din VIN/5V, iar comunicatia I2C se face prin liniile SDA si SCL. Modulul I2C al LCD-ului foloseste de obicei adresa **0x27**, dar unele module pot folosi **0x3F**. |
| ===== Software Design ===== | ===== Software Design ===== | ||
| Line 83: | Line 89: | ||
| ==== Mediu de dezvoltare ==== | ==== Mediu de dezvoltare ==== | ||
| - | * **avr-gcc + avrdude** — compilare si incarcare firmware in limbaj C | + | * **Arduino IDE 2.x** cu suport ESP32 prin pachetul Espressif ESP32 |
| - | * **VS Code** — editare cod firmware | + | * **VS Code + PlatformIO** — alternativa pentru editare si incarcare firmware |
| - | * **Python 3.11 + PyQt5** — aplicatie desktop | + | * **Monitor Serial (115200 baud)** — trimitere comenzi si verificare mesaje de stare |
| - | * **Monitor Serial** — debugging USART in timp real | + | |
| ==== Librarii folosite ==== | ==== Librarii folosite ==== | ||
| - | |||
| - | === Firmware (C / avr-gcc) === | ||
| ^ Librarie ^ Sursa ^ Rol ^ | ^ Librarie ^ Sursa ^ Rol ^ | ||
| - | | avr/io.h | avr-libc (built-in) | Acces la registrele I/O ale ATmega324P | | + | | Wire.h | Arduino built-in | Comunicare I2C intre ESP32 si LCD | |
| - | | avr/interrupt.h | avr-libc (built-in) | Gestionarea intreruperilor hardware | | + | | LiquidCrystal_I2C | Library Manager | Control display LCD 2004 I2C | |
| - | | util/delay.h | avr-libc (built-in) | Delay-uri de initializare | | + | | Arduino ESP32 LEDC | ESP32 built-in | Generare PWM hardware pentru buzzer | |
| - | | Driver SSD1306 I2C | open-source adaptat | Initializare display si afisare text | | + | | attachInterrupt() | Arduino built-in | Intrerupere pe GPIO4 pentru detectarea apasarii butonului | |
| - | === Aplicatie Desktop (Python) === | + | ==== Algoritm de functionare ==== |
| - | ^ Librarie ^ Rol ^ | + | Programul ruleaza pe ESP32 si este organizat sub forma unui automat finit de stari. Sistemul porneste in starea **IDLE**, unde asteapta comanda START primita prin USB-Serial. Dupa primirea comenzii, intra in starea **WAITING**, unde genereaza un delay pseudo-aleator intre 1 si 4 secunde. In aceasta perioada, daca utilizatorul apasa butonul, sistemul detecteaza un **false start**. |
| - | | pyserial | Comunicare seriala cu microcontrollerul prin USB-UART | | + | |
| - | | PyQt5 | Interfata grafica (ferestre, butoane, tabele) | | + | |
| - | | matplotlib | Grafic evolutie timp de reactie pe sesiune | | + | |
| - | | csv | Export rezultate in format CSV | | + | |
| - | ==== Algoritm de functionare ==== | + | Dupa expirarea delay-ului, sistemul intra in starea **SIGNAL**, activeaza LED-ul si buzzer-ul si salveaza momentul de start folosind functia **millis()**. Cand utilizatorul apasa butonul, intreruperea pe GPIO4 seteaza un flag, iar in loop() se calculeaza timpul de reactie ca diferenta dintre momentul apasarii si momentul semnalului. |
| - | Sistemul functioneaza pe baza unui automat cu 5 stari. La primirea comenzii S pe USART, se genereaza un delay aleator (LFSR 1-4s). Dupa expirarea delay-ului, LED-ul si buzzer-ul sunt activate simultan, Timer1 porneste cronometrarea. Intreruperea externa INT0 (buton) opreste timer-ul si calculeaza timpul de reactie. Daca butonul e apasat inainte de semnal, se detecteaza false start. | + | Rezultatul este afisat pe LCD 2004 I2C si transmis prin Serial sub forma `RESULT:<ms>`. Dupa cateva secunde, sistemul revine automat in starea IDLE. |
| ==== Automat de stari ==== | ==== Automat de stari ==== | ||
| Line 116: | Line 115: | ||
| Sistemul are 5 stari: | Sistemul are 5 stari: | ||
| - | * **IDLE** — asteapta comanda S de la aplicatie prin USART | + | * **IDLE** — asteapta comanda START prin Serial; LCD afiseaza mesajul de asteptare |
| - | * **WAITING** — genereaza delay aleator cu LFSR, Timer1 numara; INT0 activ pentru detectie false start | + | * **WAITING** — genereaza delay aleator 1-4s; LCD afiseaza "Gata..." si "Nu apasa inca!" |
| - | * **SIGNAL** — emite LED + buzzer, Timer1 restartat pentru masurare; asteapta apasare buton INT0 | + | * **SIGNAL** — activeaza LED-ul si buzzer-ul; LCD afiseaza "GO!" |
| - | * **RESULT** — calculeaza si trimite timpul prin USART, afiseaza pe OLED | + | * **RESULT** — calculeaza timpul de reactie, il afiseaza pe LCD si il trimite prin Serial |
| - | * **FALSE_START** — buton apasat inainte de semnal; avertisment sonor + USART + revenire la IDLE | + | * **FALSE_START** — detecteaza apasarea prea devreme a butonului, emite 3 beep-uri si afiseaza mesaj de eroare |
| + | |||
| + | ==== Comenzi Serial ==== | ||
| + | |||
| + | ^ Comanda ^ Directie ^ Efect ^ | ||
| + | | START | Utilizator -> ESP32 | Porneste o runda noua | | ||
| + | | RESET | Utilizator -> ESP32 | Reseteaza sistemul in starea IDLE | | ||
| + | | RESULT:<ms> | ESP32 -> Serial Monitor | Trimite timpul de reactie in milisecunde | | ||
| + | | FALSE_START | ESP32 -> Serial Monitor | Semnaleaza apasarea butonului inainte de semnal | | ||
| + | | STATE:<stare> | ESP32 -> Serial Monitor | Afiseaza starea curenta a sistemului | | ||
| ==== Surse si functii principale ==== | ==== Surse si functii principale ==== | ||
| - | * usart_init() — configurare registre UBRR, activare TX/RX | + | * **setup()** — initializeaza Serial, pini, LED, buzzer, I2C, LCD si intreruperea pe buton |
| - | * usart_send_int() — trimite numarul ca sir de caractere prin USART | + | * **loop()** — citeste comenzile Serial si gestioneaza tranzitiile automatului de stari |
| - | * timer1_start() / timer1_get_ms() — control cronometru hardware | + | * **showIdle()** — trece sistemul in starea IDLE si afiseaza mesajul initial pe LCD |
| - | * pwm_buzzer_beep() — ton PWM pe buzzer la frecventa data | + | * **startWaiting()** — genereaza delay-ul aleator si pregateste sistemul pentru semnal |
| - | * i2c_init() / oled_print() — driver display I2C | + | * **startSignal()** — activeaza LED-ul si buzzer-ul si porneste cronometrul |
| - | * lfsr_rand() — generator pseudo-aleator pe 16 biti | + | * **showResult(ms)** — afiseaza timpul de reactie pe LCD si il trimite prin Serial |
| - | * ISR(INT0_vect) — intrerupere buton: oprire timer sau detectare false start | + | * **goFalseStart()** — trateaza cazul in care butonul este apasat prea devreme |
| + | * **onButtonPress()** — rutina de intrerupere pentru buton, cu debounce software de 50ms | ||
| + | * **resetToIdle()** — reseteaza sistemul la starea initiala | ||
| + | |||
| + | ==== Detalii de implementare ==== | ||
| + | |||
| + | Butonul este conectat pe **GPIO4** si este configurat cu **INPUT_PULLUP**, astfel incat pinul este in stare HIGH in repaus si trece in LOW cand butonul este apasat. Detectia se face prin intrerupere pe front descrescator, folosind `attachInterrupt(digitalPinToInterrupt(PIN_BUTTON), onButtonPress, FALLING)`. | ||
| + | |||
| + | Pentru evitarea citirilor multiple cauzate de zgomotul mecanic al butonului, in rutina de intrerupere se foloseste un debounce software de 50ms. Variabila `buttonPressed` este declarata `volatile`, deoarece este modificata in ISR si citita in functia `loop()`. | ||
| - | ==== Aplicatie Desktop ==== | + | Buzzer-ul pasiv este controlat cu PWM hardware prin modulul **LEDC** al ESP32. Pentru semnalul de start se foloseste o frecventa de 1000Hz, iar pentru false start se emit 3 beep-uri scurte la 300Hz. La finalizarea unei probe valide, sistemul emite un beep scurt la 1500Hz. |
| - | Interfata grafica ofera butoanele Start proba, Stop sesiune si Export CSV. Comunicarea seriala ruleaza pe un thread separat pentru a nu bloca UI-ul. La fiecare proba finalizata, aplicatia adauga rezultatul in tabel, actualizeaza statisticile (medie, minim, maxim) si graficul matplotlib. | + | Display-ul LCD 2004 I2C este controlat prin magistrala I2C folosind pinii **GPIO21** pentru SDA si **GPIO22** pentru SCL. Pe LCD sunt afisate mesajele corespunzatoare fiecarei stari: asteptare, pregatire, semnal, rezultat si false start. |
| ===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||
| - | * Sistem functional end-to-end: buton ATmega324P USART aplicatie desktop | + | * Sistem functional end-to-end: buton -> ESP32 -> LCD 2004 I2C / Serial Monitor |
| - | * Precizie masurare timp de reactie: 4 microsecunde (limitata de rezolutia Timer1 la 16MHz/64) | + | * Masurare a timpului de reactie cu rezolutie de 1 milisecunda folosind millis() |
| - | * Latenta USART sub 5ms intre apasare buton si afisarea rezultatului in aplicatie | + | * Detectie false start functionala prin intreruperea de pe GPIO4 |
| - | * Detectie false start functionala in toate scenariile testate | + | * Feedback vizual prin LED si feedback sonor prin buzzer pasiv controlat PWM |
| - | * Display OLED afiseaza stari stabil, fara artefacte vizuale | + | * Display-ul LCD 2004 I2C afiseaza starile sistemului si rezultatul final pe 4 randuri |
| + | * Reset automat dupa afisarea rezultatului sau dupa detectarea unui false start | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | * Utilizarea Timer1 pe 16 biti cu prescaler 1/64 ofera o rezolutie de ~4 microsecunde, suficienta pentru masurarea timpului de reactie uman. | + | * Utilizarea functiei millis() pe ESP32 ofera o rezolutie de 1ms, suficienta pentru masurarea timpului de reactie uman. |
| - | * Arhitectura FSM (automat de stari) s-a dovedit esentiala — o implementare liniara ar fi ratat evenimentele de intrerupere sau ar fi blocat comunicatia USART. | + | * Arhitectura FSM (automat de stari) s-a dovedit utila pentru separarea clara a etapelor: asteptare, semnal, rezultat si false start. |
| - | * Generatorul LFSR produce o distributie uniform imprevizibila a delay-ului de start, simplu de implementat in C pur. | + | * ISR-ul pe GPIO4 cu debounce software de 50ms permite detectarea rapida a apasarii butonului si reduce efectul zgomotului mecanic. |
| - | * Provocarea principala: variabilele partajate intre main loop si ISR necesita declarare volatile. | + | * Display-ul LCD 2004 I2C permite afisarea locala a starilor si rezultatului, fara a depinde de o aplicatie externa. |
| + | * PWM-ul hardware LEDC al ESP32 permite controlul buzzer-ului fara a bloca permanent executia programului. | ||
| + | * Provocarea principala a fost sincronizarea corecta intre intreruperea butonului si logica principala din loop(), prin folosirea variabilelor volatile. | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| ^ Data ^ Activitate ^ | ^ Data ^ Activitate ^ | ||
| - | | 2026-05-05 | Alegerea temei, documentare datasheet ATmega324P | | + | | 2026-05-05 | Alegerea temei, documentare ESP32 DevKit V1 | |
| | 2026-05-07 | Achizitie componente | | | 2026-05-07 | Achizitie componente | | ||
| - | | 2026-05-09 | Montaj breadboard, testare USART | | + | | 2026-05-09 | Montaj breadboard, testare Serial | |
| - | | 2026-05-11 | Implementare Timer1 + INT0, masurare timp de reactie | | + | | 2026-05-11 | Implementare FSM, masurare timp de reactie cu millis() | |
| - | | 2026-05-13 | Implementare PWM buzzer + LED, testare false start | | + | | 2026-05-13 | Implementare PWM buzzer (LEDC) + LED, testare false start | |
| - | | 2026-05-15 | Implementare driver I2C + OLED SSD1306, integrare FSM | | + | | 2026-05-15 | Implementare driver LCD 2004 I2C, integrare FSM complet | |
| - | | 2026-05-17 | Scriere aplicatie Python + PyQt5, grafic matplotlib | | + | | 2026-05-17 | Testare comenzi Serial START/RESET si afisare rezultat pe LCD | |
| - | | 2026-05-19 | Testare end-to-end, debugging | | + | | 2026-05-19 | Testare end-to-end: LED, buzzer, buton, LCD si Serial Monitor | |
| - | | 2026-05-21 | Documentatie OCW, scheme bloc, poze montaj final | | + | | 2026-05-21 | Documentatie OCW, scheme, poze montaj final | |
| ===== Bibliografie / Resurse ===== | ===== Bibliografie / Resurse ===== | ||
| - | - [[https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega324P.pdf|Datasheet ATmega324P]] | + | - [[https://docs.espressif.com/projects/esp-idf/en/latest/esp32/|ESP32 Technical Reference Manual]] |
| - | - [[https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf|Datasheet SSD1306 OLED Controller]] | + | - [[https://github.com/espressif/arduino-esp32|Arduino ESP32 GitHub]] |
| - | - [[https://pyserial.readthedocs.io|pyserial documentatie]] | + | - [[https://github.com/johnrickman/LiquidCrystal_I2C|LiquidCrystal_I2C librarie]] |
| - | - [[https://www.riverbankcomputing.com/software/pyqt/|PyQt5 documentatie]] | + | |
| - | - [[https://en.wikipedia.org/wiki/Linear-feedback_shift_register|Linear-feedback shift register Wikipedia]] | + | |
| - Cursurile PM - Lab 1 USART, Lab 2 Intreruperi Timere, Lab 3 PWM, Lab 6 I2C | - Cursurile PM - Lab 1 USART, Lab 2 Intreruperi Timere, Lab 3 PWM, Lab 6 I2C | ||