This shows you the differences between two versions of the page.
pm:prj2021:apredescu:lightmeter [2021/06/04 15:19] andrei.clicinschi [Hardware Design] |
pm:prj2021:apredescu:lightmeter [2021/06/30 20:31] (current) andrei.clicinschi |
||
---|---|---|---|
Line 83: | Line 83: | ||
- dreapta jos -> valoarea shutter speed-ului, calculata de arduino\\ | - dreapta jos -> valoarea shutter speed-ului, calculata de arduino\\ | ||
- | La inceputul programului sunt definite denumiri sugestive pentru utilizarile pinilor, apoi alias-uri pentru starile logice ale butoanelor si switch-ului. Urmeaza apoi variabile care retin starile elementelor hardware de input. Aceste stari (sau tranzitiile lor) determina schimbarea unor variabile de stare asociate exponometrului, nu sunt folosite direct in determinarea comportamentului aparatului. De exemplu, butonul 1, folosit pentru introducerea ISO-ului, are asociat pinul digital definit prin "#define SET_ISO_BUTTON 2", starea "int SET_ISO_BUTTON_state", iar la tranzitia BUTTON_NOT_PRESSED to BUTTON_PRESSED, se face toggle la variabila de stare "bool input_ISO". Aceasta variabila de stare este false daca ISO-ul a fost deja selectat (sau inca nu a fost inceputa selectia) si true daca exponometrul asteapta ca utilizatorul sa introduca ISO-ul prin encoderul rotativ, afectand comportamentul programului. In mod similar am procedat si cu celelalte butoane hardware, care controleaza variabilele hardware, care la randul lor controleaza variabilele de stare ale exponometrului. | + | La inceputul programului sunt definite denumiri sugestive pentru utilizarile pinilor, apoi alias-uri pentru starile logice ale butoanelor si switch-ului. Urmeaza apoi variabile care retin starile elementelor hardware de input. Aceste stari (sau tranzitiile lor) determina schimbarea unor variabile de stare asociate exponometrului, nu sunt folosite direct in determinarea comportamentului aparatului. De exemplu, butonul 1, folosit pentru introducerea ISO-ului, are asociat pinul digital definit prin "#define SET_ISO_BUTTON 2", starea "int SET_ISO_BUTTON_state", iar la tranzitia BUTTON_NOT_PRESSED to BUTTON_PRESSED, se face toggle la variabila de stare "bool input_ISO". Aceasta variabila de stare este "false" daca ISO-ul a fost deja selectat (sau inca nu a fost inceputa selectia) si "true" daca exponometrul asteapta ca utilizatorul sa introduca ISO-ul prin encoderul rotativ, afectand comportamentul programului. Pentru a detecta tranzitiile am folosit variabila "int SET_ISO_BUTTON_state_tmp". In mod similar am procedat si cu celelalte butoane hardware, care controleaza variabilele hardware, care la randul lor controleaza variabilele de stare ale exponometrului. |
Valorile pentru cele 4 variabile (ISO, ND filter, apertura, shutter speed) sunt memorate in niste vectori, programul avand memorat un index al valorii care trebuie afisata (sau -1 daca trebuie afisat '-'). O modificare a unuia dintre indecsi cu 1 corespunde unui stop de lumina, calculul setarilor fiind foarte usor. Se pleaca de la valoarea cunoscuta EV_100 = 0 (ISO = 100), pentru care apertura = F1 si shutter_speed = 1s, se scrie ecuatia liniara care modeleaza setarile, apoi se incearca pe rand indecsii din vectorul de aperturi si se calculeaza indexul de shutter speed corespunzator. Daca nu se gaseste nicio combinatie valida de indecsi, se afiseaza '-' la ambele setari, altfel se afiseaza prima pereche gasita, corespondenta celei mai mari aperturi posibile si celui mai scurt timp de expunere corespunzator acelei aperturi. | Valorile pentru cele 4 variabile (ISO, ND filter, apertura, shutter speed) sunt memorate in niste vectori, programul avand memorat un index al valorii care trebuie afisata (sau -1 daca trebuie afisat '-'). O modificare a unuia dintre indecsi cu 1 corespunde unui stop de lumina, calculul setarilor fiind foarte usor. Se pleaca de la valoarea cunoscuta EV_100 = 0 (ISO = 100), pentru care apertura = F1 si shutter_speed = 1s, se scrie ecuatia liniara care modeleaza setarile, apoi se incearca pe rand indecsii din vectorul de aperturi si se calculeaza indexul de shutter speed corespunzator. Daca nu se gaseste nicio combinatie valida de indecsi, se afiseaza '-' la ambele setari, altfel se afiseaza prima pereche gasita, corespondenta celei mai mari aperturi posibile si celui mai scurt timp de expunere corespunzator acelei aperturi. | ||
Afisarea se face prima data in interiorul functiei setup(), apoi in loop() de fiecare data cand a fost detectat un input de la utilizator (pentru a optimiza putin consumul de resurse). Starile butoanelor sunt verificate secvential in functia loop(), aplicatia nefiind una de mare viteza nu am avut probleme cu viteza de refresh si nici nu a fost nevoie sa fac debouncing. Pentru modularizarea codului am impartit functia de afisare in partea constanta (layout-ul ecranului) si valorile parametrilor, in functie de indecsi. | Afisarea se face prima data in interiorul functiei setup(), apoi in loop() de fiecare data cand a fost detectat un input de la utilizator (pentru a optimiza putin consumul de resurse). Starile butoanelor sunt verificate secvential in functia loop(), aplicatia nefiind una de mare viteza nu am avut probleme cu viteza de refresh si nici nu a fost nevoie sa fac debouncing. Pentru modularizarea codului am impartit functia de afisare in partea constanta (layout-ul ecranului) si valorile parametrilor, in functie de indecsi. | ||
- | |||
- | ===== Demo ===== | ||
- | |||
- | Demo-ul este disponibil pe [[https://drive.google.com/file/d/1I_gKK-2_kiL8-OvdUHfeHUZdSnjTsDNg/view?usp=sharing | Google Drive]] | ||
===== Poze ===== | ===== Poze ===== |