Hirdetés
-
Négy játékkal is szemez az új Arc meghajtó
ph A 31.0.101.5522-es, WHQL aláírással rendelkező csomag egy hibát is javít
-
Rövid videón a Black Myth: Wukong
gp A sokak által várt játék a tervek szerint augusztus végén debütál PC-n és konzolokon.
-
Színészek hangjait lopta el egy AI-cég
it Az USA-ban bepereltek egy AI-céget, mert a vád szerint ellopták a színészek hangjait, majd AI segítségével a saját céljaikra használták azokat.
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Teasüti
nagyúr
válasz zsolti_20 #10079 üzenetére
A fénytanokhoz sajnos nem konyítok sokat, de az egyértelmű a doksiból, hogy igen is és nem is.
A három alapszín fényerejét méri és egy színszűrő nélküli csatornát referenciának. Így, h fekete szín, arra csak a fény hiányából lehet következtetni. Ha a szenzoron van világítás (általában ilyen szenzorokra szoktak rakni egy magas CRI mutatójú ledet) és van egy sztenderd megismételhető mérési módszered, amiben kiszűröd a külső zavaró tényezőket, akkor ki tudod kísérletezni a fekete színt mérésekből (ezeket az eszközöket kalibrálni szokás). A fehér szín talán egyszerűbb, az gondolom látszik a frekvenciából ha kb egyenlő mértékben szaturálnak a színek. Bár fingom sincs hogy kell értelmezni a jelet, amit ez a szenzor küld.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz llacee #10087 üzenetére
Van ilyen topikunk, ahol imádják a Sonoff hack-elős és msqtt/domoticz szerveres kérdéseket. Ott nem tudnak segíteni?
-
Teasüti
nagyúr
Szép estét!
Van itt aki több fülön ír programot? Előfordult már olyan, hogy nem találta a program a függőségeket és hiába rakom be akár a program mellé a referált könyvtárat, egyszerűen nem látja és hibát dobál a típus definiálásakor.
Próbáltam <> és "" jelekkel is behívni a könyvtárt, sikertelenül.
A program legelső fülén (a fő fájlban) konkrét példaként szerepel egyMPU6050 mpu;
sor. Ez az osztály az MPU6050.h fájlban van, amit betettem a program mellé. Meg is nyitja a többi füllel együtt, és rohadt idegesítő, hogy egy kattintásra van az osztály a definíciótól, mégis 'MPU6050' does not name a type hibát dob.Van vkinek bármi elképzelése miért?
-
Teasüti
nagyúr
Ahogy nézem a gomb kezelésed még nagyon-nagyon primitív. Volna egy erős gyanúm, hogy ez kb az első programod lehet és nem foglalkoztál még túl sokat a témával.
Jelenleg csak annyit csinálsz, hogy lefut az első feltétel ha nyomod a gombot és a második, ha nem.
Ez sajnos még elég messze van a kitűzött céltól, de ajánlanék egy tutorialt, ha megy az angol. Ez egész jó bevezetőnek tűnik az időzítő használatába.
A goto-ra meg nem lesz szükség. Mivel a loop() végtelen ciklusban fut, ezért felesleges vissza-vissza ugrálni a kódban, mivel úgyis kezdi elölről. -
Teasüti
nagyúr
Kérhetnék egy kis segítséget a PCNT-vel ESP32-n? Nem találok egyetlen egy példát sem.
-
Teasüti
nagyúr
Nyomógomb épp most volt terítéken nálam, itt egy konkrét példa.
Az utolsó oldalon láthatod a teljes kódot, amiben benne hagytam egy már nem használatos részletet is, ami a nyomvatartást kezeli.
Ha további magyarázatra lesz szükséged, írj bátran!(#10176) Imy
Itt némi zavart érzek az erőben. Miért szeretnéd leállítani a loop()-ot? Ha azt megállítod, akkor csak reset után fog újraindulni a program. Amúgy ki tudsz lépni belőle egy simareturn;
paranccsal, de innentől megáll működni a processzor. Ha egy feltételes várakozás kell (feltételes program stop, ha ez ismerős), akkor azt csinálhatod egy while ciklussal, ami végtelenül fut amíg nem teljesül a feltétele. De ezekre igazán semmi szükség, hisz maga a loop() is végtelenül ismétlődik, viszont ha a gombnyomásodtól függően indítasz el feltételeket, akkor megcsinálhatod úgy, hogy egész egyszerűen átugorja a parancsokat az if-ben egészen addig, amíg nem teljesül vmeyiknek a belépési feltétele. Ilyen formában nem áll meg a program működése, mégis kvázi üresen fut a loop().(#10170) ecaddsell
Pulse counter kellene frekvencia méréshez. Hardveres lehetőleg. És Arduino IDE-ben.(#10171) vargalex
Igen, természetesen. A működő példaprogramból emeltem át a szükséges sorokat egy az egyben, természetesen a helyüknek megfelelő sorrendben elhelyezve.
A második fülön lévő header fájl hívja meg az MPU6050.h könyvtárat, amiben meg definiálva van az MPU6050 osztály. Ez így ebben a formában simán lefordul a párhuzamosan megnyitott példaprogramban. Ötletem sincs itt miért nem.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz vargalex #10179 üzenetére
Azt a header fájlt egy az egyben másoltam át a példából. Az alap könyvtár meg nincs módosítva.
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz vargalex #10179 üzenetére
Vagy ha úgy érted, hogy a Motionapps20 header fájlból van-e több példány is, akkor igen. Van egy módosítatlan a könyvtárban és a módosított meg a program mellett. De nem gondolom, hogy ez probléma lenne. Ha nem a program mellettit töltené be, akkor nem az osztályra dobna hibát, hanem sok másra.
Meg a példában simán lefordul így. -
Teasüti
nagyúr
válasz ecaddsell #10183 üzenetére
Hát mondjuk megszakítást használni és programból számolni. Az szoftveres és sokat elvesz a cpu időből, ha nagy a frekvencia.
Értékelem a segítséget, de sajnos nem tűnik számomra használhatónak egyik sem.
Az első az ESP-IDF-hez íródott, miközben én Arduino IDE-ben vagyok.
A második meg egyáltalán micsoda? Nem fogom tudni visszafejteni azt a kódot, ahhoz túl nagy és bonyolult.
Főleg, hogy egy rakás hardver közeli függvényt hív be, amikről fingom sincsen.Vmi Instructables.com színvonalú példa nincs véletlen? Én nem találtam...
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Teasüti #10184 üzenetére
Viszont ezt kipróbálom. Holnap. Mert a mai estém teljes egészében sz.pással és kutatással telt...
-
Teasüti
nagyúr
Ez így jelenleg halva született. Ennyi delay() mellett nem lehet időt számolni. Ezzel így max billenőkapcsolót tudnál használni, azt nem kell időzíteni. Ha gombnyomást akarsz mérni, ahhoz másodpercenként többször ellenőrizni kell a gombot, vagyis gyorsnak kell lennie a programnak. Ennyi delay()-el 4-5 másodperc legalább, mire egyszer lefut a loop(). A lineáris gondolkodás még hiányzik, de majd kialakul ha megérted, hogy nem muszáj minden egyes ciklusban végigmenni az összes parancson.
Ezért használunk feltételeket, hogy szabadon ki-be ugrálhassunk az elágazásokba. Így lehet, hogy egy If parancs csak minden századik ciklusban fut le. Vagy ezredik. Vagy százezredik... Ha millis()-el időzítesz, akkor eltelt időt számolsz milliszekundumokban. Ezt feltételben vizsgálod, hogy igaz-e a reláció:if (millis() > temp + 1000) { }
. Ideális esetben nincs megakasztva a program ennyi delay-el és mire teljesül pl. az 1000 ms várakozási idő, addigra akár sokezerszer ismétlődhet a loop(). Futhat akár üresen, ha egyik elágazásba (feltételbe) se ugrik bele, vagy csinálhat addig akármi mást is. -
Teasüti
nagyúr
Átírtam neked a programod.
Lefuttatni nem nyilván nem tudom, de ránézésre kb jónak tűnik.
Elvileg bekapcsolásra oda-vissza jár a léptetőmotor (feltéve ha ez a része jól működött az eredeti programnak) és felvillantja a led-et a mozgás végén. Majd két másodperc múlva újra.
Hosszú gombnyomásra megáll és két másodperces villogtatásba kezd, majd 1 perc elteltével újraindul a motor.Amúgy a Stepper.h könyvtár blokkolja a program futtatást, amíg mozgásban van a motor. Vagyis addig nem ugrik a következő sorra, amíg be nem fejezi a mozgást. Ez problémás lehet. Pl. nem tudom ez a könyvtár milyen hardvert használ (Timer, Int, stb.). Ha kikapcsolja a megszakításokat, akkor a millis() nem fog számlálni a motor léptetése közben.
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz ecaddsell #10187 üzenetére
Na jó, de azért mentségemre szolgáljon, hogy ez amit most találtam kb 30 sor az egész.
Amit te linkeltél, ott az egyikről elképzelésem sincs mit csinál, a másik pedig... Ágyúval verébre.Először hallok erről a VHDL-ről.
Én naiv azt hittem vmi CAD félében terveznek processzorokat...
Soha nem hallottam még ilyen "program" nyelvről.
Akkor te saját microchip-eket tervezel? -
Teasüti
nagyúr
válasz ecaddsell #10196 üzenetére
Most néztem át ezt, de ebben nincs megszakítás kezelés.
Itt csak kiolvassa a függvény a számlálót a loop()-ban.
Természetesen már szoftveresen számolom ki a frekvenciát, vagy ezt hogy érted? Ha jól értem ezt a programot a számlálás maga nem szoftveres. Nem változóban számolja a megszakításokat, hanem regiszterben. És függetlenül attól mit csinál a cpu, legalábbis remélem. Ennyiből áll a pulse counting, nem? Vagy van rá hardveres gyorsítás, ahol a pulzusok számából frekvenciát köp ki eredményül? Meglepne...Nem akarom túlbonyolítani a dolgot. Nekem elég annyi, hogy a program blokkolása nélkül tudjon számolni és igény szerint kiolvasni ezt az értéket.
Ezt hogy kell elképzelni? Vmi olyasmi, mint ESP32-nél a tetszőlegesen beállítható GPIO mátrix?
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Janos250 #10198 üzenetére
Igen.
Hardveres számlálás és szoftveres kiolvasás. Nekem ennyi bőven elég.
Közben átnyálaztam a PCNT driver-t is, hogy milyen függvényeket használ.
A rotary encoderes példa csont nélkül betalált (bár a srác eredeti szándéka szerint nem tudom a rotary encodernél mi az elképzelés a control pin használatára). Összeraktam a saját példámat ez alapján (copy & paste) és kipróbáltam egy PWM csatornára kötve. Szuperül működik.
Azt még nem tudom, a PCNT és az RMT az ugyanaz a hardver vajon, vagy csak a véletlen műve, hogy mindkettőben 8 csatorna van? Azért, mert legalább 6 csatornát használni kívánok az RMT-ből, de lehet mind a nyolcat idővel.Ha már szóba hoztad az RMT-t, akkor kérdeznék:
Szerinted azzal célszerűbb volna frekvencia modulált jelet létrehozni, mint a PWM vezérlővel?
Jelenleg a ledcpwm-et használom erre 50% kitöltéssel és a frekvenciát váltogatom (illetve szeretném váltogatni, de még nem jutottam el a próbáig). Viszont az előzetes tesztjeim szerint a ledcpwm nem igazán működik 0 Hz közelében. Úgy kb 10 Hz volt a minimum, ami jól működött. Nekem meg 0-2000 Hz között kellene PFM jelet csiholnom.szerk: olvastam az a technical reference manual-t. (Ez régen is megvolt már? Asszem most láttam először ezt a doksit.) De nem látom a kapcsolatot a driver-ben használt függvények és a regiszter nevek közt. Mondjuk a pcnt.h fájlnál nem mentem lejjebb, vmelyik include biztos hardver közelibb kódot rejt.
(#10187) ecaddsell
Amúgy köszi a biztatást! Végül csak IDF függvényekkel lett megoldva![ Szerkesztve ]
-
Teasüti
nagyúr
válasz Amarton #10201 üzenetére
Mit akarsz mérni amúgy? Mert eredetileg ezt írtad: Egy LED áramot próbáltam mérni.
Utána meg feszültségmérésről írtál.
Azt ugye tudod, hogy áramot mérni soros kapcsolásban lehet? Általános iskola 8. osztályában tanítják a soros és párhuzamos kapcsolást.
Így neked ezt a modult az áramforrás és a fogyasztó közé kell kötni, hogy jó legyen. Vin+ a forrás felé, Vin- a fogyasztó felé.A linkelt képen meg gyönyörű nagy méretben látható az R100. Ez 100 Ohm, nem 0,1.
Rövidzárhoz ez még kicsit erős.[ Szerkesztve ]
-
Teasüti
nagyúr
Nem. R100 az 100 Ohm. 0R1 lenne a 0,1 Ohm.
Várjunk csak... Jogos, ezt benéztem.
100 Ohm-nál nem lenne R betű.
Részlet kérdés, a tényen nem változtat.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Janos250 #10200 üzenetére
Olyan túl sok mondanivalóm nincs a PCNT-vel kapcsolatban. Működik a példa alapján.
Inkább matematikai fejtörést okoz a frekvencia mérése. Ugye másodperc az alapegysége, viszont nekem ennél gyakoribb frissítés kellene. Mondjuk olyan 200 ms-os frissítés már elfogadható. Ez viszont azt jelenti, hogy fel kell szoroznom a mért értéket ha SI mértékegységet szeretnék látni. Ez meg precizitás csökkenéssel jár, így már csak a(z 5-ös) szorzó többszörösét kaphatom eredményül. Ráadásul így az 5 Hz a legkisebb mérhető egység, ez alatt inkonzisztens eredményt ad nulla és öt között váltakozva. Ezt így egyelőre csak szűréssel tudom áthidalni.
Nincs vmi jobb matematikai módszer a gyakoribb frissítésre? Kíváncsi lennék vajon egy hall szenzoros jeladóból hogy számol pontos értékeket gyors frissítéssel egy km óra?Hogyne használtad volna a PWM-et, vagy sose írtál még be egyetlen ledcWrite() parancsot se?
RMT-t meg én nem használtam még direktben sose, csak könyvtárból. RMT-vel hogy csinálnál mondjuk 100 Hz 50% PWM jelet?
RMT bemenetként is érdekelne, állítólag azzal periódusidőt is lehet mérni vhogy. Na ha vmi, akkor az precíz és gyors lenne!Meg most láttam a Technical Reference doksiban, hogy vannak natív Motor Control funkciók is a PWM perifériában ESP32-ben.
Na erről nem is tudtam. Van benne egy Capture Unit is, ami meg beérkező PWM jelet tud mérni, vagy mi a szösz. Ezt megtartom harmadik lehetőségnek, ha a PCNT és az RMT nem válna be.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Amarton #10214 üzenetére
Értem. Én viszont nem vagyok az, így volna egy kérdésem:
Hogy lehet áramot és feszültséget mérni egyszerre VAGY hogy lehet feszültséget mérni soros kapcsolással ("Természetesen sorba volt kötve a LED-el a LED 5V-os ágában. Tehát az 5V-ot is mérnie kellett volna nem csak az áramot.")? Ilyet nekem nem tanítottak az iskolában.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz ecaddsell #10226 üzenetére
ESP32 kimenetein egyébként ha jól tudom több fokozatú meghajtás van. Vannak kisebb és gyorsabb FET-ek, és vannak erősebbek, de lassúbbak. ESD kár tipikus példája amikor a kicsi FET-ek elszállnak, de a nagyok még működnek. Az egészből annyit veszel csak észre, hogy nem hozza a specifikációkat a port nagyobb sebességen.
Épp mostanában olvastam erről, már nem tudom minek a kapcsán.
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz ecaddsell #10236 üzenetére
ESP32 floating-point performance
És a hozzá kapcsolódó Espressif fórum téma.Lényegében csúnyán kikap az ARM procitól.
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Janos250 #10253 üzenetére
Mi a f...
Hát ez elég komplikált.
PWM-mel ez ennyi:#define PWM_CHANNEL_1 1
#define PWM_TIMER_12_BIT 12
uint_16t speed_freq = 100;
void setup() {
ledcSetup(PWM_CHANNEL_1, speed_freq, PWM_TIMER_12_BIT);
ledcAttachPin(PinNumber, PWM_CHANNEL_1);
}
void loop() {
ledcWriteTone(PWM_CHANNEL_1, speed_freq); //Min 5Hz 12 biten. Ledc driverben a Tone függvény alapból 10 biten dolgozik.
delay(100);
}[ Szerkesztve ]
-
Teasüti
nagyúr
Kérdeznék viszont könyvtár írással kapcsolatban, akinek ez ujjgyakorlat!
Osztályt próbálok írni, aminek rá kéne kapcsolódnia a Serial Stream-re, viszont sehogy se jövök rá hogy kell átadni a könyvtárnak a Stream-et. Kérhetnék ebben némi segítséget?Jelenleg itt tartok és nagyon nem jövök rá hogyan kellene működnie:
[kép]
[kép]Köszönöm!
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Janos250 #10253 üzenetére
Valamint tőled kérdezném még, mint ESP32 gurutól, hogy találkoztál-e már olyan hibával, hogy pánikol a CPU 1 a sok task miatt, viszont olyan 5-6 reset után végül csak képes elindulni a oprendszer?
Jelenleg 6-7 taskom van, amit szétszórtam a két mag közt (0. magon a gyors függvények, 1. magon a hosszabb programok), prioritásnak alacsony 10 alattiakat adtam meg és mindegyik task-nak eltérőt.
Ha csökkentem a taskok számát, akkor nem pánikol a proci. Van erre vmi ötleted mi lehet?
Minden task-ot szabályosan írtam meg: végtelen ciklusban futnak valamennyi delay()-jel a végükön.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Tankblock #10272 üzenetére
Nem találok megosztás gombot Github-on, így remélem a repo oldalának címe elég lesz.
Mondjuk lefuttatni nem fogod tudni szerintem a függőségei nélkül.
De ha belekukkantasz és látsz vmi gyanúsat, azt megköszönöm! -
Teasüti
nagyúr
válasz Janos250 #10276 üzenetére
Hogy kell privát repohoz linket gyártani? Csak olvasóként ismerem az oldalt.
Hagyjuk, így egyszerűbb!
Prioritások:
Vhol azt olvastam, hogy 18 fölött vannak az RTOS taskok. Bár nem vagyok meggyőződve róla.
Amúgy kell némi mozgástér. 6-7 task még csak egy kis része a to-do listámnak.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Tankblock #10280 üzenetére
Multi tab program, azért .ino az összes. HondaCBR az első a sorban.
Tehát már meghíváskor futnak a taskok mielőtt a végére érne a setup()-nak. Ez új.
Akkor csak átrendezem a setup()-ot.Vannak globális változók, mert végső soron sokminden interaktív lesz. Ha olyan könnyű lenne könyvtárba rendezni mindent, már rég portoltam volna.
A komponenseket természetesen egyesével tesztelem ki, azt is tudom hol jött be a cpu pánik.
Az utolsó három tasknál. Önmagában minden jól fut. Csak együtt nem annyira.Az xQueue és xEvent még új, majd utána nézek. Köszi!
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Tankblock #10282 üzenetére
Köszönöm a figyelmet!
Most nincs előttem a kód, de az utolsó három tasknál jött elő a jelenség. Nem használnak sok változót, a két PCNT-t használó csak beállít egyet-egyet, a harmadik meg kiküldi PWM-re a beállított változót. (Tudom ez mehetne egy taskba is, de a multitask lényege nem pont az, hogy kismillió folyamatot indíthatok?) Mindegy melyiket veszem ki, külön-külön mindegyiktől pánikol az 1. mag. És a 0. magon futnak.
Úgy tűnik magától a taskok számától jön be a jelenség. -
Teasüti
nagyúr
válasz Tankblock #10289 üzenetére
Két PCNT csatorna van használatban, semmi más nem hívja meg a saját taskján kívül.
Szándékosan nem szeretnék megszakítást használni és elvenni a cpu időt mástól, ha hardverből is mehet.Megpróbálom a volatile változókat és a setup() végére rakom a task indítást. Meg utána nézek a szálkezelésnek, xQueue-nek.
(#10288) Janos250
Még nem olvastam el a linket, de "thread"? Ha ez nem ugyanaz mint a task, akkor most hallok erről először.
Ezt intelligensebben kezeli az RTOS?szerk: na ilyet most látok először! És jóval egyszerűbbnek tűnik, mint az RTOS féle xTask.
Viszont gondolom ez nem ugyanazon az absztrakciós rétegen fut, ugye?[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Tankblock #10291 üzenetére
Jó észrevétel, ezt a bugot ki se szúrtam volna talán, csak telepítés után!
Amúgy nem hiszem, hogy ez volt a gondja. Azért nem, mert most nem tudom reprodukálni a hibát.
Letöltöttem újra azt, amit megmutattam kódot és most az sem hibázik bootoláskor.
Azóta annyi változás történt, hogy frissítettem az Arduino Core-t 1.0.1-re.
(Egyébként az új verzióban már rendesen működik a BT Serial, akit érdekel. Az 1.0.0 eldobálta a küldött adatot.) -
Teasüti
nagyúr
válasz tvamos #10292 üzenetére
Ezt a pvParameters-t nem tudom elképzelni hogy tudnám használni a task folytonos meghívása nélkül.
Nálam egyszer setup()-ban el van indítva a végtelen ciklus és ennyi. Indításkor tudnék átadni egy paramétert, de ez haszontalan futás közben.
Vagy arra célzol, hogy ez a koncepció eleve hibás? Lehet nem különálló és független ciklusokat kellene indítani, hanem minden egyes alkalommal meghívni mindent egyesével, majd ha lefutott törölni a példányt?
Ezzel viszont az a gondom, hogy így lényegében lineáris programfuttatás lenne belőle, ha nekem kell sorban elindítgatni a szálakat.[ Szerkesztve ]
-
Teasüti
nagyúr
Épp az XQueue-val és az xSemaphore-ral ismerkedek.
Szeretnék kipróbálni egy bináris szemafort, amit egy megszakításból szeretnék "adni".
Kérdésem, hogy hogy lehet megcímezni Arduino-ban az UART RX portjára érkező adathoz kapcsolódó megszakítás vektort?Jelenleg a Serial.available() függvénnyel végzek polling-ot, viszont biztos meg lehet valahogy oldani ezt megszakítással is.
-
Teasüti
nagyúr
válasz Tankblock #10299 üzenetére
Értem.
Lényegében a felesleges polling-ot célszerű elkerülni xQueue-val és xSemaphore-ral.
Van még egy mutex nevű akármi is, de addig a fejezetig még nem jutottam el.Elöljáróban nincs arra vmi tipped, hogy létezik-e vmi jobb megoldás RTOS-ban az idő elteltét figyelni multitasknál, mint a "hagyományos"
if (millis() > timer) {}
feltételt pörgetni?[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Teasüti #10301 üzenetére
Na de mi a helyzet azokkal a változókkal, amiket nem adat közvetítésre használok, hanem konfigurációra?
Adatnál ugye mindig lesz egy input és egy output amik mozgásban tartják a FIFO-t. Viszont konfigurációs változóknál nincs mozgás, ott vmi beállítja a változót és a többi folyamat meg csak referenciaként használja.
Erre nem alkalmas se az xQueue, se az xSemaphore. -
Teasüti
nagyúr
válasz balintarduin #10303 üzenetére
Állapotgépnek nézz utána! Azzal lehet követni az eseményeket.
Mindig kell egy változó, amiben követed melyik képernyőn vagy.
Én úgy csináltam menüt, hogy volt egy változóm a főmenünek, képernyőnként sorjában és ahogy léptettem a változót, úgy lépkedett a menü is. Aztán ugyanez a rendszer minden egyes almenüben is.Én mondjuk anno egyetlen uint8_t változót figyeltem csak és határértékek szerint ugráltam benne.
Mondjuk 1-10 között volt a főmenü, 20-30 között az 1. almenü, 40-50 között a 2. almenü, stb.
És int++ és int-- szerint lépegettem az adott tartományban, amíg át nem lépett vmelyik határon. Ekkor előre meghatározott helyre ugrottam a sorban, attól függően mi következett. Pl. vissza a végére, ha végtelenítve volt a menü. Vagy a következő almenüre, stb.[ Szerkesztve ]
-
Teasüti
nagyúr
válasz balintarduin #10305 üzenetére
Rakd be egy switch-be az összes menü képernyőt!
Így kizárod a konkurrens választási lehetőségeket. Ha meg vmi ismétlődő mintád van, akkor meg optimalizálj!szerk: vagy csinálj egy állapotgépet a menu() függvényekhez is! Nem látom hirtelen miért kellene lefuttatni egymás után őket. Egyszerre csak egy van megjelenítve, nem?
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz zsolti_20 #10319 üzenetére
Először is el kellene döntened mire van szükséged pontosan a projektedhez. Mert 2 vezérlő közötti kommunikáció nagyon nem ugyanaz, mint 3+ vezérlő között.
SPI, UART (soros port) és az imént említett egyébként kiváló ötlet a megszakításra is mind csak peer-to-peer praktikusak, de minden egyes hozzáadott további vezérlővel növekszik a GPIO lábak száma.Én ha kettőnél több eszközt kellene összehoznom, akkor I2C felé mennék első körben. Ezt is még viszonylag könnyű programozni és annyi eszközt akaszthatsz rá az adatbuszra, amennyit nem szégyellsz (de max 128-at, ha nem tévedek). Ha 1-2 méternél nagyobb távolságok vannak, akkor meg egy erre a feladatra kitalált megoldás kell, mint pl. amit gyapo11 is írt feljebb.
Vagy esetleg még tovább lehetne vinni robohw ötletét és ha tényleg elég a bináris jelzés, akkor egyetlen GPIO porttal létre lehet hozni egy ún. "Token buszt" (csak nem gyűrű topológiában, hanem buszra fűzni mindet) és egy ilyen TTL szintű jelet ki lehet húzni nagyobb távolságokra is könnyedén. De egy-egy szintillesztővel akár TTL-nél nagyobb feszültséggel is megoldható. Mondjuk egy házon körbevinni inkább a 12V lenne ideálisabb, mint mondjuk 3,3/5V.
[ Szerkesztve ]
-
Teasüti
nagyúr
válasz Janos250 #10325 üzenetére
Egy ilyen zárt rendszerre jó lehet még a BLE is. Tulajdonképpen ilyen jellegű kommunikációra találták ki.
ÉsESP_PWR_LVL_P9
max. teljesítményen elvileg 100 méteres hatótávolsága van ESP32-nek nyílt terepen. (Gyakorlatilag meg 30 métert ért el a fórumozó egy garázsajtón/falon keresztül.)
Persze ha ki akarja vinni a netre az ember, akkor kell a hálózatba egy AP is, ami fordít a BLE és a TCP-IP közt.[ Szerkesztve ]
Új hozzászólás Aktív témák
- HiFi műszaki szemmel - sztereó hangrendszerek
- Philips LCD és LED TV-k
- Android szakmai topik
- Mobil flották
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Házimozi belépő szinten
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Helldivers 2 (PC, PS5)
- Horgász topik
- Rövid videón a Black Myth: Wukong
- További aktív témák...
- HP 15,6",7.generációs core i3,12GB DDR4 RAM,SSD,jó akku, jó állapot
- Újszerű HP 250 G7,core i7 7500u,IntelHD ,16GB DDR4Ram,SSD, új akku,új töltő
- Be Quiet! Dark Power Pro 80 Titanium 1600W (BN332) Tápegység - Számla + Gari, Ár alatt! BeszámítOK!
- ÚJ Acer Nitro 17 - AN17-41 - 17,3"FHD 165Hz - Ryzen 7 7735HS - 16GB - 1TB - RTX 4050 - 3 év garancia
- Ryzen 7 Konfig
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Ozeki Kft.
Város: Debrecen