Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   705 / 838
(#) majkimester válasza kriszrap hozzászólására (») Okt 14, 2021 / 2
 
Mindenképpen külön választva az adatot a megjelenítő kódtól. Például így lehetne leírni az egyes animációs frame-et. A példában 2 frame van:

  1. const byte frames[2][64] PROGMEM =
  2. {
  3.         {
  4.                 0b11111111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  5.                 0b10000001, 0b01111110, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  6.                 0b10000001, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  7.                 0b10000001, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  8.                 0b10000001, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  9.                 0b10000001, 0b01000010, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  10.                 0b10000001, 0b01111110, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  11.                 0b11111111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000
  12.         },
  13.         {
  14.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  15.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  16.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  17.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  18.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  19.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  20.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
  21.                 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000
  22.         }
  23. };


Itt egy frame 64 byte 8x8 szervezésben. Az egymás alatti 8 szám lenne az egy szint, így direktben nullákkal és egyesekkel megrajzolható, amit meg szeretnél jeleníteni. De még ennél is tovább lehet menni, generálni kell egy define listát, ahol az x (esteleg o) jelölné a bekapcsolt LED-et az alul-vonás pedig a kikapcsoltat:

  1. #define ________ (0)
  2. #define _______x (1)
  3. #define ______x_ (2)
  4. #define ______xx (3)
  5. ...
  6. #define xxxxxxx_ (254)
  7. #define xxxxxxxx (255)


És akkor a tömböt már csak rajzolni kellene, és jól látszik mi fog látszani:

  1. const byte frames[1][64] PROGMEM =
  2. {
  3.         {
  4.                 xxxxxxxx , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  5.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  6.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  7.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  8.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  9.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  10.                 x______x , ________ , ________ , ________ , ________ , ________ , ________ , ________ ,
  11.                 xxxxxxxx , ________ , ________ , ________ , ________ , ________ , ________ , ________
  12.         }
  13. };


A tömb persze lehet 1 byte-tal hosszabb is, és a plusz byte tartalmazhatja, hogy az adott frame-et meddig akarod megjeleníteni.

Itt a példákban az oldal miatt eltörnek a sorok, de ha kimásolod, látni fogod mire gondolok.
A hozzászólás módosítva: Okt 14, 2021
(#) kriszrap válasza majkimester hozzászólására (») Okt 14, 2021 /
 
Köszönöm szépen rendben holnap átnézem ahogy lesz időm rá köszönöm.
(#) icserny válasza kriszrap hozzászólására (») Okt 14, 2021 /
 
Van itt egy úriember aki Java programból vezérli az animációkat, talán hasznát lehet venni.
(#) majkimester válasza icserny hozzászólására (») Okt 15, 2021 /
 
Na igen, ez egy másik szint, amikor PC-vel összekötve soros porton kapja az adatokat, és a PC-n egy szerkesztő programmal lehet megszerkeszteni az animációt.

A fenti javaslatom önálló működés esetén használható. De ezt is tovább lehetne gondolni, és esetleg nem az összes animációs fázist (frame) tárolni, hanem csak az úgynevezett kulcs frame-eket és közötte pedig egy lejátszási lista megadná hogy az egyes frame-eket milyen sorrendben következnek.

A legegyszerűbb eset amikor a tárolt frame-ek sorrendjét írnánk le. Pl. a lejátszás úgy menjen, hogy jelenítse meg egymás után az 1,2,3,4,5,4,3,2,1 frame-et. Ezzel nem kellene minden frame-et letárolni, az azonosakat csak a lejátszási lista újra meghivatkozná. Memóriát lehet spórolni.
(Jobb lenne persze, ha a frame megjelenítési idejét is a lejátszási lista tartalmazza, ezzel lehetne gyorsuló lassuló animációt csinálni)

Bonyolultabb esetben pedig a lejátszási lista tartalmazhatna transzformációkat is, eltolás 90 fokos elforgatás, tükrözés, rotálás (olyan eltolás, ahol ami kívül kerülne, az a másik oldalon visszajön), stb.

Azaz például, egy beúsztatás esetén a lejátszási lista tartalma:
1. frame, de eltolva 7 leddel jobbra
1. frame, de eltolva 6 leddel jobbra
1. frame, de eltolva 5 leddel jobbra
1. frame, de eltolva 4 leddel jobbra
1. frame, de eltolva 3 leddel jobbra
1. frame, de eltolva 2 leddel jobbra
1. frame, de eltolva 1 leddel jobbra
1. frame, eredet helyén
stb.

Így gyakorlatilag 8 animációs fázis egy kulcs frame ír le, plusz 8db transzformáció, így foglal legkevesebb memóriát.

És még tudom fokozni a lehetőségeket ...


Csak expert programozóknak: A lejátszási lista helyett animációs lista, ami azt tartalmazza, hogy melyik kulcs frame milyen kezdeti és vég transzformációkkal hány lépésben jelenjen meg. Az előző beúsztatás példa:
1. frame, kezdetben 7 leddel jobbra tolva, végén 0 leddel jobbra tolva, 8 lépésben jelenjen meg.
(Fokozhatjuk még, hogy az animációs fázisokat azonos időközönként, lineárisan vagy más függvény szerint gyorsulva/lassulva játsza le, stb.) De itt abba is hagyom az agymenést ...
(#) Mumtaz hozzászólása Okt 15, 2021 /
 
Sziasztok.

Idősebb fejemmel most kezdenék el foglalatoskodni egy kicsit arduino-val. Viszont a programozásban nem nagyon vagyok járatos, de az alapokhoz részben induláshoz, illetve konkrét felhasználáshoz szeretnék egy arduino programot kérni. Valahogy az agyam abból indul ki, hogy meg van, mit szeretnék, majd, ha ez már programba van ültetve, akkor már tudnék tanulni is az adott programból.

Ez konkrétan és példaként egy relé vezérlése lenne a következőképpen:

A relé mindig csak 100ms-ra húzna meg. A relé behúzásai közötti intervallum alapból 5000ms lenne. Tehát, ha valaki az arduino "bekapcsolása" után felkapcsolja a kapcsolót és bekapcsolva hagyja, akkor a relé 5000ms-onként meghúzna 100ms-ra. Ha viszont a kapcsolót csak egy pillanatra (max 500ms) kapcsolják fel, majd lekapcsolják, akkor elindulna egy számláló. Ha valaki az első felkapcsolás után max 1 percen belül a kapcsolót újra felkapcsolja és felkapcsolva hagyja, akkor a korábbi pillanatnyi és az utóbbi fix felkapcsolás közötti idő intervallumban húzna meg a relé, nem pedig a kezdeti 5000ms-onként.
Ezt az értéket pedig megtartaná akkor is, ha a kapcsolót lekapcsolják. Egészen addig, míg valaki nem indít el egy újabb "betanítási" folyamatot, illetve akkor is, ha tanítás megkezdése (egy pillanatnyi felkapcsolás) és a fix felkapcsolás között több, mint egy perc telik el. Tehát, ha valaki a pillanatnyi felkapcsolás után egy percen belül fixre felkapcsolja, akkor a kettő közötti intervallumot tárolná el, ha viszont több, mint egy perc után kapcsolják fixre, akkor a korábban megtanult érték (vagy az alap 5000ms) nem változna.

- Tehát az alap intervallum 5000ms.
- 500ms-nál rövidebb felkapcsolás elindítja a tanulást, de annál több nem és megtartja a korábbi értéket
Elindított tanulásnál 1 percnél korábbi fix felkapcsolásnál megtanulja az új értéket.
Elindult tanulásnál az 1 percnél későbbi felkapcsolás esetén nem vesz fel új értéket, hanem a korábbi értéket használja


Meg tudná ezt nekem írni valaki UNO-ra?
A hozzászólás módosítva: Okt 15, 2021
(#) kapu48 válasza Mumtaz hozzászólására (») Okt 15, 2021 /
 
Mi lesz a jutalom?
(#) sargarigo válasza Mumtaz hozzászólására (») Okt 15, 2021 /
 
Szerinted időmilliomosok vagyunk?
A dolognak az a módja, hogy elkezded, és ha elakadsz, akkor megpróbálunk segíteni. Amit és ahogy most felvetettél az az apróhirdetés rovatba való!
Mondod hogy tanulni szeretnél: számtalan tutorial létezik magyar nyelven is, azzal kellene kezdeni!
(#) kapu48 válasza Mumtaz hozzászólására (») Okt 15, 2021 /
 
Google a barátod!
Keres rá: arduino multitasking időzítés
(#) kapu48 válasza Mumtaz hozzászólására (») Okt 15, 2021 /
 
Hobbielektronika csoport:
Bővebben: Link
A hozzászólás módosítva: Okt 15, 2021
(#) mnyugger válasza kapu48 hozzászólására (») Okt 15, 2021 /
 
Megcsinálhatod a következő ötletet IS!
(#) Mumtaz válasza kapu48 hozzászólására (») Okt 16, 2021 /
 
Ez így hasznos.
Köszönöm.

sargarigo:
Több lehetséges project is motoszkált a fejemben. Tutorialokat olvasgattam, de valahogy mindig elvesztettem a fonalat (nem olvasásból tanulok). Megnéztem tutorial videókat is, de ott is elvesztettem a fonalat. Pont ezért gondoltam egy olyan példaprogramra, ami egy kimondottan olyan dologra irányul, amit használnék is. Ezért próbáltam meg így.
A hozzászólás módosítva: Okt 16, 2021
(#) Jonni válasza Mumtaz hozzászólására (») Okt 16, 2021 /
 
Ez a feladat egy gyakorlott programozót is megdolgoztat. Én is azt javaslom, hogy kezd el valahol és ha elakadsz itt tudsz segítséget kérni.

Idézet:
„Egészen addig, míg valaki nem indít el egy újabb "betanítási" folyamatot, illetve akkor is, ha tanítás megkezdése (egy pillanatnyi felkapcsolás) és a fix felkapcsolás között több, mint egy perc telik el.”


Itt nem értem mire gondolsz ! Mesterséges intelegencia? Gépi tanulás? Algoritmus?
Azt hiszem ahhoz kevés az arduino.
(#) sargarigo válasza Mumtaz hozzászólására (») Okt 16, 2021 /
 
Próbáld meg úgy, hogy kevésbé bonyolult feltételeket szabsz meg! Bontsd részekre a feladatot! A "nagy" projekteknél is így megy. Ha már elindult, akkor lehet specializálni. Ennél a feladatnál ha találnál is valakit aki megoldja helyetted, akkor se tanulnál semnit, annyira bonyolult.
Szerk: akik itt vagyunk, topiconként pár percet (mondjuk n*tízet) szánunk egyre. Ez arra elég hogy átgondoljuk a problémát, esetleg javaslatot is tegyünk. Egy több órás/napos feljesztési folyamat már nem sok mindenkinek fér bele. A magam nevében írtam.
A hozzászólás módosítva: Okt 16, 2021
(#) kapu48 válasza Mumtaz hozzászólására (») Okt 16, 2021 /
 
Ajánlom figyelmedben Cserny István tanár úr többi remekművét is:
Bővebben: Link

Ha már az alapokkal tisztában vagy, már neki futhatsz a fentebb vázolt algoritmusod kidolgozásába.
Nem olyan bonyolult feladat az, mint amilyennek kezdésre tűnik!

Ha esetleg mégis el akadsz? Kérhetsz tanácsot itt, vagy privátban!
(#) kapu48 válasza Mumtaz hozzászólására (») Okt 16, 2021 /
 
Hasonló feladat megoldása Pl.: 17. Véges állapotgépek, ébresztőóra projekt
Bővebben: Link
(#) mnyugger válasza kapu48 hozzászólására (») Okt 16, 2021 /
 
Én is ajánlom. Hatalmas tudást ad át.
(#) Régi motoros válasza kapu48 hozzászólására (») Okt 16, 2021 /
 
Ez a dokumentáció nincs valahol összesítve? Mondjuk ahonnan egyben letölthető az egész?
Vagy egy oldal, ahol minden része fel van sorolva letöltési linkekkel együtt?
(#) kapu48 válasza Régi motoros hozzászólására (») Okt 16, 2021 /
 
Ott van a fenti hsz.-ben: Bővebben: Link

2012-töl napjainkig. Jó nagy munka, még elolvasgatni is!
A hozzászólás módosítva: Okt 16, 2021
(#) Régi motoros válasza kapu48 hozzászólására (») Okt 16, 2021 /
 
Igen ezt néztem, csak ezen össze kell szedegetni mindet.
Arra gondoltam (inkább reménykedtem), hátha meg van ez valahol egy oldalra egyesítve is...
(#) kapu48 válasza Régi motoros hozzászólására (») Okt 16, 2021 /
 
Ott van a bal oldalon, foglalkozások le nyíló alatt évekre lebontva!
Nem ellopni, inkább csak használni, illik!
(#) Régi motoros válasza kapu48 hozzászólására (») Okt 16, 2021 /
 
Ne idegeskedj, árt a "szépségednek".
Igen, azt én is látom, hogy ott vannak évekre bontva, szerte-szana-széjjel...
Csak magamnak akarom letölteni, hogy meg legyenek egy helyen.
(#) kapu48 válasza Régi motoros hozzászólására (») Okt 16, 2021 /
 
Ezt a szerzőkkel tárgyald meg.
Nem idegeskedek, csak kifejeztem a véleményem.
(#) mnyugger válasza Régi motoros hozzászólására (») Okt 16, 2021 /
 
Ne légy lusta. Minden lecke ott van. szépen rendezve. Dátum szerint.
Minden leckéhez még egy órás videó is van a youtube-on.
A hozzászólás módosítva: Okt 16, 2021
(#) icserny válasza Régi motoros hozzászólására (») Okt 17, 2021 / 2
 
"Csak magamnak akarom letölteni, hogy meg legyenek egy helyen."

Ha a nyitólapot végiggörgeted, az egyes témaköröknél többé-kevésbé ki vannak gyűjtve az összetartozó előadások. Például az Arduino tanfolyamok előadásait itt találod.

Sajnos, a nagyon régi, és a vegyes témakörű előadások közé keveredett Arduino előadások nem lesznek benne mind a listában, úgyhogy a keresgélést nem fogod megúszni.
(#) Régi motoros válasza icserny hozzászólására (») Okt 17, 2021 /
 
Csodás, na pont ilyenre gondoltam. Köszi...
(#) Dragonmax hozzászólása Okt 17, 2021 /
 
Hali Emberek!
Segítséget kérek. Arduino uno val vezérlek egy szervomotort DM542 driverrel. Azt szeretném megoldani hogy egy impulzusra forogjon a motor egy meghatározott ideig ( az időt potméterrel szeretném állítani 0-2 sec között) folyamatosan ha jön az impulzus forduljon a motor.
Köszönettel várom a segítséget!
Dragon
(#) KBal76 válasza Dragonmax hozzászólására (») Okt 17, 2021 / 2
 
A DM542 egy léptetőmotor meghajtó, nem sok köze van szervóhoz.
(#) Josi777 válasza Mumtaz hozzászólására (») Okt 17, 2021 /
 
Ha jól értem, akkor 1 percnél nem lehet hosszabb időtartamot megtanítani neki?
(#) HeZ válasza Mumtaz hozzászólására (») Okt 18, 2021 /
 
Eme egy kapcsolós, intelligens (=tanítható) impulzus generátor programozása előtt ezt az egyszerűbbet javaslom, amin még két hardver használatát is megtanulhatsz: LCD (kijelző) és forgatógomb (rotary encoder):
- off idő állítása (alapesetben 5000 ms), esetleg on idő állítása (alapesetben 100 ms);
- start időbeállítás(ok) utáni enkóder gomb megnyomására vagy gombnyomás nélkül várakozási idő (500 ms) után.
A kijelző haszna, hogy látod is, mit állítottál be (esetleg kiírhatod az előző három változtatást...). Időzítésekre, LCD-re, (rotary) enkóderre brilliáns példaprogramok állnak rendelkezésünkre, nem kell feltalálni-újraírni a spanyolviaszt.

Ha ez működik, jöhet a taníthatóság funkció, ekkor elhagyható az LCD, a (rotary) enkóder helyettesíthető egy kapcsolóval.
(#) kriszrap hozzászólása Okt 19, 2021 /
 
Sziasztok
Sikerülget a ledkocka csak azt vettem észre ardunio nano nál hogy a for ciklusom lassan futhat le mert amikor beállítom pl 2-3 ms egy kép meddig legyen látható hát lassú 2-3 ms hez képest.

De ránézésre nem találtam benn olyat amitól lassulna max hogy függvény alatt hozom létre a változott de nem a for ciklusba.
Köszönöm a segítségeteket előre is.
  1. void rain() {
  2.   int db=0;
  3.   while (db < 200) {
  4.     db++;
  5.     shift(NEG_Y);
  6.     uint8_t numDrops = random(0, 5);
  7.     for (uint8_t i = 0; i < numDrops; i++)
  8.       setVoxel(random(0, 8), 0, random(0, 8));
  9.      
  10.     kirajzolas(5);
  11.   }
  12.   clearcube();
  13.   currentEffect++;
  14. }
  15.  
  16. void kirajzolas(int mill)
  17. {
  18.   char x,y,z;
  19.   int i;
  20.   byte bitz;
  21.   for(i=0;i<mill;i++)
  22.   {
  23.     for(z=7;z>-1;z--)
  24.     {
  25.       bitz= 0x01 << z;//z sihift  
  26.       shiftOut(DATA, CLOCK, MSBFIRST,bitz);
  27.       for(y=7;y>-1;y--)
  28.       {
  29.          shiftOut(DATA, CLOCK, MSBFIRST, led[y][z]);
  30.       }
  31.       digitalWrite(LACHT, HIGH);//LACHT
  32.       delayMicroseconds(125);
  33.       digitalWrite(LACHT, LOW);//LACHT
  34.       shiftreset();
  35.     }
  36.   }
  37. }
  38.  
  39. void shiftreset()
  40. {
  41.   char i;
  42.   for(i=0;i<9;i++)
  43.     shiftOut(DATA, CLOCK, MSBFIRST, 00000000);
  44. }
Következő: »»   705 / 838
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem