This shows you the differences between two versions of the page.
pm:prj2025:iivasciuc:andrei_razvan.stan [2025/05/20 22:29] andrei_razvan.stan |
pm:prj2025:iivasciuc:andrei_razvan.stan [2025/05/21 20:58] (current) andrei_razvan.stan |
||
---|---|---|---|
Line 164: | Line 164: | ||
* **timeButtonPressed** | * **timeButtonPressed** | ||
* **historyButtonPressed** | * **historyButtonPressed** | ||
+ | ===Cum se realizeaza evaluarea unei expresii=== | ||
+ | Calculul expresiei introduse de utilizator prin tastatura se face manual, fara a folosi o biblioteca de evaluare matematica. In schimb, am ales sa folosesc un **algoritm clasic bazat pe doua stive** – una pentru numere si una pentru operatori – pentru a respecta **ordinea efectuarii operatiilor**. | ||
- | ===== Rezultate Obţinute ===== | + | Practic, functia **evaluateExpression** primeste un sir de caractere pe care le parcurge rand pe rand, in urmatorul mod: |
+ | - Se definesc doua stive: | ||
+ | * ''values'' – stiva pentru numere (''float'') | ||
+ | * ''ops'' – stiva pentru operatori (''char'') | ||
+ | - Cat timp intalnim un numar sau un '.' acesta este adaugat in buffer-ul num | ||
+ | - Cand se intalneste un operator, buffer-ul num este transformat in float si este adaugat pe stiva de valori | ||
+ | - Se compara valoarea de "precedenta" a operatului curent cu cea a operatorului din varful stivei de operatori | ||
+ | * daca operatorul din stiva are o **valoare mai mare sau egala** se aplica ultimelor doua valori din stiva de valori | ||
+ | * se repeta acest proces pana cand stiva de operatori este goala sau operatorul curent are o valoare mai mare | ||
+ | - Rezultatul final este ultimul element din stiva de valori. | ||
- | <note tip> | + | === Intreruperi === |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | * ISR-urile sunt folosite pentru: |
+ | * Butonul ''Time'' (pin 2) | ||
+ | * Butonul ''History'' (pin 3) | ||
+ | * Seteaza flag-uri volatile care sunt procesate in ''loop()'' | ||
- | ===== Download ===== | + | === Alte functii importante === |
- | <note warning> | + | * **saveToHistory(result)**: |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | * Salveaza rezultatul in EEPROM |
+ | * Actualizeaza indexul circular în EEPROM | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | * **loadFromHistory(index)**: |
- | </note> | + | * Recupereaza un rezultat salvat din EEPROM |
- | ===== Bibliografie/Resurse ===== | + | * **printTime()**: |
+ | * Afisează ora curenta citită din RTC | ||
- | <note> | + | * **showHistory()**: |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * Afiseaza rezultatul curent din istoric, indexat de ''currentHistoryView'' |
+ | |||
+ | * **clearCalculator()**: | ||
+ | * Goleste expresia, curata ecranul si revine în modul calculator | ||
+ | |||
+ | === Observatii === | ||
+ | |||
+ | * Pentru setarea orei initiale, se poate decomenta linia cu ''rtc.set(...)'' din ''setup()'', se incarca codul pe placuta, se comenteaza inapoi linia si se incarca din nou codul (pentru ca RTC-ul are o baterie si va 'incrementa' singur timpul). Timpul este calculat folosind macro-ul **__TIME__**, care ia ora de pe PC. | ||
+ | * Sistemul gestionează doar expresii fără paranteze deoarece nu mai aveam destui pini digitali pe Arduino sa mai adaug si butoane pentru paranteze. | ||
+ | * Istoricul este ciclic – la mai mult de 10 calcule, cele vechi sunt suprascrise | ||
+ | |||
+ | ==== Download cod ==== | ||
+ | {{:pm:prj2025:iivasciuc:proiect_pm_stan_andrei_razvan.zip|}} | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | |||
+ | <note tip> | ||
+ | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
</note> | </note> | ||
+ | |||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||