Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Az egy másodperces lenyomást felejtsd el. Az függ programozási sebességtől, géptől,mikor nyomod le, stb. Addig tartsd nyomva amíg a sormintát abbahagyja és továbblép.
Sziasztok!
Lemásoltam ezt a programot majd feltöltöttem az arduino mini-re. Bekötöttem, működik is úgy ahogyan kell, viszont ahogy elengedem a gombot akkor még 5-6 mp-ig világít a led. Ez mi miatt van, hogy lehet kiküszöbölni a hibát ?
Nincs rajz, így nem látjuk hogy a gombok hogy vannak bekötve. Általában egy felhúzó ellenállás ellen szoktak testre dolgozni. Ha nincs felhúzó ellenállás (erről nem esett szó), akkor programból lehet a belső felhúzó ellenállásokat bekapcsolni. Ez nem történt meg. Arra gondolok, hogy nincs konkrét állapota a bemeneti pineknek, és össze vissza lebeg amikor elereszted, ez válthatja ki a fura működést az eleresztés után. Gondolom én.
Szerk.: Megpróbálhatod felhúzni hardveresen mondjuk 1k-val tápra. Vagy a kódba beleírhatod, hogy digitalWrite(gombB, 1); digitalWrite(gombJ, 1); Próba! A hozzászólás módosítva: Jún 8, 2020
Ebben az esetben a (digitalRead(gombB) == LOW) figyeli az aktív lenyomott állapotot.
És ha le rövidíted a futás időt?
Ahogy sargarigo írta, hiányzik a (fel-) esetedben lehúzó ellenállás. Bemenetnek konfigurálva a portok nagy impedanciával rendelkeznek, emlékeim szerint az adatlap mintha 100Mohm-ot írna, de nem biztos, és nincsenek fix potenciálon, vagyis a kisebb zavarjelek is befolyásolják. Működéstől függően a bemeneteket fel- vagy le szokták húzni egy-egy ellenállással. Általában 10k-t használunk, de lehet 4.7k vagy akár 1k is, de minél kisebb annál nagyobb lesz a nyugalmi áramfelvétel. Az atmegának van beépített felhúzója is amit be lehet kapcsolni, de annak használatához át kell írni a programodat alacsony szint figyeléshez a magas helyett , valamint a nyomógombokat nem tápra hanem GND-re kell kötni.
Ha a programodon nem akarsz változtatni akkor tegyél egy-egy 10k ellenállást a GND-ről Arduino bemenetre. A hozzászólás módosítva: Jún 8, 2020
Nagyon szépen köszönöm mindenki segítségét,tanácsát!
Végül is 9k ellenállást tettem a bemenet és a GND közé. Most már szépen működik. Akkor megpróbálok haladni a projektemben. Szerintem még jelentkezem segítségért ha nem gond.
Sikerült most ismét elakadnom.
Led villogtatásával vagyok bajban. Azt szeretném hogy a programom a D12-es lábán folyamatosan legyen magas jel, de eközben amíg ez fut, addig a D11-es lábon lévő ledem 1s ként villogjon amíg a D12-es lábon is jel van. A D12-es lábon 10s-ig van jel. Annyira állítottam az időzítőt. Ez a fajta sima villogtatás megy, de ezt nem tudom úgy a programomba beletenni hogy jó legyen.
Olyan lehetőség van hogy ezt az összefüggő kódot megtudjam hívni egy szóval például ? Bocsi ha nagyon nagy hülyeséget kérdezek.
A delayt felejtsd el ha több dolgot kell késleltetni.
Használd a millis() függvényt. A hozzászólás módosítva: Jún 8, 2020
A hozzászólás módosítva: Jún 8, 2020
Valami ilyesmivel kerülheted meg a delay-t:
Köszönöm ismét mindenki segítségét!
Bővebben: Link Ezt a megoldást magában tudtam használni. Villog a led. Viszont ha az én programomba beillesztem akkor nem villog, csak ahogy lejárt a Relé (10000)-es időzítője akkor kezd el folyamatosan világítani.
Vajon miért?
Mert a saját programodban még benne van a delay. Nem véletlenül mondtam, hogy kerüldd el. Jegyezd meg. A delay úgy késleltet,hogy közben nem tud a vezérlő mást csinálni. Már késő van, hogy sokat gondolkodjak, de valahogy így kellene kinéznie:
A gomb2 késleltetésével nem foglalkoztam, az 1 alapján azt is meg lehet írni. A hozzászólás módosítva: Jún 9, 2020
Probaltam nyomva tartani, de igy sem akarta. Teszek ezel is meg egy probat ma, es figyelni, abbamarad-e a sorminta. Neked is kosz a tippet.
Köszi!
Feltöltöttem az általad módosított progit. gomb1 megnyomására villog is a piros1 LED, viszont a 12-es(relé kimenete) nem aktiválódik. A 12-es kimenetre most egy ledet kötöttem hogy lássam hogy a 12-es kimenet aktív-e vagy sem. Mikor a gomb1-es megnyomom akkor egy nagyon halványan egy pillanatra felvillan a led. Azt nem értem hogy miért nem aktív a 12-es kimenet mikor ott van a progiban a 33. sorban hogy digitalWrite(rele, HIGH); .
Mert az időzítéssel irányítod a gombok beolvasását is, mikor a gombokkal kellene irányítani az időzítések indítását.
És még mindig van benne delaj! Azt lekel váltani egy másik időzítő ággal.
A hozzászólás módosítva: Jún 9, 2020
Itt egy jó példa a több időzítés egyszerre kezelésére:
Bővebben: Link
Szoktam használni egy egyszerűbb időzítést de ez nem mindig alkalmazható, másodpercenként végrehajt valamit:
if (millis() % 1000 == 0){ delay 1; //ha kell //.... } A hozzászólás módosítva: Jún 9, 2020
Így pedig le állíthatod az egész időzítést a previousMillis = 0-val:
Késleltetés helyett így is lehet játszadozni:
(az eredeti programban csak egymástől független időzítéssel villogott a két LED, itt már az időzítéseket és feltételeket igyekeztem átszabni az általad leírt követelményekhez igazodóan)
A hozzászólás módosítva: Jún 9, 2020
Kivéve, ha egy másik folyamatod fut, ami 2ms-ig tart, és a fv., aminek 1mp-ként kellene futnia, mindig vagy a 999-et, vagy az 1001-et kapja el. Na akkor nem fog lefutni.
Ami korrekt, és azonnal lefut, ha letelt az 500ms ÉS meghívásra kerül (tehát semmi sem blokkol a programban): unsigned long utolso,periodus=500; if (utolso+periodus<millis()) { utolso=millis(); // aminek futnia kell... }
Kezdem úgy érezni hogy iszonyú béna vagyok.
Az alapjaitól nem értem ezt az egész programot. Elég sok videót megnéztem mintaprogramokkal együtt amik magyarul voltak, de hát azok tényleg nagyon alapok. Azok mentek is. Itt viszont a komolyabb dolgoknál elég csúnyán elvéreztem. Miért nem működik a gomb megnyomására az egész ? Mit jelent a unsigned long ? Mit jelent a nowTime ? redTime gondolom a piros led ideje, ugyan így a greenTime. Mit jelent a boolean ? rState=LOW gondolom hogy a piros led alacsony szinten van gState=LOW ugyan az mint a zöldnél, alacsonyan van redTime = nowTime + 10000; Ez mit jelent ? greenTime = nowTime + 1000 Ez mit jelent ? Ez a program részlet mit takar pontosan a műveleti jelekkel együtt ? Ha eltudnátok nekem magyarázni valahogy azt nagyon megköszönném. nowTime = millis(); if(nowTime > redTime) { rState =! rState; digitalWrite(RED_LED,rState); redTime += 10000; }
A hozzászólás módosítva: Jún 9, 2020
Szia, próbáld fokozatosan az elejétől kezdeni, ajánlom (mint sokan már előttem is) a 60 napos tanfolyamot. Hidd el könyebb lessz építkezni rá ha megérted az alapokat (tapasztalat).
Szia!
Rendben,köszi! Jelentkeztem is erre a 60 naposra.
Szia, a
Így ajánlatos használni:
Ezt a problémát pedig a kezdő akkor fogja lekezelni, amikor már profi lesz!
Egyébként jogos a felvetés. Viszont ennek a hibának a valószínűsége nagyon minimális (nem nulla!), kezdőknél, és olyan alkalmazásnál, ami nem üzemelhet 50napig, nem fog gondot okozni. Átgondoltam, nem jó a megoldásod! A bekapcsolásnál, ha a millis kisebb, mint a periódus, folyamatosan le fog futni a fv! Unsigned long 300-ból unsigned long 500 egy óriási szám lesz! A hozzászólás módosítva: Jún 9, 2020
Tudom, de szerintem jobb ha így idegződik be az emberbe. Próbáld még egyszer átgondolni, Ha 0 a millis akkor 0 - 0 az 0 lessz ami kisebb mint a priodus(500) vagyis hamis a feltétel, tehát majd csak akkor lessz igaz ha eltelt egy periódus idő, ebben az esetben kb. 500ms múlva. Látom Kapu48 sem ért vele egyet, nem beszólni akarok vagy okoskodni , amit Kovidivi ajánlott az a helyes út, millis() függvény használata, csupán csak erre a pici dologra szerettem volna rávilágítani, mivel ha megszokjuk így, később probléma lehet belőle (személyes tapasztalat), ha pl egy projektünk huzamosabb ideig üzemel és ha megtörténik egyszer hogy belefutunk ebbe a hibába akkor nehezen fogunk rájönni hogy miért "fagyott" le az MCU, ami valójában nem fagy le csak vár kb 50 napig hogy a millis elszámoljon addig amíg teljesülni fog a feltétel. Nehéz így fórumon, lehet hogy több hangulatjelet kéne használnom hogy ne tünjön leszólásnak?Bocs Millis túlcsordulás , Nick Gammon is hasonlóan kezeli, sokat tanultam Tőle.
Itt elég részletesen ír a jelenségről, (ha gond valakinek az angol akkor csak a kódokat figyelje, önmagukért beszélnek).
|
Bejelentkezés
Hirdetés |