This shows you the differences between two versions of the page.
|
pm:prj2026:cezar.zlatea:vasile.vornicescu [2026/05/19 16:56] vasile.vornicescu [Software Design] |
pm:prj2026:cezar.zlatea:vasile.vornicescu [2026/05/19 18:30] (current) vasile.vornicescu [Software Design] |
||
|---|---|---|---|
| Line 82: | Line 82: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | ==Mediu de dezvoltare:== | + | ===Mediu de dezvoltare:=== |
| * **Visual Studio** Code + **PlatformIO** | * **Visual Studio** Code + **PlatformIO** | ||
| * **C/C++** | * **C/C++** | ||
| - | ==Librării şi surse 3rd-party:== | + | ===Librării şi surse 3rd-party:=== |
| * **UTFT**: folosit pentru comunicarea cu ecranul conform standardului ILI9341. | * **UTFT**: folosit pentru comunicarea cu ecranul conform standardului ILI9341. | ||
| * **Petit FatFs** - FAT file system module: folosit pentru montarea unui sistem de fișiere FAT32, scriere și citire dintr-un fișier pre-existent (această librărie nu poate crea/modifica mărimea fișierelor). | * **Petit FatFs** - FAT file system module: folosit pentru montarea unui sistem de fișiere FAT32, scriere și citire dintr-un fișier pre-existent (această librărie nu poate crea/modifica mărimea fișierelor). | ||
| - | ==Modul de reprezentare al numerelor reale.== | + | ===Modul de reprezentare al numerelor reale.=== |
| Operațiile pe floats sunt lente pe ATmega2560. Am ales să folosesc operații pe virgulă fixă. Voi folosi 16 biți pentru partea întreagă și 16 biți pe partea fracțională, respectiv, o valoare reală va fi reprezentată de un ''int32_t''. | Operațiile pe floats sunt lente pe ATmega2560. Am ales să folosesc operații pe virgulă fixă. Voi folosi 16 biți pentru partea întreagă și 16 biți pe partea fracțională, respectiv, o valoare reală va fi reprezentată de un ''int32_t''. | ||
| - | ==Modul de randare al funcțiilor 3D== | + | ===Modul de randare al funcțiilor 3D=== |
| Așa cum am mai menționat, pentru a evalua o funcție, aceasta va fi evaluată pe un grid NxN. Aceste puncte, fiind în 3D trebuie proiectate în spațiul 2D al ecranului. Pentru aceasta, am definit un punct origine unde va fi centrat gridul. Acest punct va reprezenta punctul **look at** pentru proiecție. Camera va fi mereu poziționată pe o sferă de rază R (camera orbitează punctul de origine) și se va uita la punctul de look_at. Poziția camerei pe sferă va putea fi schimbată cu unul dintre joystick-uri iar pozișia originii cu celălalt. | Așa cum am mai menționat, pentru a evalua o funcție, aceasta va fi evaluată pe un grid NxN. Aceste puncte, fiind în 3D trebuie proiectate în spațiul 2D al ecranului. Pentru aceasta, am definit un punct origine unde va fi centrat gridul. Acest punct va reprezenta punctul **look at** pentru proiecție. Camera va fi mereu poziționată pe o sferă de rază R (camera orbitează punctul de origine) și se va uita la punctul de look_at. Poziția camerei pe sferă va putea fi schimbată cu unul dintre joystick-uri iar pozișia originii cu celălalt. | ||
| Fiecare 3D punct din grid, va fi conectat cu vecinii săi cu o linie, iar obiectul final va fi un fel de "line mesh". Nu voi randa explicit triunghiuri. Deoarece primitivele nu vor fi triunghiuri ci linii, nu este necesar un test de adâncime, respectiv un framebuffer, care ar fi mult prea mare pentru a încăpea în cei 8KB de SRAM. | Fiecare 3D punct din grid, va fi conectat cu vecinii săi cu o linie, iar obiectul final va fi un fel de "line mesh". Nu voi randa explicit triunghiuri. Deoarece primitivele nu vor fi triunghiuri ci linii, nu este necesar un test de adâncime, respectiv un framebuffer, care ar fi mult prea mare pentru a încăpea în cei 8KB de SRAM. | ||
| - | ==Logarea datelor== | + | ===Logarea datelor=== |
| User-ul își va putea salva funcțiile preferate pe un SD card. Pentru aceasta voi folosi **SPI**. Înițierea SPI-ului este realizată în fișierul ''spi.h''. Pentru montarea și lucrul cu fișiere voi folosi librăria externă Petit FatFs. Fișierul pentru funcții ''data.txt'' deja există pe cardul SD. Acolo voi stoca funcțiile în formă simbolică. | User-ul își va putea salva funcțiile preferate pe un SD card. Pentru aceasta voi folosi **SPI**. Înițierea SPI-ului este realizată în fișierul ''spi.h''. Pentru montarea și lucrul cu fișiere voi folosi librăria externă Petit FatFs. Fișierul pentru funcții ''data.txt'' deja există pe cardul SD. Acolo voi stoca funcțiile în formă simbolică. | ||
| - | ==Algoritmi și structuri de date:== | + | ===Algoritmi și structuri de date:=== |
| * **Geometry.h**: aici am definit diverse funcții geometrice și matematice ce operează pe tipul de date descris în secțiunea precedentă: | * **Geometry.h**: aici am definit diverse funcții geometrice și matematice ce operează pe tipul de date descris în secțiunea precedentă: | ||
| * Operații primitive pe numere în virgulă fixă: | * Operații primitive pe numere în virgulă fixă: | ||
| Line 121: | Line 121: | ||
| - | asaaaa | + | ===Elemente de UI și User Experience=== |
| + | ==UI== | ||
| + | Pagina de pornire va permite utilizatorului să tasteze o funcție de la tastatură, încarce una deja existentă de pe micro SD sau să marcheze funcția tastată pentru salvare. Va fi un meniu simplu, în partea de sus va fi o bară unde funcția curentă va putea fi vizualizată simbolic. | ||
| + | ==User Experience== | ||
| + | Deoarece tastatura are doar 16 butoane, voi folosi 2 "layout-uri". Unul din cele 16 butoane va schimba layout-ul: | ||
| + | * Layout 0: | ||
| + | * Butonul de schimbare layout (1 buton). | ||
| + | * Buton de ștergere ultim caracter (1 buton). | ||
| + | * Cifre 0-9 (10 butoane). | ||
| + | * 2 variabile: x, y (2 butoane). | ||
| + | * Operatorul '(' și ')' (2 butoane). | ||
| + | * Layout 1: | ||
| + | * Butonul de schimbare layout (1 buton). | ||
| + | * Buton de ștergere ultim caracter (1 buton). | ||
| + | * Buton de finalizare, treci la plotarea functiei (1 buton). | ||
| + | * Operații elementare '+', '-', '/', '*' (4 butoane). | ||
| + | * Operații avansate ''sin'', ''cos'', ''exp'', ''log'', ''floor''. (5 butoane). | ||
| + | * Operatorul '(' și ')' (2 butoane). | ||
| + | * Toggle save for SD. (1 buton). | ||
| + | * Open saved functions menu (1 buton). | ||