Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
16MHz es a kvarc az UNO -n. Majd meglátom akkor mi lesz.
Ha nem megy, legfeljebb leveszem és arébb lesz a DCDC...
Nálam egy 16 MHz-es Atmega2560 mellett 2 darab LM2596-os konverter dolgozik. Az MCU működésében semmi zavart nem tapasztalok. Árnyékolás nincsen semmiféle.
Hogyan lehet négyszer hét szegmenses kijelzőt vezérelni úgy, hogy ne egyszerre világítson mind a négy számjegy?
A MAX7219 IC akár 8 számjegyet is képes meghajtani és a multiplexelést hardveresen elintézi.
ÜDv mindenkinek
Van egy egyszerű kódrészlet. azt hogyan tudnám úgy átalakítani, hogy ne egyből reagáljon a potira? pl ha a poti maxon van, akkor ne írja azt egyből ki a kimenetre, hanem szép lassan fusson fel a kimeneten a feszültség.
Felveszel egy változót és azt "lassan húzod fel".
Valahogy így. A kód nem tesztelt, nem futtattam, semmi ilyesmi, remélem érthető hogy mit csináltam. A delay-t (itt 10) és a változás sebességét (itt 5) érdemes konstansként felvenni, így kísérletezéskor elég 1 helyen módosítani
Köszönöm!
Meg próbáltam de sajna nem működik, a kimenet nem változik semmit, esetleg valami ötlet rá?
Nyilván elcsesztem, az az ötletem. Amúgy lehet most is, de hátha:
Illetve az rpm2=0 az ne a loop-ban legyen, hanem a setup-ban.
Az a baj, hogy a csatolt kódból már magadnak is rá kellene jönnöd, miért nem lesz a kimeneten a megfelelő jel. Ajánlom az Arduino 60 nap alatt c. tanfolyamot! Ha csak megkapod a működő kódot, hogyan fogsz a későbbiekben egyedül programot írni? Nem tanulsz vele semmit.
A hozzászólás módosítva: Máj 27, 2018
Megvan a 60+15napos oktató anyag, most is azt nézegetem éppen. próbálkozok azért, csak akkor írok már ide, mikor már feladtam teljesen, és hátha kapok valami jó irányt.
Lépésenként le kell követni. (Akár papír, ceruza módszrrel.) Ha nem (jól) működik, akkor próbáld meg más módszerrel, a problémát megkerülve. Kezdetben nem az a lényeg, hogy a kódod elegáns legyen, hanem az, hogy működjön.
Az MCU-INT szerintem a microcontroller felé egy interrupt kimenet, de ez csak tipp.
Fordíva ülsz a lovon. Előbb próbáld ki, teszteld, aztán tervezz hozzá áramkört. A Clear nagy valószínűséggel Reset bemenet.
MÉg mindig küzdök vele, de elveszítettem a fonalat, pedig próbálom lépésről lépésre kibogozni, úgy néz ki, hogy kezd kifogni rajtam.
próbáltam más megoldást, pl for "utasítással" azzal szépen fel is fut a poti által adott értékig, de ugye az meg mindig újra indul.
Rakj be kilépési feltételt: ha a szépen lassan növelt változód elérkezett a megfelelő értékhez, akkor a ciklisváltozót írd át akkorára, hogy biztosan vége legyen a for-nak: if (poti==ertek) i=1000;
Erre való a "break" a C szintaktika szerint...
if (poti==ertek) break;
Sok megoldás van, a legjobb az lenne, ha a for megfelelően lenne meghívva, ugyanis két változónk van, az egyik addig növekszik, amíg el nem éri a másikat. Így talán megérti, hogyan kell a for-t használni.
for (i=rpm2,rpm,i++)
{ analogWrite(ki,rpm2); } rpm2 = rpm; A hozzászólás módosítva: Máj 28, 2018
Nem értem a kódod... az rpm2-t rakod ki a kimenetre, de az sosem változik, mivel az i-t növeled, nem az rpm2-t. Mi ez a kilépési feltétel, hogy rpm? Amíg rpm igaz? Vagyis csak akkor lép ki a for-ból, ha rpm nulla lesz? Miért kell posztolni olyan kódot, ami nem segít?
for (int aktualis=0;aktualis<vegleges;aktualis++) analogWrite(kimenet,aktualis);
Bocsi,elnéztem.Valóban (ki,i).
Nem lép ki,lefut a for ciklus. Utána rpm2 = rpm. A hozzászólás módosítva: Máj 28, 2018
Üdv!
SIM33ELA GPS modult és egy Quectel M66GPS modult lehet összekapcsolni Arduinoval (külön-külön)? Ha igen, kaphatok egy kapcsolási rajzot meg egy példaprogramot? Előre is köszönöm! A hozzászólás módosítva: Máj 28, 2018
Most ez van benne, ugye ez azt csinálja, hogy szépen növeli a kimeneti feszt a poti által beállított értékig.
Akkor azt kéne megoldanom, hogy ha ezt megcsinálja akkor ebből kilépjen?
Idézet: „szépen növeli a kimeneti feszt” Pontosabban növeli a PWM kitöltési tényezőjét. Kicsit átverés az analogWrite megnevezés...
Ennek működnie kellene. A kilépési feltétel az "i<rpm". Ha ez nem teljesül, vége a for ciklusnak. Mivel az i-t növeled folyamatosan (i++), ezért rpm*20mS múlva kilép. Nem?
Annyi a gond, hogy mindig 0-ról kezdi a kiírást, tehát ha többször fut le a for ciklus a main-en belül, mindig 0-ról indulva növeli a kimeneti feszültséget. Kellene egy segédváltozó: pl "int kintvanakimeneten", és amikor lefutott a for ciklus, ebben tárolnád, hogy mi az, ami már készen van. Ha ettől nagyobb a potin beolvasott érték, akkor növelni kell a kimenetet, ha kisebb, akkor csökkenteni, tehát kell egy további for ciklus, csak csökkentésre. Így a poti helyzetét szép lassan fogja követni a kimeneted. Problémát okozhat a map fv. által leszűkített tartomány, ugyanis több analogRead értékre is ugyanazt a 60-255 közötti értéket kapod, érdemes átgondolni, nehogy beakadjon emiatt a két for ciklus közé a függvényed. A hozzászólás módosítva: Máj 28, 2018
1 rpm = map(analogRead(A5), 0, 1023, 60, 255);
2. if( rpm_old < rpm ) 3 { 4 for (int i=rpm_old; i <= rpm; i++){ 5 analogWrite(ki,i); 6 delay(20); 7 } 8 rpm_old = rpm; 9 } 10 11 if ( rpm_old > rpm ) 12 { 13 for( int i=rpm_old; i >= rpm; i-- ) 14 analogWrite(ki,i); 15 delay(20); 16 } 17 rpm_old = rpm; 18 } Talán így.
Szépen lassan fel is fut, de mikor kilép, akkor kezdi elölről 0-ról,
Ez egy kis motor szabályzót kezelne, és az lenne a lényege hogy szép lassan pörgetné fel a motort, és pl mikor lefele tekerem a potit akkor szép lassan venné vissza a fordulatot, ha meg felfelé tekerem, akkor meg szépen lassan emelné. |
Bejelentkezés
Hirdetés |