Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Én a menüből kilépéskor mentem a beállított adatokat , de ha fix értékek és sűrűn cserélgetni kell őket akkor jobb megoldás lehet a tömb használata az eeprom helyett
A hozzászólás módosítva: Ápr 25, 2019
Csináltam 50 memóriabankot, abba el lehet menteni. Bekapcsoláskor jön egy alap, amivel amúgy is megvizsgálom, hogy ez első indítás (friss install) vagy volt már használatban. Ezt a korábban linkelt projektből állítottam be. Még várok az alkatrészek egy részére, hogy kipróbáljam Úgy döntöttem egyenlőre, hogy nem mentek automatikusan, 51 bank elég kell legyen. (az 51. az alapbeállítás). Majd a próba után eldöntöm, hogy mi legyen vele.
Az eeprommal én úgy csinálnám, hogy felprogramozáskor törölném a tartalmát (FF értékkel tölteném fel minden bájtját). Attól függően hogy hány bájt egy keret, fognám az első keretet, kiolvasnám hogy minden értéke FF-e. Ha igen, akkor az az első üres keret, lehet írni bele az adatot. Kiolvasáskor szintén megkeresném az utolsó még nem FF tartalmú keretet, és az a keresett adat. Így minden írás új helyre kerül, nem terheled az eeprom bájtjait. Amikor a tárterület végét eléred, akkor megint törlöd az egészet, kezded a legelején. Szerintem így soha nem éred el a bájtonkénti 100k írást.
Főleg ha kombinálod azzal, hogy csak kikapcsoláskor írsz. Olvasni meg ugye tetszőlegesen sokszor lehet.
Ez az adat átadás/visszaadás fura néha pl: if.... setup() és működik a visszatérő adatokkal, pedig 5 adatot kapok vissza. Akartam, hogy az aktuális menjen a setupba a loopból if...setup(a,b,c,d,e,), át is adja, de vissza ebben az esetben nem kapok semmit, minden 0 lesz. Kínomban kiírattam minden lépés előtt az lcd-re a változót amit vissza várok és a return a; előtt még megvan az adat, de ahová visszatért, megint kiíratom és ott már 0 Ha elhagyom akkor a másik irányba nem megy át Tudom, hogy valamit nem veszek észre, csak még nem tudom, hogy mit Ha esetleg valakinek volna egy ilyesmire linkje, azt szívesen olvasgatnám Nem itt akarom terhelni vele a fórumot, csak akkor jövök ha végképp nem megy!
más: BigNumbers könyvtárat használ valaki? A 4-es és a 7-es karaktereknél hibádzik és nem jövök rá, hogy mi.
A függvény visszatérésekor egyetlen értéket ad vissza. Ha azt közben átnevezed az a te dolgod, őt nem zavarja. Ha több értéket akarsz visszaadni, akkor globális változókon keresztül tudod megtenni.
Ilyenkor azért jó lenne ha példakódot mutatnál, mert lehet hogy csak elírtál valamit.
Ha már kitapasztaltad a jó beállításokat, azokból 4-5 fog kelleni maximum. De ha 10 akkor sem gond. Ezeket fixen beírod egy választható menübe, és nem kell az eepromírással vacakolni.
Mellesleg a setup()-ot miért akarod a loop()-ból hívni?
A setup dolga hogy egyszer induláskor elinduljon, aztán átadja a vezérlést a loop-nak. Aztan meg az már magától loop-ol. Ne erőszakold meg
Nem rossz!!!
Most első bekapcsoláskor keresi az utolsó bájton, hogy egy általam beállított érték van vagy nem, ha nem akkor nullákkal írom tele a memóriát, mert van ahol a 255 hibás (például be lehet állítani, hogy hány alkalommal menjen végig a hegesztésen és oda max 20-at állítottam be) Az 50 bank, az 50x5 bájt, ezeket ha egyszer megtölti valaki, már csak olvasni kell, ritka, hogy átírja (ha mégis az sem számottevő). A maradékkal megpróbálom amit írsz, nagyon tetszik az ötlet Köszönöm!!!
A BigNumbers helyet használhatod ezt is. Minden számot és karaktert megjelenít és nem hibádzik.
Ez nálam weldsetup(); Már megint hamarabb küldtem el, mint gondolkodtam az itteni elnevezésen!
Erre kérhetnék egy gyakorlatias linket? Ha nem értem, majd jövök
Pár hete kezdtem az arduino-t, túl sok egyértelmű kérdést tennék fel, ami egy asztalnál ülve nem akkora gáz, mint itt Kár, hogy nincs senki a közelemben aki el tudna néhány dolgot magyarázni.
Hidd el, egyszerűbb ha mutatsz kódot, és az elnevezéseket mi már fejben átkonvertáljuk. De akkor nincs elírás. Az ördög többnyire a részletekbe bújik bele.
hát jelen pillanatban nem mutatnám meg a teljeset Tele van //-el , de majd ha emészthető lesz, visszateszem a githubra.
Ezt megnézem gyorsan! A bignumbers csak számok és nekem elég lenne a hőmérséklet kijelzéshez, amikor épp túlmelegedett.
Globális a változó ha a függvényen kívül hozod létre, tipikusan a program elején hogy ott legyen egy rakáson, könnyen megtaláld. Ha a függvényből változtatod az értékét, azt mindenki látja.
Ha lokálisan vagyis a függvény zárójelei között hozod létre, akkor annak értéke a függvényből való kilépés során megsemmisül. Helyi vagy munka változóknak hívjuk őket, és olyan értékek tárolására használjuk amire máskor már nem lesz szükség. Mivel megsemmisül, memóriatakarékos, azért szeretjük őket.
Ez a bigfont nagyon jó! Ment érte a mancs!
Itt épp settingsnek hívom, de volt már majdnem abrakadabra is a neve, nehogy az legyen a baja
a // után van egy próbám, de volt void-al is és akkor sem ment. A return után a változó neve stimmelt minden esetben.
A „packet = encoderValue;”-t tettem ár mindenhová, a return előttig mindig megvan az értékem.
És melyik értéked veszik el? A packet? Hogyan akarod kiírni? Szerintem ott rontod el (látatlanban), hogy a lokálisan létrehozott packet változót akarod globálisan a függvények kívülről használni. De mivel az már megszűnt léteznim a fordító jelez hogy hiányzik. Jól sejtem?
Ha igen, akkor a függvény nevével próbáld kiírni! println(packetsetup(érték)); A return hatására a függvény felveszi a változó értékét!
Egyébként szerintem ez nem jó:
Idézet: „void packetsetup(packet)” Helyette inkább: Idézet: „void packetsetup(int packet)” Itt létrehozod a lokális változót, de adj neki típust is! És nem kell mindjárt áttenni egy value változóba, használhatod simán is. A hozzászólás módosítva: Ápr 25, 2019
Azért látod benne, mert próbáltam már mindent amit a neten találtam Jelen pillanatban nincs semmi a zárójelek között és visszatér az értékkel jól viszont így a loopból (ahol szintén () van) híváskor nem adja át az épp aktuális értéket és a beállításkor egy teljesen másik értékről (az első néha semmi, néha az aktuális, a következő érték 300, a következő 400 az azt követő első alkalommal 500, de azután mindig 1000 míg az utolsó beáll az általam meghatározott maximum 150-re) kell állítani. Használható, de jobb lenne, ha csak egyet-kettőt kellene tekerni, ha épp 10-20ms-ot akarok állítani.
Az eddigieket az itteni segítségekkel és sok githubos projekt elemzésével értem el. Szeretek kész kódból tanulni, belenyúlni, elrontani majd megint rendbe tenni. Ezt köszönöm mindenkinek aki eddig is segített, közel a cél Kitakarítom a kódot és felteszem majd. Jelenleg van egy csomó változóm, amit már nem használok, van egy csomó // rész amit szintén nem, de még nem akarom kidobni Idézet: „void packetsetup(packet)” Ez soha nem fog visszaadni semmit, mivel a függvény void-nak lett deklarálva. Próbáld így: Idézet: „int packetsetup(int packet)” Arduino return leírás A hozzászólás módosítva: Ápr 25, 2019
Visszavonom az LCD Bignummeres kérdésem. LCD-t cseréltem és ezzel megy. A bigfont is rossz volt a másikon. A régi egy zöld, tavir-os kijelző, az új amin megy egy kék. Nem tudtam, hogy van kölönbség
Úgy sem ment, itt valami mást néztem be szerintem, valahol valami apróság lesz amin átsiklok. Nemsoká összeáll a teljes kód a hibámmal (nem csak ezzel valószínűleg ), takarítok benne kicsit és feltöltöm népítéletre
Addig is tedd fel a függvény meghívásának környékét! pl. +-5 sor a kódból, ott lesz a bibi.
settings:
Benne hagytam minden szemetet is A hozzászólás módosítva: Ápr 25, 2019
Ez így tényleg hiányos!
Kicsit jobban átnézve ezt a kódot néhány dolog egyből szemetszúrt. - A function változó hol van deklarálva? Gondolom global, mivel a settings()-ben értéket adsz neki. - Ha tényleg global változó a funktion, akkor gondoskodni kell a menudisplay() meghívása előtt annak kiürítéséről. Vagy innen ki kell vennia komment jelet. Idézet: (benne marad a button2.clicks értéke, így ha a button1.clicks-ből nem kap értéket (nem nyomták meg a button1-t), akkor ezek közül „// funktion = 0;” Idézet: lefuthat akármelyik az értéknek megfelelően.„if (funktion == 1) settings(); //{ digitalWrite(ledPin, HIGH); save();} // if (funktion == 1) serialmonitor(); if (funktion == 2) load(); if (funktion == 3) save(); ” - A packetsetup() függvény hiába ad vissza értéket, mivel a visszaadott értékkel nem csinálsz semmit. Így első blikkre ennyi. Többet a teljes kód ismeretében lehetne mondani. A hozzászólás módosítva: Ápr 25, 2019
A funktion=0 értékkel nullázom a gombnyomást és hol itt hol ott próbáltam, gyakorlatilag mindegy, hogy hol csak valahol az új lekérdezés előtt nullázni kell, különben megnyomottnak hiszi. Ez a clickbutton.h hozadéka, visszatehetném a button2.Update(); elé is, de mindenhonnan ezzel tér most vissza. Majd később visszateszem, gondolom kicsit kisebb lesz a kész program ha nem 100 helyen nullázom, csak jelenleg ezt is kipróbáltam, hogy lehet-e ez az ok. (az én hibakeresésem még sok helyen találgatáson alapszik, kezdő vagyok íratok az lcd-re, néha a soros portra, mikor mennyit kell lássak) Ez ebben a részben nem releváns, működik! Ami érdekes, hogy így visszakapom az adatokat! Így bekerül a loopba, ha függvény(akármi)-t használok a return akármi; nem ad vissza semmit. Valamit nagyon nem veszek észre, kis időt kérek még a teljes kódhoz, csak épp az imént felvetett eepromos tárolást kalapálom, tetszik ez a 255 kereséses dolog Az életben nem megy tönkre az eeprom ezzel
De a legjobb lenne a funktion változót elhagyni. pl. így:
A hozzászólás módosítva: Ápr 25, 2019
|
Bejelentkezés
Hirdetés |