This shows you the differences between two versions of the page.
pm:prj2025:atoader:raluca_aida.preda [2025/05/19 00:02] raluca_aida.preda |
pm:prj2025:atoader:raluca_aida.preda [2025/05/25 18:43] (current) raluca_aida.preda |
||
---|---|---|---|
Line 115: | Line 115: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | **Mediu de dezvoltare:** | ||
+ | * Arduino IDE | ||
+ | **Librării:** | ||
+ | * SPI.h – pentru comunicaţia SPI cu modulul SD. | ||
+ | * SD.h – pentru citirea de fişiere de pe cardul SD (findFirstWav, parseWavHeader). | ||
+ | * HX711.h – driverul standard pentru conversia celulei de sarcină (tare, get_units). | ||
+ | * avr/interrupt.h – pentru definirea şi folosirea ISR-ului Timer1_COMPA_vect. | ||
+ | * În plus, nu folosim nicio librărie I²C: am implementat “bit-banged” direct pe D2/D4. | ||
+ | **Structuri și algoritmi:** | ||
+ | * Structuri: | ||
+ | * Enumerare enum Unit { KG, G, ML, DL, OZ } — facilitează ciclarea între unităţi de măsură. | ||
+ | * Arrays pentru debounce (lastDebounceTime[3], lastBtnState[3]). | ||
+ | * Algoritmi | ||
+ | * Debounce simplu: compară starea curentă a fiecărui buton cu ultima, cu o întârziere minimă (debounceDelay). | ||
+ | * State-machine PWM-WAV: | ||
+ | * playing = false/true → ISR sau buclă principală porneşte/opreşte redarea. | ||
+ | * Logica threshold (dacă greutatea > 4.5 kg → porneşte WAV, altfel → opreşte). | ||
+ | * Bit-banged I²C: secvenţă de start, byte-by-byte, ACK/NACK, stop – implementată manual pentru LCD. | ||
+ | * Header parsing WAV: | ||
+ | * Sari peste „RIFF” + „fmt” (12 octeți), apoi citești câte 8 bytes per chunk până găsești „data”. | ||
+ | ** Funcții implementate:** | ||
+ | * setup() – inițializări (SD, PWM, Timer ISR, LCD, HX711, butoane). | ||
+ | * loop() – | ||
+ | * Debounce & acțiuni butoane (tare, lock, schimb unitate). | ||
+ | * Citire greutate și aplicare offset/tare. | ||
+ | * Control redare WAV după pragul de 4.5 kg. | ||
+ | * Conversie greutate în unități și afișare pe LCD. | ||
+ | * ISR(TIMER1_COMPA_vect) – citește octet cu octet şi scrie în registrele PWM. | ||
+ | * findFirstWav(), parseWavHeader(File &f) – căutare şi poziționare pentru fișierul WAV. | ||
+ | * I²C bit-banged routines: i2c_start(), i2c_write_bit(), i2c_read_ack(), pcf_write(), lcd_cmd(), lcd_data() etc. | ||
+ | * Debounce logic – în loop compararea stărilor şi actualizarea timpurilor. | ||
- | + | Codul sursă: {{:pm:prj2025:atoader:cod-cantar.zip|}} | |
- | <note tip> | + | |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== |