Ilyenkor, hogy is mondjam, akadok ki kissé, hogy milyen végtelenül következetlen az Arduino keretrendszer. És ilyenkor nem tudom eldönteni, hogy ez most bug vagy feature!?
És persze, nem nehéz átlátni a különböző változótípusok közötti átjárhatóságot, csak egy nulla szintű kezdő számára nem biztos, hogy helyes iránymutatás az, hogy "olvass és értelmezz valamit bináris módon, amit egy 16 bites decimálisan értelmezett térben tárolsz". A leírást köszönöm mindenesetre!
Alapvetően a fő kérdés az, hogy a buttonState miért int és miért nem bool?
A debugnak ez a szintje a circuits.io-n nálam már kiakaszt mindent. A rendes szimulációnál is kihullik a hajam néha, de ha belehasítanék egy ilyenbe, akkor megállna, mint a bot.
Hát pont ilyen ötletekre vadászok, mint ez a világítós.
Az a baj, hogy ezt egy közepesnél kevésbé szarabb rosszabb lépcsőházi automata tudja, ha van benne szervízüzemmód. És nem vagyok benne biztos, hogy drágább, mint az Arduinós megoldás bedobozolva, relével, stb.
A millis() overflow megoldást viszont tanulmányozom, köszi.
Igen, igazatok van. Valóban rosszul tettem fel a kérdést. Mentségemre szolgáljon hogy hulla fáradt voltam és még csak nem is értek hozzá :D Köszönöm mindenkinek a segítségeket. Próbálom memorizálni őket és ha legközelebb bármi bajom van akkor használni. Vargham, a te verziódat raktam össze(bár egyenlőre még csak próbapanelen). Tökéletesen működik, köszönöm!
A lámpa időzítős funkció közbeni lekapcsolására nincs szükség. Ez egy kinti lámpa lesz, ha valaki kimegy akkor megnyomja a gombot, a lámpa meg majd lekapcsol. Így működik a régi is. De ha valamit kell csinálni kint ami időigényesebb akkor bajos mindig nyomkodni a gombot, ezzel ez ki lesz küszöbölve.
A szimulátornak három hatalmas baja van: egyrészt roppant rendszerigényes (szerver és kliens oldalon is), másrészt nem real time, hanem lassúcska, harmadrészt nincs debug lehetőség egyáltalán.
Feltöltve találtam benne több hibát is, ezek egy része elég amatőr (hozzárendelés == sima = helyett). A maradékot még jó 20 percig debugoltam Serial Monitorral. Az if-ek egymásután és a bool-ok állítgatása kihozott olyan korrelációkat, amelyekből a bool-ok olyan kombinációja jött ki, amit nem vizsgáltam, emiatt végtelen ciklusba került. Az ok az egyszerűsítés: "ha B feltételt vizsgálom, tudom, hogy A feltétel mindenképp igaz, tehát akár ki is hagyhatom a vizsgálatból". No, ez marhára nem lett igaz, mert lett olyan eset, hogy B feltétel igaz volt ugyan, de az A feltétel egy korábbi vizsgálat eredménye képpen már nem teljesült. Már majdnem beleírtam egy újabb bool-t, de rájöttem. :-D Egyébként tényleg jó feladat.
Én időközben megírtam, most ellenőrzöm. millis() overflow figyeléssel. Egyedül watchdog nincs benne. Meg delay() egy szál se. Dezájnolva 99 sor és csak két mágikus szám van benne. 3 define (pinek), 5 boolean, 5 unsigned long, mind globális, bár csak egy függvény (void loop() ) van.
És asszem életemben először az ellenőrzött 'kész' program compile error nélkül futott le. #jonapomvan
De én kíváncsi lettem volna, hogy az eredeti kérdező hogyan fogalmazza meg a kérdést. Már csak azért is, mert rengeteget segít, ahogyan precízen megkonstruálja a kérdést.
Szóval a nem működik, mi a baja az nem kérdés.
Az a tapasztalatom, hogy egy precízen feltett kérdésre sokkal többen és sokkal pontosabban válaszolnak. Az szintén tapasztalat, hogy egy kérdés precíz megfogalmazása közben 10-ből 9 alkalommal meg is válaszolom magamnak, és nem kell fórumokon kérdezősködni. Egyszerűen a probléma logikus végig gondolása segít.
Tényleg jó feladat. A mellékelt kód viszont nagyon nem egészen ezt csinálja.
Sorban a gondok: 1. LED nincs kimenetként deklarálva. 2. A nyomógombot érdemes aktív LOW-két használni: pinMode(kapcsolo, INPUT); aztán digitalWrite(kapcsolo, HIGH); Ez a belső pull-up ellenállást bekapcsolja, így a bemenet folyamatosan (kis áramon) magas jelszinten lesz. Ha lemegy 0-ra (ilyenkor a kapcsoló másik felét a földre kell kötni), akkor van gombnyomás. Üzembiztosabb és kevésbé zajérzékeny. 3. Változók. Ez így nem jó. Forrás olvasásra. Itt: data types. A lényeg, hogy bár most még annyira nagy galibát nem okoz, komplexebb programok simán elhasalhatnak rajta, hogy nem következetesen vannak használva a különböző változótípusok. Az int numerikus változó, ennek nincs TRUE és FALSE vagy HIGH és LOW értéke, bár az igaz, hogy az IDE vizsgálatoknál értékelheti úgy, mintha lenne, de a hozzárendelés ebben a formában gondokat okozhat. 4. 20 mp-es delay nagyon nem szerencsés. Mi van, ha ez idő alatt le akarod kapcsolni a lámpát? (Megoldás a blink without delay példában az Arduino tudástárban [lásd fent].) 5. Az első vizsgálatban látható 1 és 4 mp-es kivárások közül az 1 mp-esnek van értelme (bár te 2 mp-et írtál), a 4 mp-nek viszont semmi. 6. Semmi nem vizsgálja a második (bekapcsolt állapotban lévő lámpa kikapcsolására adott utasítást).
Szeretnék csinálni egy nyomógombbal vezérelhető lámpát ami adott idő után lekapcsol. Ez eddig nem is gond, viszont úgy kellene megcsinálni hogy ha a nyomógombot nyomva tartom mondjuk 2 másodpercig akkor a felkapcsolva maradjon a lámpa, és mellette egy visszajelző LED, ami jelzi hogy nem időzítős módban van. A lámpa a nyomógomb újbóli megnyomására kapcsolna le.
int Lampa = 9; // LED Pin9-re kotve int LED = 8; // LED Pin8-re kotve int kapcsolo = 7; // nyomogomb Pin7-re kotve
int val = 0; // Nyomogomb int val2 = 0; //gomb hosszan nyomva void setup()
Ezzel több nehézség van: 1. 3 fázis 400 V a gép alap tápellátása, a belső mechanikus részek 230 V (egyik fázis). 2. Még a 230 V-os részen is van 4 ehhez hasonló elem, plusz egy motor, ami az összfogyasztásba beleszólhat, és pont az a pláne, hogy ennek az egy (pontosabban kettő) elemnek az állapotát kellene figyelni. Most már ott tartunk, hogy ha máshogy nem megy, minimálinvazív is lehet (kapcsolóra kötött saru lehúz, betold, mér.
Esetleg egy áramfigyelő relé a 230 aljzatra kötve ahová be van dugva? Vannak ilyen érzékenységű típusok. És egy relé kontaktot ad, van amelyiknél állítható is, milyen áramerősségre jelezzen be.
Szervusztok, Nyüglődök tovább. Korábban érdeklődtem non-invazív árammérés tárgykörében, és rendeltem is eszközöket, amelyek most jöttek meg. EZT és EZT.
Oké, a második minimálinvazív, alapvetően más célra vásároltam, ahol működhet (és fog is). Az érintésmentes fáziskeresőceruzás történetbe nem mentem bele, mert a berendezés belső felépítése nem teszi lehetővé a használatát (egyébként az is azonos elven működik, tehát sokkal nem lettem volna beljebb).
Namost. A mai mérések alapján az a nehézség támadt, hogy a mérendő eszköz áramfelvétele nem az (egész) apmeres, hanem a néhány tíz milliamperes tartományba esik: nem megy 100 mA fölé, legalábbis a gépen kívüli mérések alapján (az, hogy gépen belül mi történik, már egy más kérdés, ezt jövő héten tudom majd tesztelni).