Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Belátom hiba volt ilyen gyenge tudással belekezdenem ebbe a projektbe!
Az Rtc-azért alakítottam át mert az időt nem akratam állítani,de utóvégről már bánom. Vissza is állítom.
Üdv mindenkinek! Segítséget szeretnék kérni tőletek nemrég kezdtem el foglalkozni valamelyest a robotikával és eléggé kezdő szinten vagyok még. Sikerült megépítenem egy 4 motoros arduino robotot és csak annyit tud hogy kikerüli az akadályokat. És szeretném én is irányítani a robotom egész pontosan Bluetooth-on keresztül. Van két kódom az egyik olyan ami az akadályokat kerüli ki (ez van most a robotba kódolva) és van egy olyan kódom ami bluetooth-os. Nos ezt a két kódot szeretném egyesíteni egy felületen és a kérdés az hogy a két kód közé milyen parancsot írjak hogy egy gombbal tudjam változtatni a két funkciót? Kivitelezhető egyáltalán az hogy két kódot egyesítsek vagy ide teljesen más kódolás kell?
Talán kezdjed ezzel a tanfolyammal!:
60 nap alatt Arduino ingyenes tanfolyam
Sziasztok!
Egy kis segítséget szeretnék kérni. Van egy Atmega328-ra épülő órám és szeretném minimálisan módosítani a programot. A program legelején van egy ilyen részlet: include <EEPROM.h> #define CLOCK 2 #define LATCH 3 #define DATA 4 #define COLON 13 #define MIN_BUTTON 0 #define HOUR_BUTTON 1 #define DET_BUTTON 2 #define ALARM_BUTTON 3 #define MIN_BUTTON_PIN 9 #define HOUR_BUTTON_PIN 10 #define DET_BUTTON_PIN 12 #define ALARM_BUTTON_PIN 15 #define LED_PM 16 #define LED_ALARM 17 #define LED_TOP 18 #define LED_DET 19 #define BUZZER 11 #define TRIGGER 14 #define WIRE_1 5 #define WIRE_2 6 #define WIRE_3 7 #define WIRE_4 8 #define TIMER1_SECOND_START 49910 #define DEFAULT_COUNTDOWN_DURATION 10 #define TRIGGER_DURATION_MS 3000 #define SNOOZE_MINUTES 9 #define ALARM_OFF 0 #define ALARM_ON 1 #define ALARM_DET 2 Ahol vastagon szedtem ott értem, hogy a digital pin-hez rendeli az egyes funkciókat, de mondjuk a MIN, HOUR, DET, ALARM_BUTTON 0,1,2,3 és az ALARM_OFF, ON és DET is 0,1,2, ezek mit jelentenek? Aztán megint elkezdi taglalni, hogy MIN, DET, ALARM_BUTTON_PIN. A ledek pedig analóg lábakon vannak, mint ahogy az ALARM_BUTTON_PIN is, tehát azt sem teljesen értem, hogy a számok ott mit jelentenek. A digital pin 1-hez szeretnék hozzárendelni egy a olyan funkciót, hogy a hálózati áram meglétét figyelje a processzor, nagyjából stimmel is a dolog: #define AC_ON 1 pinMode(AC_ON, INPUT); digitalWrite(AC_ON, LOW); viszont az AC_ON itt is 1. Előre is köszönöm a segítséget. A hozzászólás módosítva: Aug 22, 2016
Szerintem változók, kezdeti értékkel. Nem lábakat jelölnek majd a későbbiekben a kódban, hanem azok értékei változnak, ha pl a digital read(ALARM_BUTTON_PIN )==High akkor ALARM_ON =1, vagy ilyesmi.
Mennie kellene szerintem amit írtál. Az, hogy a #define AC_ON 1, az csak azt jelenti, hogy felveszi az 1 értéket az AC_ON változód. Ha írsz majd a digitalWrite(AC_ON, LOW); -sorral, az írni is fog az 1-es lábra, mert az AC_ON értéke 1. csinálhatnád íygy is: digitalWrite(1, LOW); illetve: digitalread(MIN_BUTTON_PIN) helyett: digitalread(9) mindkettő egyforma, csak sokkal 'olvashatóbb' a kód, ha 'beszélő' változónévvel csinálod. Az, hogy definiálva van 'MIN_BUTTON_PIN' nem jelenti azt, hogy lefoglalja a lábat, nem állít be semmit, egyszerűen ad egy értéket neki, jelen esetben 9-et. setupban meg pinMode(MIN_BUTTON_PIN, INPUT); csak annyit jelent, hogy a 9-es láb input lesz. (Mert a MIN_BUTTON_PIN értéke 9) Meg kell nézned, hogy a program többi részében melyik lábakra ír/olvas a program. Ha semelyik változó sem 1-es (DE CSAK azok közül, ami tényleg azonosítja a lábat ) akkor simán használhatod azt a lábat. Szóval: Attól, hogy van egy változód pl MIN_BUTTON_PIN ami 9, attól még lehet egy másik változód, aminek kezdeti értéke szintén ennyi. Mindkettőt másra használod. Reggel van, ha nem ok amit írtam elnézést! Idézet: „Ahol vastagon szedtem ott értem, hogy a digital pin-hez rendeli az egyes funkciókat, de mondjuk a MIN...” Ott még nem rendel lábhoz semmit sem, ne tévesszen meg, hogy _pin a változó neve. Később, majd a setupban belövi a lábat. (Szerintem) Az, hogy a keresett változóid miért is vannak, azt nem tudhatom pontosan, mert a program többi részét nem látom.
Szia!
Ezek csak "helyettesítők"( a fordítóprogramnak szól, nem programutasítás !), azaz, ha valahol később azt írja, hogy "ALARM_OFF", akkor helyette '0'-t kellene írni ( akár lehet is!), csak így olvashatóbb !
Annyival helyesbítenék, hogy ezeket nevezzük inkább makróknak, ezek nem változók. A #define-nal makrókat definiálsz, amit a fordító még fordítási időben kifejt, és a szövegbe helyettesít. A lenti kódrészlet után tehát például mindenhol, ahol a forrásszövegben MIN_BUTTON_PIN szerepel, oda behelyettesít egy 9-est, és a fordításkor ennek megfelelő kód fog készülni.
Egyébként valóban a kód olvashatóságát, illetve könnyű módosíthatóságát célozza az ilyen makrók használata.
Igen, köszi!
Nem értettem pontosan az Angol leírást, ezért nem mertem másképp fogalmazni! Gondolom ez akkor jó, ha ezen értékek nem nagyon változnak a futáskor, így memória takarékosabb lesz a program, mert nem kell const-ként, int-ként lefoglalni ezeket, a fordító majd beírja az értéket és cső. (gondolom én, simán tévedhetek is. Tévedés joga fenntartva! ![]() Köszi az infót!
Két hsz.-szel feljebb ajánlottam a tanfolyamot.
Ez rád is vonatkozik! Vegyél részt rajta! Utána már nem teszel fel ilyen kezdő kérdéseket.
Sziasztok!
Egy időkapcsolót szeretnék csinálni arduból. A kapcsolást megoldom egyszerűen if(hour()==bekapcsolasora&&minute()==bekapcsolasperc... stb, de azt hogyan tudnám megoldani, hogy ha az arduinó bekapcsolásakor már mennie kéne, akkor induljon? Előre is köszi!
Szia!
Egymásba ágyazott if szerkezetekkel szerintem megoldható. VAGY: Ha minden nap kell, akkor elég lehet másodpercekkel operálni. A bekapcsolási időponot megkapod: hour*3600+minute*60 + sec. Úgyanígy átalakítod a bekapcsolás idejét is, majd: 1 nap 86400 sec. szerintem egy long-ba belefér. if ido_sec_ben>=bekapcsol_ido_secben ...... Ha így csinálod, akkor intevallumot megani is könnyebb lesz!
Igen, erre én is gondoltam, de az a gond, hogy olyat tudnia kéne, hogy este bekapcsol, és másnap reggel kikapcsol...
RTC-t hasznász? Ha igen melyiket?
Arra gondolok, hogy ha azt használsz akkor ott lennie kell DateTime típusnak is! Ekkor csinálhatsz olyat, hogy: (persze, miután mindegyik DateTime változónak megadtad az évet, hónapot, napot, órát, percet, másodpercet.) DateTime kezdet; DateTime vege; DateTime most; azután if most>=kezdet && most <vege ... A hozzászólás módosítva: Aug 22, 2016
Igen, ds3231.
Mennie kellene ahogy írtam.
Bővebben: Link ott van: DateTime now = rtc.now(); Include rtc lib az elejére, utána a DateTime objektum simán meglesz szerintem, beállítod az értékeket, majd kipróbálod a >= ill <= operátorokat rá. Ha minden igaz ezt a műveletet megteheted, mert Linux időben mér mindent.
Jó, köszi megnézem.
![]()
Szia!
Itt van a teljes program és az a helyzet, hogy setupban sem ír semmit a lábakat illetően.
A hozzászólás módosítva: Aug 22, 2016
Szia!
Dehogynem. Ott adja meg a kontrollernek, hogy az adott számú láb input, vagy output lesz. pinMode(MIN_BUTTON_PIN, INPUT); azaz a 9-es láb input. azután az 52.sorban ezeket az értékeket simán átadja egy tömbnek (mármint a button-okat.). A tömb elemeivel pl 542 és 562. sorban operál. Airsoft bomba? Nekem is kellene egyet összeraknom, de ennél egyszerűbbet. 700+ sor most kicsit sok.
Az bizony, a programot nem én írtam, én csak egy picit a magam szájíze szerint módosítom. Kezdő AVResként egyenlőre csak töröm a dolgot.
Ami a korábbi kérdésem volt az végül is működik, csak kíváncsiságképpen tettem fel a kérdést, hogy ez így hogyan működik, mert amit arduino-s programozással kapcsolatban olvasgattam ott nem így volt leírva, de akkor jól gondoltam. Ami jelenleg problémát jelen, hogy ha ébresztőt állítok be (ALARM_ON) akkor ha megnyomom az (ALARM_BUTTON)-t akkor le kell állnia a csörgésnek és ez működik is, viszont random módon a leállás után elkezd sípolni, a program nem fagy le, mert minden más funkció működik. Eredetileg a idő mérés Timer1-ről ment egy 16MHz kvarcról, Timer2-ről pedig a kijelzés. Én a kettőt megcseréltem és a Timer2-t aszinkron módba állítottam egy órakvarccal, így jóval pontosabb lett az óra, minden más megy Timer1-ről belső 8MHz órajelről. Nem tudom, hogy vajon itt rontottam el valamit, vagy az óracsörgés programrésznél van valami gond? Én nem találtam semmi erre utaló hibát, de ez nem jelent semmit. Vagy hardware hiba? A hozzászólás módosítva: Aug 22, 2016
Valami miatt a 17-es láb, amire a BUZZER van kötve random H szintre mászik és a zümmer a saját frekvenciáján elkezd sípolni.
Jól, vagy rosszul megírt program azt nem tudom, viszont nem annyira egyszerű első ránézésre. A #define részeket azért írta, hogy könnyen változtatni tudjon a program futásának módján.
Nézegettem a kódot, de nem láttam hibát, miért kezd el dalolászás után még zümmögni is. Elvileg nem kellene neki, mert a dalolászó rutin után -mivel abban belövi a szükséges változókat false-ra - nem ír 17 es lábra 1-t. De persze tévedhetek ekkora kódnál. A 17-es láb le van húzva földre ellenálláson keresztül?
Nincs, tulajdonképpen lóg a levegőben, csak a zümmer van rákövtve.
Még arra gondoltam, hogy nem lehet-e gond, hogy a kontroller be volt ültetve a helyére és úgy próbáltam meg programozni ISP-n keresztül, az ISP lábai meg használatban vannak az órában is. Az égető program nem tudott vele kommunikálni és lehet hogy a kontrollernek ez a lába megkergült.
Sajnos nem tudom mi lehet a gond. Majd még ránézek a kódra, (ami nem kicsi azért!) de az is lehet a probléma, hogy zaj terhelődik a zümmert kapcsoló lábára. Pl ír a mellette lévőkre, stb, hiába lesz 0 logikailag a kódból (Mondjuk rá is mérhetsz mikor zümmög, hogy a 17-es lábon mekkora a fesz), attól még fizikailag 3.1-3.2 akármennyi fesz megjelenhet, ami bekapcsoja a zümmert.
Még valami, de ne sértődj meg a kérdésen: A zümmer bekapcsolásához mekkora logikai 1 hez tartozó feszültség kell? 3.3V vagy 5V nem mindegy, én már futottam ilyenbe bele... ![]() Minden logikai kapcsolást igénylő ezköz (LED display,LCD, Relé stb.) ,input lábai közös GND-n vannak? (Gondolom igen, csak kérdezem) Arra gondolok, hogy minden logikai 1 hez tartozó 5V ugyanahhoz a földhöz viszonyított? A hozzászólás módosítva: Aug 23, 2016
Ilyen hosszú interuptok meg szaggatják a Beep-et, azért cincog!
Amíg zenélsz, addig mást nem tud csinálni a procid, tilsd le előtte a megszakítást! Csak az meg az időzítéseket késlelteti. Megszakításban egyébként sem illik muzsikálgatni! Mert addig a másik timer megszakítás nem tud érvényesülni, megint csak csúszik az ídőzítés! Szóval használj inkább valami HW.-s hangkeltő eszközt, ami nem foglal proci időt! (Csipogót, MP3 lejátszót) Bővebben: Link A hozzászólás módosítva: Aug 23, 2016
Egyáltalán nem sértődöm meg, sőt, így kapok ötletet, hogy hol kereshessem a hibát, viszont sajnos itt nincs. A kapcsoláson belül egy föld van, így ez nem jön számításba. A 17-es lábat pedig teljesen kikötöttem, így valós értékeket tudtam rajta mérni, és így is random húz H szintre, a feszültség pedig 5V rajta.
Az az érdekes, hogy ebből az órából már hármat készítettem és eddig mind gond nélkül működik. Most apró változtatásokat végeztem a hardware-en, soros programozó portot tettem a panelre (nem használható), egy analóg kimenetet megszüntettem, és egy tápfeszfigyelő digitális bemenetet kötöttem és programoztam be.
Most az a tervem, hogy a korábban megépített órák valamelyikébe beleteszem ezt a procit, amivel a gond van a korábbi hex fájlt beletöltve, akkor kiderül, hogy a proci rossz-e vagy a hardware.
Sziasztok !
Van egy arduiono unom amelyben ATMEGA328P dolgozik. Fut rajta egy alkalmazás pl egy LED villogtató progi. Ha ezt a felprogramozott procit kiemelem az alaplapi foglalatból és felépítek neki egy panelt osszcival , megfelelő helyre bekötött LED-ekkel (maradva a fenti példánál) stb.. akkor fog az működni ? Tehát a másik kontrollerre ami még megtalálható az alaplapon van e szüksége a 328P-nek a program futtatása közben? Ha ez működik akkor volna még egy kérdésem . a 16Mhz-től eltérő kvarc-al lehet e járatni a kütyüt ? Van egy csomó 4 és 6Megás kristályom minek vegyek 16-ost ha ráadásul a sebesség nem is lényeges jesetemben... Üdv. |
Bejelentkezés
Hirdetés |