Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok!
Arduino: 1.6.12 (Windows 10) az "open NUL: A rendszer nem találja a megadott fájlt" hibát adja minden fordítási próbálkozásnál. Idézet: „... Detecting libraries used... "C:\Users\***\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\Users\***\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.15\cores\arduino" "-IC:\Users\***\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.15\variants\mega" "C:\Users\***\AppData\Local\Temp\arduino_build_431899\sketch\Blink.ino.cpp" -o "nul" Generating function prototypes... "C:\Users\***\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR "-IC:\Users\***\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.15\cores\arduino" "-IC:\Users\***\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.15\variants\mega" "C:\Users\***\AppData\Local\Temp\arduino_build_431899\sketch\Blink.ino.cpp" -o "C:\Users\***\AppData\Local\Temp\arduino_build_431899\preproc\ctags_target_for_gcc_minus_e.cpp" open NUL: A rendszer nem találja a megadott fájlt. Error compiling for board Arduino/Genuino Mega or Mega 2560.” Találkozott már valaki ilyen hibával? Esetleg tudja a megoldását?
Kb hasonló végeredményre jutottatok (szerintem), mindketten azt állítjátok, nem omlik össze a processzor túlcsorduláskor, mindketten figyelitek a tulcsordulást, és ennek megfelelően korrigáltok, nem tanulmányoztam pontosan miben is nem értetek egyet, de kívülállóként kb ugyan azt írjátok.
Te ledeket villogtatsz az időzítővel, ő meg egy delay parancsot futtat, és annak az idejét méri.Képletesen te egy generátort építettél, ő meg egy periódusidő mérőt. A hozzászólás módosítva: Dec 9, 2016
Arduino UNO-d van és egy ethernet shield? Kábellel csatlakozol a routerre?
Vagy egy UNO és egy ESP8266, amit AT parancsokkal akarsz vezérelni? Vagy az ESP8266-ban akarod futtatni a programodat, UNO nélkül? Szerintema második lesz, igaz? Nálam is fut ilyen megoldás, csak közte még van egy adatbázis, abba tölti fel, és onnan olvassa ki a weblap. Tudunk segíteni, csak kicsit konkrétabban írd le mit is szeretnél. Bővebben: Link
Ha csak ezt látod? Akkor sajnos Te sem érted a lényeget!
A lényeg a várakozás használata nélküli időzítésben van! Amíg állsz a delay-ban addig nem veszed észre, hogy közben kellene valami sürgős beavatkozás máshol! És lemaradsz róla! Ezt küszöböljük ki a millis figyelésével! Az átfordulása csak 1 mellékes hiba, amit egyszerűen figyelmen kívül szoktunk hagyni! Valaki figyelmeztette erre, és az óta ezt nem sikerült meg értetni!
Ha ilyen kis dologból ilyen nagy problémát csináltok, mi lesz, ha majd komolyabb programot akartok írni egy ledvillogtatásnál. Nem az átfordulással van baj, jól kell tudni lekezelni. Egyébként nem muszáj megvárni azt, amikor magától átfordul, nullázhatjátok ti is akkor, amikor biztonságos, és nem lesz belőle probléma.
Atmega328-am van, egyedi gyártású nyák lapon.
ESP8266-tal WiFi-n csatlakoznék a routerre. Ha jól sejtem akkor kell valami software-serial könyvtár is, amin az arduinot használó atmega328 elküldi az adatokat a wifi modulnak és onnan a routerre. Nem tudom melyik lenne, mert még be kell szereznem a wifi modult, de előbb tájékozódni szeretnék, hogy milyen megoldások vannak és mit vegyek meg. Olvastam, hogy a wifi modul 3,3V-on működik és szintillesztést kell megoldani. Tehát elég sok dolog homályos nekem ebben a dologban.
Nullázd!
Ha neked annyira bonyolult az a 3 if feltétel ami írtam! A x = millis() függvény csak visszaad 1 értéket! Ez nem működök, hogy: millis(0) vagy millis() = 0 ????
Itt egy jó példa: Bővebben: Link
Software-serial könyvtár csak akkor kell, ha az ATMEGA nem hardveres serial portjára kötöd az ESP-t. Igen, az ESP 3,3V-os, én LM1117-3,3-at szoktam használni. De puffer kondi is kell a 3.3V-ra. A szintillesztéshez annyi elég, hogy az ATMEGA TX és az ESP RX közé kötsz egy 100ohmos ellenállást.
Az nyilván nem működik, mivel nincs paramétere. Ezt kár is volt leírnod.
Amúgy mindketten elkövetitek azt, hogy az idő mérésnél a millis() függvény kapott értékéhez adjátok hozzá a késleltetést, nem egy bázis adathoz, így a program hosszútávú pontossága romlik.
Talán így használnám inkább: setup rész: változó= millis(); változó = változó + késleltetés; főprogram ha millis() > változó { változó = változó + késleltetés nem pedig a kiolvasott érték+ késleltetés ( mert így az összes időzítéses hiba összeadódik.) } Egyik esetben az idők átlaga kb pontos lesz, a másikban meg minden idő egy picit hosszabb lesz.
Ez most ugyanaz amit én írtam.
Csak más nevekkel és kimaradt belőle a túlcsordulás figyelése! Vagyis az egyszerűsített forma! És a millis megszakításban változik, az nem csúszik el, attól. A hozzászólás módosítva: Dec 9, 2016
Nekem lehet szerencsém volt, az arduino is elment 3,3V-ról, még programozni is hagyta magát.
Majdnem...
Idézet: „currentMillis1 = millis(); // Beolvassuk a jelenlegi idot lastReadTime1 = currentMillis1 + intervallum1; // Ha összeadás” Én változatom szerint induló érték pl 1000 késleltetés 1000 feltétel .... millis() teljesüléskori értéke 1000 ....... 1002 2000 ....... 2002 3000 ....... 3002 te esetedben 1000 ........ 1002 2002 ........ 2004 3004 ........ 3006 És a hiba szerintem ennél durvább. A hozzászólás módosítva: Dec 9, 2016
Az egész programot nézd már!
Ne 2 kiragadott sort! Amik if feltételek közé vannak dugva! Inkább tölsd fel, és futtasd, hogy lás! A hozzászólás módosítva: Dec 9, 2016
Szia!
Idézet: „Egyébként nem muszáj megvárni azt, amikor magától átfordul, nullázhatjátok ti is akkor, amikor biztonságos, és nem lesz belőle probléma.” Akkor segíts már ebben : Bővebben: Link ! Köszi A hozzászólás módosítva: Dec 9, 2016
Mivel a program hurok bizonytalan hosszú, ezért bizonytalan, hogy az 1000-et pont elkapod.
Azért figyeljük, hogy nagyobb, mint 1000, mert azt biztosan elkapod. Ezért lett belőle 1001. Írjál 999-et ha pont ezret akarsz?
Feljebb a magyarázat!
És nem ez a lényeg! Leirom 100-adszor, a lényeg a DELAY elhagyása! Különben használj RTC-t!
Persze, elmegy. De gondolom vannak más hardverek is rákötve, amiknek kell az 5V. Egy ESP modul miatt nem érdemes az egész áramkört 3.3V-ról járatni. Egyszerűbb berakni egy szintillesztő ellenállást.
Azt tudom, hogy a Timer0-át használja a delay(); millis(); micros(); függvény.
A timer0 8 bites, minden 8. órajelciklusra lép egyet, 255-nél csordul túl. Ez a túlcsordulás van számolva a timer0_overflow_count változóban. Valahogy így van. A millis() függvényt a wiring.c fájlban meg tudod nézni.
Igy már értem ahogy levezeted a probléma okát...
esp8266 nodemcu esp-12 nél szeretnék wifin átküldeni uart rol uart ra adatokat (sdm.readVal SDM120C_xxxxx) ezt milyen protokol modon lehene ugy hogy a másik odalon Pc..android telefon sima szoftveresen lehesen csak fogatni TCP vagy hasonlo megoldásal?
köszönöm!
Sziasztok.
Segítséget szeretnék kérni a lenti program leellenőrzésében. Ez a második programom ami „hosszabb levegővételű”, így elég kacifántosra sikerült. Biztos meglehetne oldani a feladatot egyszerűbben is, erre is szívesen várom a megoldásokat. A feladat, egy ledszalag vezérlése, egyetlen egy nyomógombbal, (vagyis egy Infravörös akadály elkerülési modullal). 1 feladat, (led nem világit), nyomógomb megnyomása és kb. 2 másodpercen belüli felengedése után: - a led halványan elkezd világit és 300ms után fokozatosan emelve a fényerőt, idővel eléri a teljes fényerőt. 2 feladat, (led teljes fényerőn világit), nyomógomb megnyomása és felengedése után: - a led lassan elkezd halványulni és idővel teljesen elalszik. 3 feladat, (led nem világit), nyomógomb megnyomása és több mint 2 másodpercen túl nyomva tartva: - a led fényereje halványan elkezd emelkedni és fokozatosan emelkedve eléri a teljes fényerőt. - ha a fényerő szabályozás közben felengedem a nyomógombot, a fényerő szabályozás abban a pozícióban (fényerőn) megáll. 4 feladat, (led egy „közepes” fényerő pozícióban áll), nyomógomb megnyomása és felengedése után: - a „közepes” fényerő pozícióból a led lassan elkezd halványulni és idővel teljesen elalszik. 5 feladat, - Ez még nincs benne a programban - (led egy „közepes” fényerő pozícióban áll), nyomógomb megnyomása és több mint 2 másodpercen túl nyomva tartva: - a led a „közepes” fényerő pozícióból lassan elkezd tovább emelkedni és idővel eléri a teljes fényerőt. (Vagy, ha újból felengedem a nyomógombbot, megáll a fényerő szabályozás a pillanatnyi fényerő állásban.) Javaslatokat, (kritikákat) előre is köszönöm.
Elsőnek ilyen feltétel vizsgálat nem létezik: if(ido >> 199) ?
Bővebben: Link Esetleg igy: if(ido > 199)
Szia!
Nem rossz ez, ha megy és a célnak megfelelően működik, akkor miért ne lenne jó? Lehet félreértettem a feladatot, ha így van akkor bocsánat! Szóval én azt tenném, hogy a nyomógombot interruptra tenném, majd abban a függvényben csak azt vizsgálnám, hogy a nyomógomb lenyomása után mennyi idő múlva engedi fel. Ekkor egy változó, hogy 2sec-en belül volt-e vagy sem, illetve egy másik változó, ami a led állapotát jelzi. 1 ha ki volt kapcsolva, 2, ha 'köztes' 3 ha tutál fullon ment. (Másik, hogy a delay<>milis(), nem tudom, hogy jó e megszakítani a MC futását. A delay(20), pedig nem 2 mp, de ez lehet abból fakad, hogy elsőre nem értem a programod teljes mértékben.) A loop-ba pedig csak a kiíratást tenném, majd a változók értékétől függően egy-egy kiszervezett függvényhívással az adott állapotnak megfelelő led vezérlés. Ezekben a függvényekben pedig egy while ciklussal szépen lépésenként fel/le stb növelném a fényerőt, bármit. (abba is egy változót használnék, hogy mennyi idő alatt érje el a teljes szintet, vagy mennyen le 0 ra, az adott helyzetétől) De neked kell eldöntened, hogy melyik megoldás passzol legjobban a feladathoz.
Nos, akkor valamit nagyon össze kuszáltam, mert ha if(ido > 199) használom, akkor nem fut le az if utáni utasítás. A ny.g. megnyomása és felengedése után látom a Serial monitoron, hogy a „valtozo = 1” és az „ido = 68”-on áll. Ha megnyomom a ny.g.-ot megint egy kis időre és felengedem, az „ido 173”–lesz, és akkor sem fut le az „if” utáni utasítás.
A belinkelt oldalon látom, hogy a „>>” nem jó parancs, de ha így használom „if(ido >> 199)” akkor működik. Szerintetek mit kuszáltam össze?
A >> tök mást jelent, bitek eltolása jobbra.
Nos, mint írtam elég kezdő vagyok még.
Saját függvényt írni, na attól aztán még messzebb vagyok. Esetleg valami példa. Tanulni sose késő. A 2mp-es időzítés meg szerintem a serial monitor-ozás miatt csúszik el, mert én is más értéket számoltam ki elsőnek.
Akkor ebbe, bele kel merülni jobban.
Nem annyira bonyolult, sőt!
Ha megérted, akkor sokat segít, sokkal átláthatóbb kódokat tudsz írni. Egyszerű példákkal: Bővebben: Link Void, Int, stb.. Ezekre kell majd figyelned, semmi másra. |
Bejelentkezés
Hirdetés |










