Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Igen van még egy két funkció amit bele kell venni. Ezeket én is most gondolom át
Nos, átdolgoztam a kódodat, itt mellékelem. A "C" kódja az "A" és "B" alapján készült, de szerintem azok sem működnek jól, majd kipróbálod. Ami az elakadásodat illeti, arra a válasz az, hogy elszámolunk 38-ig, megcsináljuk amit kell, aztán számolunk tovább 18-ig, és csak utána nullázuk.
Nem kell variálni a const int és társaival. Ha valami konstans és nem változik, akkor mehet #define sorba. Lehetőleg kerüld az egy betűs változóneveket, mert semmit mondóak. Továbbá kerülendő az angol és magyar elnevezések vegyes használata. Célszerű úgy struktúrálni a kódot, hogy ami ismétlődik az mehet külön eljárásba (függvény aminek nincs visszatérési értéke). Na elég a fejtágításból, jöjjön a kód:
Szuper lett,köszönöm.
A fejtágítást nyugodtan adhatod,mert csak így tanulok
Remek!
Azt javaslom, hogy hasonlítsd össze a kódodat az enyémmel, és próbáld meg kitalálni a változtatások okait! Nem mondom hogy az enyém etalon, de kiindulásnak jó lesz. Teszteld, és mehet tovább a fejlesztés!
Egy apró tanács, mindkettőtöknek.
Én a
jellegű összehasonlításokat inkább fordítva szoktam felírni, így:
Mert így ha elgépelem és egy egyenlőségjelet írok, akkor lesz szép syntax error az eredménye, meg is mutatja hogy hol hibás, és a javítás is triviális. Míg az első esetben simán lefordul, de a feltétel mindig true lesz, és bónuszként változó értékét is felülírod, és az ilyen dolgokat a legnehezebb kiszúrni. (Kollegákkal szokott olyan lenni, hogy "Gyere már ide légyszi és nézz rá, egy órája nézem és nem jövök rá, hogy mi a baj". Aztán aki odamegy szűz szemmel, az csak simán rámutat, mert az ő szemét meg kiszúrja, aki pedig elkövette az ilyen hibát az meg már keresi a hibát 1-2 órája. Az ilyen elütések tipikusan ilyen sz***tós hibák...) A hozzászólás módosítva: Okt 30, 2018
Plusz egy dolog: A kódba nem írunk olyat, hogy 8. Angolul magic constant a neve, és érdemes kerülni. Mert mi 8? Nem tudni. Kell adni neki valami beszédes nevet, ami segíti a programozót a kód olvasásában.
Például:
vagy
Ez utóbbi jobb is, mert típusa is van a konstansnak.
Ez speciel nincs meg, és nem is nagyon értem.
Srácok! Az előző hozzászólásra nem is reagáltam mert végülis igaza van. Ez utóbbi is igaz. De most kezdőket próbálunk a megértés felé terelgetni. Nem az a fontos hogy tökéletes kódot írjon, hanem hogy értse meg hogy lesz a led kikapcsolva a 18 lépés után. Szvsz.
Szerintem az _is_ a lényeg.
De ez itt nem egy specifikus, "segítsünk a kezdőknek" topic, hanem általános, pl. pár hónapja épp egy attiny pwm-freki állítgatást beszéltünk meg itt. Amit írtam szerintem nem a tökéletes kódról szól, hanem csak egy hasznos módszer, ami elsőre furcsának tűnik ugyan, de segít elkerülni egy szivatós hibát. Kezdők is használhatják, haladók is, már ha akarják, nehézség nincs benne.
Valóban, de a "constexpr uint8_t cUpperLimit = 8u;" még téged is megfogott, és nekem is idegenül néz ki. Természetesen a segítő szándék az egyetlen ami számít, és köszönet jár érte vargham és számodra is.
Mindössze azt bátorkodtam jelezni, hogy vyky még a void használatával sincs tisztában, éppen most próbál porból és hamuból ismereteket gyűjteni, és festőgépet alkotni. Tiszteletre méltó a szándék és a lelkesedés. Jó dolog amikor valaki lépésről lépésre felfedezi ezt a világot! Nem kellene mindjárt a mélyvízzel összezavarni. Ettől még a közösség nem kezdő, nem akartam senkit sem megbántani a hozzászólásommal. Peace!
Meg, nem követem az újabb C-* szintaxisokat, a Kernighan-Ritchie nagyjából elég volt eddig nekem, szóval shame on me, ez a constexpr valóban új nekem.
Abban viszontkétségkívül igaza van vargham fórumtársnak, hogy célszerű kerülni az ilyen "if (5 == myVariable){//something;}" típusú dolgokat a kódban, ezeket a konstansokat szép beszédes névvel ki kell tenni a kód elejére. Különösen igaz ez akkor, ha ugyanazt a konstanst több helyen is használunk, akkor sokkal nehezebb a módosítása. Én se akartam senkit se megbántani, ezek csak javaslatok. Neked pedig kalapemelés jár azért a segítségért, amit itt a kezdőknek nyújtasz.
Szép reggelt. Mindenkinek köszönöm a segítséget. Igen sokat kell még tanulnom ezt,de érdekel,és teszem is.Sajnos az angol nem megy,így elég kevés az a forrás ami magyarul elmagyarázza mi,mit csinál.
Még van jó pár funkció amit bele kell írni,de azt megpróbálom magam megírni,persze jövök úgy is ,ha nem megy Az hogy mit hogy kell,hogy illik,most tanulgatom. Idézet: „ezeket a konstansokat szép beszédes névvel ki kell tenni a kód elejére” Pontosan ez a lényeg. A #define az pont úgy működik, mint a search/replace. Vagyis bután kicserél mindent a forráskódban a preprocessor, nem a fordító. A típusos konstans használata azért jobb, mert ott már a fordító végez ellenőrzést, és már fordítási időben tudja jelezni, ha hülyeséget csinálsz. Ugyanezért érdemes enum-ot használni felsorolásokhoz int helyett. A számítógépnek mindegy, de a programozónak nem.
Az első példában simán meghívhatod a függvényt -1, vagy akár 45327 paraméterrel is. Nem fog szólni a fordító, hogy ez hiba. Hiszen nem szintaktikai, hanem logikai hiba. A második esetben viszont kizárólag a definiált enumokkal tudod meghívni. Tisztább, biztonságosabb, egyértelműbb. Ha hibázol, már fordítási időben kiderül. Ugyanezért érdemes a paramétereket kis a betűvel kezdeni (argument), a konstansokat c betűvel, egy osztály tagváltozóját m betűvel. Így a kódban azonnal látszik, hogy egy-egy név milyen hatókörben látható. Ezek természetesen C++ példák, mert az Arduino is C++ nyelvet használ. C-ben is lehet egyértelmű és biztonságos kódot írni, de C++ nyelven könnyebb. A hozzászólás módosítva: Okt 31, 2018
Azt megkérdezhetném, hogy a V ^= 1; sor mit csinál? Nem találkoztam még ilyen megoldassál.
A hozzászólás módosítva: Okt 31, 2018
Invertálja V értékét. Ha 1 volt nulla lesz, és viszont. Másik megoldás hogy V = 1 - V;. Én inkább ezt szeretem.
A hozzászólás módosítva: Okt 31, 2018
Szia!
Ez azt jelenti, mintha ezt írtad volna: V = V ^ 1;, azaz kizáró vagy kapcsolat és a V között ( nézz utána, ha nem megy kapásból az XOR igazságtáblázata!) és ez azt eredményezi, hogy a 0.bit invertálódik !
Ez teljesen más, mint amit leírtál. Csak akkor igaz, ha a változó értéke 0 vagy 1. Ha nem 1 és nem nulla, akkor már nem tud "invertálódni".
Az a V nevű változó így nem jó. Azaz könnyű elrontani.
1. Miért nincs hosszabb neve? 2. Miért int? Miért nem bool? Hiszen igaz vagy hamis lehet csak. A legszebb azonban az lenne, ha az Arduino nem csak félig lenne C++, és a HIGH meg LOW az nem #define lenne, hanem enum class operator overloadinggal, és akkor sokkal elegánsabb és olvashatóbb lehetne a kód...
A kérdező beidézte a kódból, és a kódban tényleg ezt csinálja. Úgyhogy nem teljesen más, hanem jelen esetben tök ugyanaz.
A hozzászólás módosítva: Okt 31, 2018
Szia.Sajnos sok dologgal még nem vagyok tisztában ,ezt tudom,rajta vagyok,hogy minél előbb pótoljam a hiányosságomat. De pl nem tudom miért jobb a bool mint az unt,szóval ennek is utána nézek.
Magyar nyelvű C++ tankönyv, I. fejezet - A C++ alapjai és adatkezelése
A hozzászólás módosítva: Okt 31, 2018
Sziasztok!
Olyan nyomásszabályozó eszközt keresek, amire arduinoval tudok értéket küldeni. Valaki találkozott már ilyennel? 5 bar-ig elég lenne és tizedenként legyen állítható. Köszi
Szia sajnos ilyenről ÉN ne hallottam gép,de mihez kell? mert pl van motoros szelep Link
Ezt tudod állítani, szabályozni.
Szia!
A Festo-nak találkoztan és használtunk elektromos nyomásszabályzó szelepjét. 0-10Vdc-vel lehet szabályozni és változatos nyomáshatárokkal lehet kapni.
Hali!
Esetleg típust tudsz? Árban hol van?
Hali!
Olyan verzió is jó lehetne, hogy egy nyomásmérő és egy-egy töltő,-ürítő szelep. Csak ugye megbízható mérés és precíz szabályozás lenne a lényeg. Ehhez meg nem filléresek az alkatrészárak, sajnos.
Üdv!
Talán ez segíthet: Github SEN0257 Pressure Sensor . És itt még el is adják. Valamint ajánlanak hozzá szolenoid szelepet is. Viszont a felbontása/pontossága nem egyértelmű. |
Bejelentkezés
Hirdetés |