Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok. Lcd-vel kapcsolatos problémám van és remélem tud valaki segíteni. Összeszereltem egy 2,4 tft lcd-t egy arduino mega 2560-al feltöltöttem rá a mcufriend kbv diagnose tft support programot és látszólag mindent jól csinál de mégse mert tükrözve írja a betűket. Az lcd chip-re ICN74HC245TS van írva és amikor az ID-t íratom ki 0X5408-at ír ki. Valaki találkozott már ilyennel? Állítólag uno-n nem tükrözi de olyanom nincs és nem tudom kipróbálni. Ezeket a könyvtárakat használom hozzá.
#include <MCUFRIEND_kbv.h> #include "Adafruit_GFX.h" #include <SPI.h> MCUFRIEND_kbv tft; :?: Szép napot mindenkinek
Sziasztok!
Egy nano lapra feltöltöttem az uno bootloaderét, viszont használatban van az A6 és A7 pin is a hardverben, ahova szeretném tenni. Az uno bootloadere befolyásolja ezen pinek használatát? Köszi.
Nem, azokat a lábakat csak a te programod fogja használni (analóg bemenetként, mert másra nem használhatóak).
Sziasztok!
Ismét a segítségeteket kérem. A program célja az lenne, hogy az egyik kimeneten 3 felvillanás után legyen egy kis szünet, a másikon pedig 5 felvillanás után. A millis () függvénnyel már jól elboldogulok a villogásnál, azonban azt nem tudom, hogyan tudnám megoldani, hogy az adott villanás-szám után legyen szünet az adott villogásnál, de a másikat ne befolyásolja. Mi lenne a jó megoldás erre? Még egy millis () figyelés? De az nem mondja meg, hogy hány felvillanás volt... Itt az eddig megírt kód, amiben nincs még a felvillanások számának figyelése, csak maga a villogtatás. (Az tökéletesen működik...)
Tegyél be egy plusz számlálót a led váltáshoz, ha a számláló pl.6 (3*ki/be) akkor duplázd a periódusidőt(és töröld a számlálót
Vagy ha ilyen irányban akarsz elindulni, és tovább bonyolítani "majd valamikor" a dolgot, akkor érdemes lehet állapotgépként gondolni rá. Tehát felveszel egy változót, ami csak azért van, hogy abban tárold az aktuális állapotot. Például led1ÉppenAlszik, led1ÉppenVilágít. led2Éppen.. stb. Kulcsszó az "enum".
Már két lednél is elég könnyen bele lehet gabalyodni hogy most akkor éppen melyik változó kihez tartozik, melyikkel mit kell csinálni. Talán ez segít Bővebben: Link Szerk.: Ezt az előző hozzászólás kiegészítésének szántam, nem ellene! A hozzászólás módosítva: Feb 22, 2020
Mitöl van az, hogy tegnap 4 orán át nem voltam képes müködésbe hozni a progit (switch... case rutinok), ma reggel alig 10 perc alatt elindult????
Mert tegnap rágörcsöltél , ma meg kipihenten jött a "heuréka" effektus ... Nem a kádban jutott eszedbe a megoldás ?
Köszönöm az ötletet. Sajnos a megvalósításában elakadtam. Több helyen is próbáltam ezt a számlálást, vizsgálatot, de sehogy nem akarja az igazat. Biztosan bennem van a hiba, de nem jutok előbbre. Most ezt tartalmazza a kód, felkommentezve. Mit nem csinálok jól?
Huh, ez nekem egy kicsit "magas". Nem mondom, hogy nem értem, miről szól a leírás, de ennyire nem bonyolítanám, egyelőre. Még nagyon az alapokat tanulgatom csak... ("50+"-os fejjel ez már nem olyan könnyen megy. )
Na összerakom én is, aztán ha addig nem sikerül megoldani, akkor estére átküldöm ha nem jön közbe semmi (család pl).
Pontosan mit szeretnél? A hozzászólás módosítva: Feb 23, 2020
Tulajdonképpen azt szeretném elérni, hogy az egyes kimenetekre kötött LED-ek egymástól függetlenül villogjanak. Azaz az egyik kimeneten (például) 3 felvillanás után legyen egy kis szünet, majd ismét 3 felvillanás, ismét szünet, és így tovább. A másik kimeneten ettől függetlenül legyen (mondjuk) 4 felvillanás, utána szünet, majd megint 4 felvillanás, megint szünet, és így tovább. A lényeg az egyes kimenetek "függetlensége", azaz ha az egyiken szünet van is, a másikon ettől függetlenül menjen a villogás tovább. A továbbiakban több, különböző villogást szeretnék megvalósítani több kimeneten, de egyelőre már annak is örülnék, ha ez a kettő úgy menne, ahogy én szeretném.
Szinkronban menjenek, vagy az ütemezési frekvenciájuk is legyen más?
Más-más ütemezéssel. Ezért van a feltett kódban is különböző periódus-idő, és ezért is nem a delay (...) -jel oldottam meg.
Na akkor jön a kisregény!
Azért nem tudtad megcsinálni, mert noha viszonylag egyszerű a feladat (csak két ledet kell villogtatni), de ezt rendkívül sok paraméterrel kell tenned. Kell egy idő, amíg a led be van kapcsolva. Aztán amíg ki van kapcsolva. Kell egy számláló ami számolja hányat villant, és kell valami ami eldönti meddig maradjon kussban. Mindezt annyiszor, ahány ledre szükséged van. Ráadásul nem kellene hogy ezek összeakadjanak egymással. Éppen nem lehetetlen megoldani, de jó sok fejvakarás kell hozzá, és rengeteg a hibalehetőség. Arra gondoltam, hogy két változatban készítem el. Egyszer ahogy én gondolom, és egyszer ahogy az egyszerű lenne. Na ilyet nem találtam. Mivel cél az, hogy egymástól függetlenül menjenek a ledek, az első pár fejvakarás után inkább a jónak tartott megoldást dolgoztam ki. Nos a feladat tökéletesen ráillik az objektumorientált programozás elméletére. Anélkül hogy feleslegesen belebonyolódnék, pár dolgot mondok róla. Ami nekünk kell, az az egységbe zárás! Ez azt jelenti, hogy vannak úgynevezett objektumaink (a ledek), amik valamire jók (villognak). Amit tudnak csinálni, és amivel ezt csinálják, az kívülről nem hozzáférhető, így nem is tud összeakadni. Minden led kezeli a saját adatait, beleértve az időzítéseket is. Csak annyi a dolgunk, hogy létrehozunk annyi példányt amennyi ledünk lesz, felparaméterezzük, és rendszeresen meghívjuk az update() eljárásaikat. Mindössze ennyi a használata Ez a példányosítás:
Ez a szívverés:
És alább a teljes fordítható kód:
Szerk: Ha az első változat szerint indítod, akkor a default értékekkel megy, 3 villanás 1 szünet, 500ms be, és 500ms kikapcsolt idő. A hozzászólás módosítva: Feb 23, 2020
Van egy másik módszer is, millis nélkül:
loop{ a=a+1 delay(1000) egyszerűség kedvéért 1s switch a: case 1: led1 be led2 be case 2: led1 ki case 3: led1 be led2 ki led3 be case 8: led1 ki.... } Kevésbé rugalmas , a ledek szinkronban mennek, egyszerűbb bonyolultabb kódokat kivillogtatni, ebben a formában látszik mely ledek villannak egyszerre, ha szétszeded ledenként switchekre akkor meg a ledek kódjai látszanak.Az "a" talán a legkisebb közös többszörös elvén kiszámolható értékig célszerű számláltatni.
Van valami algoritmusa (szabályossága) a villogásnak? Mert ha nincs akkor lehet, hogy egy véletlengenerátorral és interrupttal egyszerübb megoldani. ( minden LED csoportba más kimenetü véletlengenrátorral lehetne a LED-ket az interrupttal kapcsolgatni - egyszer az egyik csoport máskor a másik stb).
Hűha!
Hát, ha úgy ezer évig élek, ezt akkor sem tudtam volna magamtól összehozni, így örök hálám üldözzön! A legközelebbi találkozás alkalmával jó vagy nálam egy sörre (vagy csokira, választásod szerint). Nem mondom, hogy minden pontját töviről hegyire értem, de megpróbálok elmélyedni benne. Ami pedig a legfontosabb, hogy estére ki is próbálom. Mégy egyszer nagyon köszönöm!
Igen, ezt én is kiokoskodtam, de éppen az a baj vele, hogy nem rugalmas, és szinkronban mennek a LED-ek. De köszönöm, a felvetésed megerősített, hogy elsőre jó irányba indultam el.
Igen, algoritmizáltan villognak. A random módon villogást viszonylag egyszerű lett volna kivitelezni.
Akkor szerintem is a switch...case a járhato ut vagy esetleg megfelelö array, ahova beirod melyik LED csoportnak mennyit kell villognia és a mutatoval egyszerüen körbe kérdezed.
Proba kolléga már felvetette pár beszolással elöttem.
Azt meg, hogy mikor mennyit villogjon az adott LED, beviszed egy táblázatba. int villogas_szama[n]={2,4,3,7,10}; Az n a fenti esetben 5 ( 5 szám van az arrayban). A mutato sorrendje 0 a 2 1 a 4 2 a 3 3 a 7 4 a 10-t jelenti Ahonnan a mutatoval ( mindig a 0-val kezdödik) az adott case-ben beolvasod az ismétlesek számát. Pl egy ilyen rutinnal: for (int i =0, i<villogas_szama[3], i++){ } Ebben a caseben a for hossza 7 lesz, azaz 7 villogást kapsz. Ilyen táblázatba beviheted a szünetek hosszát is, söt lehet több dimenzios array is ahol a villogas_szama [n,m] többjegyü is lehet, és minden kombináciohoz más számokat olvashatsz ki Pl [3,5 ] lehet 7, 2. Ahol a 7 a villogás száma, a 2 meg a pl. szünet közöttük, azaz a frekvenciája. A jo ebben, hogy egy táblázatbol dologozol és az n,m stb. paramétereket szabadon választhatod a kodban, akár paraméterként is pl a fenti sorban is igy is; for (int i =0, i<5, i++){ villogas_szama [i]. // csinál valamit a táblazatbol kiolvasott értékkel 2,3... } Én nagyon szeretem ezeket pl a léptetömotorok hajtásához meg hasonlo algoritmusok kialakitásához. (Folyamatvezérlés). Nem ismerem pontosan a feladatot, ezért elnézést, ha nem pontos, vagy nem meriti ki teljesen az igényeket.
Először én is tömböt akartam használni, de ezzel nem sikerült egymástól függetlenül villogtatnom. Ezért vetettem el. Neked mi a módszered rá?
A kérdés mennyire kell függetlenül villogtatni. Én általában a villogtatásra a megszakitást használom. Azaz van egy gyorsabb megszakitás, és azzal keresek ki egy-egy beállitást az arraybol. Azaz az egyik LED mondjuk minden 2. megszakitásra világit a másik minden hatodikra stb.
Még az ASM kodban ugy csináltam, hogy a megszakitásba beraktam egy munkakod subrutint. Pl a nyomogombokat minden 4. Megszakitáskor kérdezze le a motort minden megszakitás vezérelje. Volt olyan programom ahol 6 ilyen munkakod volt bizonyos alfeladatok automatikus és egymástol majdnem független elvégzésére. Sajnos az Arduino kodban még nem vagyok annyira otthon. A lassu displayt elég pl minden 10. megszakitással frissiteni. Közben lehet, egy sima koddal a 3. ledet is villogtatni, függetlenül a megszakitással kezelt LEDektöl. Épp most dolgozok egy szerkezeten ahol 2 léptetö motor van, a második az elsö lépéseit csak lassan követi ( elektronikus áttétel/sebességválto). Gyakorlatilag pl egy CNC meghajto progibol (3D nyomtato stb) is ki lehetne indulni, ott is legalább 2 motor egymástol függetlenül müködik. Jobban kellene ismerni a feladatot, hogy meg lehessen határozni az optimallis kodot. Idézet: „Jobban kellene ismerni a feladatot, hogy meg lehessen határozni az optimallis kodot.” Ez volt az |
Bejelentkezés
Hirdetés |