Stránka 3 z 3

Re: Jednorozměrné pole

Napsal: 23 dub 2020, 15:28
od Patrik
Patrik píše:
23 dub 2020, 15:25
KiRRow a má to i nejaký jiný přínos například kromě přehlednosti? Například že to méně zabere místa v paměti?

Pavle, děkuji... Budu rád, když se na to koukneš.. Ano. Zamítnuto napíše vždy... Tzn. pokud uživatel projde přes schváleno a pak má ten daný čas v b (cyklus třeba těch 40 s jsou otevřená ty relátka) tak mu to na konci napíše pak zamítnuto a vypíše na LCD cislo jeho karty vlastně v DEC soustavě (po dobu 15 sekund)... Stejně tak když zmáčkne tlačítko ke stopnutí času, tak mu to také napíše zamítnuto, ale ještě se rozsvítí postupně 3 LED diody a pak pohasnou.

A z jiného projektu jsem použil pouze načtení bitů z RFID čtečky a převod do desítkové soustavy a pak volám vlastně tu funkci printBits () . Já zde také budu až večer a mrknu ještě na to.

Tzn. zamítnuto se má opravdu objevit vždy a pokaždé... ale pokud karta byla nactena poprvé tak se má pred tím prostě provést cyklus s promennou b a byt ty relatka otevreny az na 40 s... A to se mi práve po "nulovani hodnot" jen u nekterych karet neprovede... proste schvaleno, rozsviti se modra led dioda a hned zamitnuto a zhasne.

Re: Jednorozměrné pole

Napsal: 23 dub 2020, 15:41
od kiRRow
Přehlednost kódu je absolutní minimum přínosu. Přístup a práce s tímto polem je uplně něco jinýho. S pamětí je to diskutabilní ... teoreticky počet dat je stejný, takže by rozdíl být neměl.
Nejbrutálnější rozdíl jsem poznal při ukládání do eeprom. Místo složitého počítání na které adrese jsem a co by tam tak mělo být, tak jsem vytvořil datovou struktůru a tu jako celek vložil do eeprom. Uloženo. Při načítání, jsem vytvořil znovu tu struktůru, a jako celek ji z eeprom natáhnul a jednotlivé položky struktůry zapsal do řídících proměnných programu. Načteno.

Re: Jednorozměrné pole

Napsal: 23 dub 2020, 22:00
od Patrik
Děkuji za cenné rady, opravdu si toho moc vážím.. :-)

Re: Jednorozměrné pole

Napsal: 24 dub 2020, 05:07
od gilhad
Jasne, mega ma vic pameti (ja uvazoval UNO a ostatni 328) a tak ti tak rychle nedojde a zasobnik se vleze snadno (pokud tam neni nejaka chyba v kodu, spis asi ne) - UNO by tech 2402 bytu uz nedalo.

Jinak kdyz ti to nefunguje spravne a nevis proc, tak je prehlednost cennejsi, nez cokoli jineho :) (Natoz kdyz pameti mas dost a rychlost te taky netrapi)

Navic kdyz si veci zprehlednis, tak casto mimochodem prijdes i na to, jak to udelat lip a usetris jak pamet, tak i zvysis rychlost.

Nemluve o tom, ze jakmile to mas jednou prehledne a funkcni, tak se s tim da delat mnohem lip a treba i cilene to upravit na mensi spotrebu pameti, na vetsi rychlost, na vic polozek, lepsi funkcnost ...

Je dobre zacit s mensim programem, ktery je prehledny (vcetne spravneho odsazovani a tak) a nedela skoro nic, ale funguje spravne - a pak tam pridavat jednu vec po druhe a mezitim to vzdy otestovat - pokud to najednou prestane fungovat spravne, tak je na 80+% chyba v tom poslednim kousku funkcnosti, co jsi pridal - a pokud je to jen par radku, tak se da najit snadno.

Pokud nejdriv napises velky program co "umi vsechno" a pak teprve zacnes zkouset, tak vetsinou jednak netusis, kdde je chyba, jednak je tam tech chyb vetsinou vic a nekdy se i navzajem maskujou.

Na prvni pohled se zda, ze zacit s malym a prehlednym a porad dokola testovat a pridavat jen kousicky je strasne pomale, ale v praxi usetris strasne casu na ladeni a hledani chyb. (A mam to osobne vyzkouseno na spouste projektu od par desitek radku po par stovek tisic radku kodu)

Re: Jednorozměrné pole

Napsal: 24 dub 2020, 07:42
od ondraN
gilhad má naprostou pravdu. Třeba pro mě je nejdůležitější, nejdříve získat celkový odhled, než si sednu ke klávesnici. Nejprve si celou věc nechám jen tak běhat v hlavě. Někdy stačí den a je jasná představa, jak to řešit. Někdy mi to trvá třeba celý měsíc, než jsem spokojený. Pak začnu s kostrou programu, funkce si píšu jako prázdné a místo kódu do nich dávám komentář, co by se v nich mělo stát. Třeba pak zjistím, že je nějaká nepotřebná, nebo že by bylo výhodné nějaké sloučit. Pokud potřebuji nějaku práci s HW, tak si otevřu nový sketch a v něm si to vyzkouším. Když to funguje, udělám z toho funkci, která naplňuje popis v hlavním kódu a pak ji tam mohu rovnou zkopírovat.
Další věc jsou komentáře. To, co se děje je zřejmé ze zápisu kódu. V komentáři by mělo být, proč jsem to udělal. Psát, třeba, při nějakém přiřazení, že jsem do B dosadil A je k ničemu. Ale když si napíšu že s A budu dále něco dělat, co změní jeho obsah ale původní hodnotu budu stále potřebovat, to je podstatně důležitější.
Je mi jasné, že každý má asi trochu jinou metodu, ale chce to zkoušet a najít si, co ti bude nejvíc vyhovovat a pak to půjde už samo :P

Re: Jednorozměrné pole

Napsal: 25 dub 2020, 09:49
od Patrik
Děkuji pánové,

zkusil jsem kód celý překopat, vytvořit nové podmínky,... Chci se jen zeptat. Se starým kódem, když byly takové problémy, tak došlo k tomu, že se kontroler zastavil (prostě přestal probíhat cyklus) a na LCD displeji zůstal zobrazený nápis a kurzor byl na displeji jakoby na písmeně U (když provádíte změny)... nevím proč... Znamená to, že byla z nějakého důvodu překročená paměť? Nahrál jsem kód nový, který zatím funguje bez problému (všichni kdo to vyzkoušeli) ovšem po asi 6 hodinach se na LCD displeji prvniho radku zacalo zobrazovat vyšší kontrast (jako by na displeji někdo přidal potenciometrem) - text šel vidět ale jen pod určitým úhlem... Už nemám problémy s rušením displeje (nezobrazují se mi nesmyslné texty, které se mi zobrazovaly)... Nyni mám stíněnou krabičku od LCD displeje, vodiče a také samotný kontrolér od Arduina, ale toto mě zaujalo... Při přehrání programu se to vrátilo do původního stavu... Zkusil jsem přidat lcd.clear (); na začátek cyklu a po nulování hodnot.

Re: Jednorozměrné pole

Napsal: 11 kvě 2020, 06:54
od seta1J
Jen na rychlovku mě napadlo zda při deklaraci takto
unsigned int pocet [216] = {}; //
se shodují pozice v jednotlivých polích. Např v poli "pocet" bude zápis na pozici 2 a v jiném to nebude na pozici třeba 5. Takže nesedí proti sobě. Při tomto
unsigned int pocet [216] = {0,0,0,0,0, ............., 215}; //
by k tomu dojít nemohlo.

Re: Jednorozměrné pole

Napsal: 30 kvě 2020, 09:51
od Patrik
Problém ustal při nulování všech hodnot prvků pole (i těch co byly = 0). Děkuji.