Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Klaszz a kód amúgy! Akkor nem értem miért nem megy.. Annyira nem látom át. A másik, hogy a button.ht- használja. Na ok, átnézem hátha meg is értem, de te jobban is értesz hozzá!
Na szóval! A hegesztő kódja nem az enyém, azt nem én írtam! Az lehet szép
Én csak a setupot szeretném a clickbutton (vagy rotary-clickkel, majd még kiderül mire megyek vele, mert azért vannak bajok a felfogásommal ) libbel megcsinálni. Tehát a klassz kód részlet nem az én érdemem, az enyém az a rész ami nem az a hegesztő kódja innen van!
No, azt hiszem értem. Az a baj, hogy minden egyes függvény önmagát hívja meg. Ez ok, de semmi sem állítja meg.
Szóval: Setup() ok main loop : Ok-nak tűnik, de nem az. Addig fut amíg a gomb nincs megnyomva, valamilyen eseményre. Az adott eseményre meghívódik egy függvény ami vagy önmagát hívja meg folyton, vagy egy másikat. Ezzel a vezérlés SOHA nem kerül vissza a main loop-ba. Egész pontosan melyik függvényből kellene visszatérnie? Illetve abban a függvényben MELYIK gomb eseményre? Valamelyik-ben egy IF szerkezetbe kell tenni az önnmaga meghívását. (Vagy mindegyikbe). Azaz, ha mondjuk hosszan nyomja akkor ne hívja meg önmagát! if functio==3 // Csak példa!!! { preweldtimesetup(); } Azaz NE minden esetben hívja meg önmagát, mert az végtelen ciklus lesz! A vezérlés mindig erre a kódra figyel, nem adja vissza a main-nek! A hozzászólás módosítva: Ápr 21, 2019
A loopból csak azt hagytam most meg ami a setupba ugrik, előtte hőmérsékletet figyel, utána a hegesztést indítja ha a gombot megnyomom és a végén meghívja a menudiplay-t. Ez a rész működik is, ha nem lépek ki a setupomba.
A hosszú gombnyomásra kilép a loopból a preweldtimesetup-ba, az mindaddig önmagát hívja, amíg meg nem nyomom röviden ugyan azt a gombot és közben figyeli az enkódert, hogy merre tekerjen (ez sem megy még, de majd! Előbb lépjen vissza a loopba ) Ha a gombot megnyomom, ugrik tovább a postprepausesetup-ra, ott ugayan ez a játék megy a postprepause változóval, majd gombnyomásra kilép önmagából és ugrik a weldtimesetup-ra. Itt is tekergethetem a weldtime értékét, de innen már nem megy sehová, illetve a loopba ha teszek egy delay(50)-et, akkor látszik, hogy felvillan a displaymenu, de valamiért marad (illetve vissztér) a weldtimesetup-ban. A loop() nem olyan hivatkozás amit így meghívhatnék, ezt már elolvastam, de itt megáll a tudományom. Lehet tényleg kellene egy külön setup-ot írni és azt meghívni, mert ha az véget ér, onnan visszatér talán. Most ezt bogozom, mert mint írtam, az egész kínai még nekem
Megjegyzés:
A program mutatója ebből a függvényből oda ugrik vissza ahonnan meghívtad. Természetesen csak akkor ha a rekurzióból kilépteted. Szóval ha a setup()-ból keveredik ide, és nagy nehezen kilépteted belőle, akkor a program futása a setup()-többi sorának kiértékelésével fut tovább. Az Arduino sajátossága, hogy ha nincs a setup()-ban utána semmi, akkor elkezdi futtatni a main loop-ot. Tehát, ha ezt a függvényt a main loop-ból hívod meg, akkor ebbe a függvénybe lép. Ha nem ugrasztod ki önmagából akkor örökké ez a függvény fut. Végrehajtja ami benne van, majd látja, hogy megint magával kell foglalkoznia. Nem ugrasztottad ki, ezért mindig ezzel a kódrészlettel foglalkozott a proci. Namármost, ha sikerült kiugrasztanod, akkor a main loop aban lévő következő sorral foglalkozik a proci. (ha onnan hívtad) Csak arra akartam felhívni a figyelmedet, hogy honnantól fut tovább a kód. A másik, hogy minden esetben fut a proci, csak nem látszik. A main loop másodpercenként sokszor futtatja a kódot, csak akkor van változás, ha teszel bele. (és ez igaz az önmagát hívogató (rekurzív) függvényekre is.) A hozzászólás módosítva: Ápr 21, 2019
Most nekiállok ismerkedni a függvényekkel Majd jövök még... Mint írtam, ha megvan minden alkatrész, tudok vele dolgozni az eredeti kóddal, legfeljebb minden állításhoz újrafordítom a kódot más értékekkel. Érdekel, hogy hogyan tudnám szépen és jól megírni. Ez a kódrészlet bemásolás és változónév átírás amúgy sem tetszett igazán, erre lehet megoldás a függvény. No, játszom tovább
Sokat tanultam az elmúlt 2-3 napban, hála a fórumnak! Köszönet neked is és mindenkinek aki segített eddig, de ne bízzátok el magatokat, jövök még
Ok, gyere csak.
Még valami: Nem biztos, hogy elég lesz CSAK kiugrasztani, mert ugyan kilép, de a kód többi részének feldolgozása onnan folytatódik ahonnan ezt meghívtad. Ha ott megint meghívod, akkor gond lehet! Rögtön rekurzió... Nem semmi!
Ezt hogyan gondolod, hogy önmagát hívja egy függvény?
Mikor meghívsz egy függvényt, a veremre kerül a visszatérési érték. Ami a hívás utánra mutat. Mikor kilépsz a hívott függvényből, leemelődik a veremről az előzőleg bele tett visszatérési érték, és ennek hatására ugrik vissza a folytatásra. Most te nem térsz vissza a függvényből, hanem állandóan hívogatod, állandóan pakolod a vermet. Ami ezáltal túlnövi a számára biztosított területet, és mindenféle előre nem látható hibákat okoz. Mivel felülír más feladatokra lefoglalt memória területeket! Ez így teljesen elvan rontva! Ha azt akarod, hogy valami ismétlődjön, akkor erre vannak a ciklus szervező utasítások. Tessék megtanulni a kezelésüket! Bővebben: Link Control Structure break continue do...while for return switch...case while A hozzászólás módosítva: Ápr 21, 2019
Ezt verem gond bennem is felötlött, írtam is korábban (illetve kérdeztem, hogy miként tudnám megnézni, hogy hogy állok hellyel). A goto ami most meglepett, nem ez az amit kerülni illik a modern programozási nyelvekben? Vagy keverem a gosub-al (ez is a verembe pakol és ha nincs visszatérés belőle, akkor az adat ott marad)? Hejj, mikor még a a jó öreg HL-en keresztül cseréltünk adatot, az volt ám a minden
A goto csak véletlenül maradt benne már kiszedtem!
Egyébként függvényen belül használhatsz gotot, de ha kiugrasz a függvényből, akkor már megint verem gondjaid lesznek. Amik nem rögtön szoktak előjönni, ezért nehéz megtalálni az ilyen jellegű hibákat.
Nem én írtam a kódot nekem sem tetszik. Most olvasom, hogy a mcu-k nem szeretik. Akkor ezt is tudom. Bár PC-n sok problémát ezzel a trükkel lehet gyorsan megoldani. Azt írják máshol, hogy egy hívás olyan 14byte-ot foglal. Ok, de akkor nem értem miért nem állt le a gép nála, mivel ez kb 200 hívás és fullon van a memória. De nem is annyira érdekel, kerülöm én is és kész.
De nem is ezzel kezdtem, hanem a do while-al és más megoldással. Mondjuk nem nehéz átírni olyanra a függvényeit.
A függvényeid majdnem jók!
Csak Do while kell bele. Addig fusson amíg a button state= 3, vagy amire ki szeretnéd léptetni. Te egy végtelen ciklus generáltál az önmagát hívó függvényekkel, ami ezek szerint nem jó.
Ez a legegszerűbb, ilyenkor mindhárom beállításon végigmegy minden esetben. Ezt később lehet finomítani. Elsőnek ilyesmi szerintem. Bocs 'Kapu' Nem neked szántam! A hozzászólás módosítva: Ápr 21, 2019
Köszönöm! Tehát már ott rossz irányba állt az iránytűm, amikor eleve a loop-ból hívtam meg az 3 setup első tagját (aztán tovább és tovább, ahonnan nem volt hová visszatérnie, mert címzésekkel ugráltam a hurkon belül is és abból ki is, ami persze az eredeti visszatérési értéket eltemette a verem mélyére, a loopra pedig nem lehet tovább (vissza) ugrani a nevével hivatkozva, mert nem függvénynév) és nem csináltam külön függvényt a beállításnak! Most már végig lépked és a végén visszatér!
Tehát a függvények alapja hiányzott, nem bontottam szét a feladatokat eléggé! Most valahol nulláznom kell az elején a nyomógomb változóját, mert rögtön ebben a beállításban kezd azután jön a KY040.
Idézet: „mindhárom beállításon végigmegy minden esetben” Akkor ne írd oda, hogy menü, mert ez nem az. Szimplán három érték beállítása.
Ok.
Azt is írtam, hogy innen kell továbblépni. Ezt nem olvastad. Példának, hogy mi hova mikor lép vissza. A hozzászólás módosítva: Ápr 21, 2019
Ezt javaslom átnézésre a menüvel kapcsolatban. Mindegyik struct-ba tehetsz stringet, mit írjon ki az adott menüpontban valamint függvényt is tehetsz bele, amit meghív, ha Entert nyomsz az adott helyen.
Bővebben: Link
Sziasztok.
Szeretnék készíteni egy vonalkövető robotot.De annyi eltéréssel,hogy nem vonalat kellene követnie.hanem egy kötelet. Jelenleg van idehaza 2 darab infra szenzorom szenzor Ezekkel lehetne-e a kötél távolságát mérve a robotot a kötélen tartani? Gondolom a vonalkövető robot programja nem jó,hisz az a fényvisszaverődést nézi,ha jól értelmeztem.
Köszönöm a linket (átnézem később), letettem a menüről (írtam is korábban csak utána leragadtunk a nevénél és azt használtuk, de nem menü már, csak adatok ), egyszerűbbnek tűnik most csak végiglépkedni a beállítandó adatokon. Az éjjel átrendeztem az egészet, vannak még gondjaim, de már egész jó. Változó átadással hívok meg egy függvényt, alakul Lehetne hosszabb a hosszú hétvége....
Az Arduino-ban van-e arra lehetőség, hogy a soros monitoron (vagy máshol) lássam, hogy melyik programsor hajtódik végre.
Üdv.
Ez most kijelentés volt vagy kérdés? Ha kérdés, akkor használd a Serial.print() és Serial.println() parancsokat ott, ahol a programnak végre kell hajtania valamit és te látni szeretnéd, hogy valóban ott tart-e.
Kérdésnek szántam. Valami hasonlót kereste, mint annak idején a Pascalban a trace ablak.
Van a debugWire nevű Atmel-specifikus megoldás, azzal tudsz debug-golni. Viszont ahhoz Atmel sw kell, és valamilyen ISP, szóval az Arduino IDE-vel nem fog menni. Itt tényleg csak az van, hogy kiírod a soros portra kódból, amit akarsz.
Idézet: „Ha valaki közületek használta már EZT a modult, esetleg ha van kedve meg próbálná EZT a könyvtárat hogy hogyan müködik vele?” Megvan az SPI kommunikáció is. Gondolom még akad csiszolgatni való rajta de egyenlőre használhatónak mutatkozik. Mit szóltok a kód szerkezeten van még mit csiszolnom bőven? Változtassak valamin és ha igen miért? Köszönöm
Nos már működik a hegesztő vezérlés, átvariáltam az egészet, de vannak még problémáim
Mindenek előtt itt a link a programhoz, szerkesztek majd hozzá kapcsolási rajzot is. A funkciók egyenlőre: 2 impulzusos hegesztés, maximum 20x ismételve. Beállítás, elmentés, beolvasás. A manuális nem megy, valahol elkallódik az a 0 ami állítaná , sőt máshol más adatok válnak kámforrá (mondjuk a beállításoknál örülnék ha onnan lehetne tovább állítani, ahol állt, de ez most valamiért nem megy, pedig ment). Ha esetleg átnézitek a kódot és kielemezitek, szívesen olvasnám a véleményeket. Minta projektekből építkeztem/tanultam és ez az első projekt amit összeállítottam (nem írok programozást, mert ez csak részben az) Szerettem volna a beállítást egyszerűsíteni, hogy ne copy->paste részek legyenek benne 5x, de elakadtam (részben már működik, majd a következő verzióban ha lesz) és már látni akartam működni (szerdán elvileg minden alkatrészem meglesz hozzá) Használom a ClickEnkóder könyvtárat, de a click részével voltak bajaim, így csak az enkóder részét használom ki, mert kezeli a gyorsulást és megy minden pin-en. EEPROMex az egyszerű save/load miatt, jó lenne egy bankot csinálni és több értéket tárolni/visszatölteni, ez is majd a köv.ver. Kérdések: Illene ezt szinkronizálni a hálózattal? Elvileg az SSR megoldja, hogy időben legyen ki/be kapcsolva, de azért a 10ms-os legkisebb beállítható érték összemérhető a hálózat frekvenciájával (100 vs. 50Hz). Lehetne, hogy minden beállítás után mentse el az adatokat az eepromba és így kikapcsolás után azzal az értékkel folytatná, ahol kikapcsoláskor állt. Mennyit bírhat a belső eeprom? Keresgéltem, de nagyon változó írásszámokat olvasok. Így hirtelen ennyi, örülnék ha átnéznétek és jöhet hideg/meleg, de leginkább úgy, hogy tanulhassak belőle.
Eepromot nem illik minden változó módosításakor átírni , "kopik".
Érdemesebbb egy "shadow" táblázatot használni amiben a fontos konfig adatok vannak , futási időben ide jegyezni az adatokat majd kikapcsolás kérésekor ezt lementeni az eepromba.Majd bekapcsoláskor setupban beolvasni. Igaz ekkor figyelni kellene a tápfesz elvételét , elvileg ezt a uC belső áramköri elemei és regiszterei ezt megteszik . Ez indítaná a shadow adatok mentését. vagy a ki/be kapcsolás indítása is egy -egy szabad port láb végezné el. Arduinos környezet ezt "kegyesen" elrejti és nem is rémlik , hogy kezelni is lehetne ezt belőle. Esetleg "alányúlva" ami nem egészséges, direkt uCbregiszter tartalmakat tekergetni. Esetleg egy külső akku, nagyobb pufferkondi csak a uC mellé ami addig életben tartja amíg eepromot kiírja. Igaz ekkor is kell egy nem tervezett táp elvesztést figyelő port. (Esetleg mágnes gyűrűstár használata , az kevésbé felejtő tápfesz megszünésére, kissé nagyobb lenne a panel).
Az én módszerem: ha valamit megváltoztatok, elmentem. Az EEPROM mondjuk 100 000x-szer írható újra. Tehát annyiszor lesz az EEPROM újraírva, ahányszor gombot nyomok (a gomb elkopik hamarabb). Plusz be szoktam építeni egy plusz védelmet, miszerint másodpercenként 1x lehet csak menteni.
A gyűrűstár épp elférne a mikrosütő trafója mellett
A nanoban van 1k eeprom, ebbe el lehetne párszor tárolni azt a pár bájtot amit használok. Az értékek ms-ban vannak, de 10ms-os lépésben lehet állítani, így ezeket a változókat most is /10-*10 módon kezelem az eepromba írás miatt is. A változók: ciklusok száma, most max 20, de ha 15-re csökkentem, akkor elférne fél bájtban. Az amit nem lehet 15x2 impulzussal meghegeszteni, lehet nem is kell meghegeszteni . Azután az első impulzus, azt követő szünet, hegesztés, szünet. Ez ha mind tárolni szeretném akkor az első legyen 1 bájt (ráhagyással ), a többinek is elég kell legyen 1, mert a 255 az már 2550ms, ami feleslegesen hosszú. Ez együtt 5 bájt. Így, most minden gyakorlati tapasztalat nélkül úgy gondolom, hogy 16 érték tárolása több, mint elég és nem is biztos, hogy minden beállításkor tárolni kellene, hanem gombnyomásra, amikor a user úgy találja, hogy ez éppen pont jó ehhez a munkadarabhoz. Esetleg saját szekvenciát is lehetne ezekből az értékekből kreálni és azt tárolni. A baj, hogy amíg nem dolgozom vele, addig ezek csak tippek. Na most ehhez keresnék valami minta programot, hogy hogyan tudok ilyet kialakítani.
Olvastam valahol, hogy egy véletlen ciklussal pár perc alatt sikeredett elérni ezt az értéket valakinek. Ebben a projektben mire végiglép a user az értékeken, több másodperc telik el, ami viszont nem azt jelenti, hogy a beállított érték használható is. Szóval itt elvetettem az automatikus mentést, inkább legyen opciós és most bekapcsoláskor betölt egyet úgy is az eepromból.
|
Bejelentkezés
Hirdetés |