Keresés

Részletes keresés

Prof Creative Commons License 2014.01.31 0 0 161

Nagy vonalakban...

 

1. Tudod, hogy a változódba mi jön meg az rtc-ből (pontosabban a hőmérőből). Valószínűleg egy analóg érték, amit egy viszonylag egyszerű osztás/szorzás/összeadás/kivonás műveletsorral szépen decimális celsius értékké lehet konvertálni. Az, hogy ez egész (int) vagy tört (float). Namost. Az a szám, amit a végén megkapsz (float) praktikusan (a 2. pont szerint) szorzandó tízzel (egy tizedes) vagy százzal (két tizedes), aztán kell belőle gyártani egy sima int vagy long változót (ha csak szobahőmérsékletet mérsz, az int bőven elég). Figyelni kell még arra is, hogy signed vagy unsigned változót használsz-e, mert az előbbi elmehet negatívba, a másik viszont nem. A float signed, a lenti példában (mivel órához használtam) ezért van unsigned long, mert nem lehet negatív az érték.

 

2. El kell döntened, hogy milyen pontossággal akarod megjeleníteni az értéket. Két tizedes jegy szerintem még sok is (a hőmérő pontossága aligha van 1 fokon belül, innentől meg maximum a változást tudod tized fok pontosan figyelni, és még ez sem teljesen megbízható). Lásd még 1. pont.

 

3. Kód

 

void vagy(unsigned long v) {   // ide egyébként attól függően kellhet a sima long, hogy elmész-e negatív tartományba vagy sem, lásd fent

// a v a fő loopban a hőmérséklet tárolására használt változó, típusát tekintve legyen azonos ezzel (itt unsigned long)
  byte ones;  // sima változó-deklarálás, ez lesz az "egész"
  byte tens;   // sima változó-deklarálás, ez lesz a "tizes"
  byte fractions; // tized

  byte fractionss; // század

// feltételezzük, hogy a hőmérsékletet két tizedes jegyig akarod megjeleníteni, és így a korábbi egész celsius-t osztottad 100-zal (in da loop)

// itt volt egy v=v/10, de az nem kell, felesleges.

  fractionss = v%10; // a század értékét meghatározzuk.

// a v%10 jelentése: oszd el v-t 10-zel, és nézd meg a maradékát. Technikai értelemben ez annyit jelent, hogy "levágjuk" a változó egyes számtartományba eső része feletti összes elemet (tizes, százas stb.), majd a számot tároljuk egy változóban (ami lehet byte, mert az értéke soha nem több 10-nél).

  v = v/10; // elosztjuk tízzel, vagyis kvázi levágjuk az utolsó számjegyet, ami eddig 10-es számmező volt, az 1-es lesz, ami 100-as, az 10-es.
  fractions = v%10; // mint előbb
  v = v/10; // és tovább.
  ones = v%10;
  v = v/10;
  tens = v%10; // innentől is lehet feljebb menni a százas, ezres, tízezres stb. számmezők felé, amit a változó bír.

 

// ez innentől a megjelenítés. Pofon egyszerű, meghatározod a tizes számmezőben lévő szám helyzetét (legyen mondjuk az 1. pozíció, és kiírod a számot):
  lc.setDigit(0,1,tens,false);

// aztán az egyes számmező értékét eggyel jobbra, a 2. pozícióba, de ide ugye kell egy tizedesjelző is (ez itt a "true" jelzés):
  lc.setDigit(0,2,ones,true);

// aztán megyünk tovább...
  lc.setDigit(0,3,fractions,false);
  lc.setDigit(0,4,fractionss,false);

}

 

Az LiquidCrystal könyvtárral ez úgy fest, hogy:

 

lcd.setCursor(0, 0); // kurzorpozíció: 0. sor (felső), 0. pozíció (bal szélső). Innen kezdődően jobbra íródik ki a következő sor által definiált karaktersor

lcd.print(tens);        // vagyis a tizes számmező számjegye. Mivel ez 0-9-ig lehet valami, csak egy karaktert tartalmaz.

lcd.setCursor(0, 1); // eggyel jobbra lépünk (kurzorpozíció)

lcd.print(ones);       //egyesek

lcd.setCursor(0, 2);

lcd.print(',');           // itt így jön a tizedesvessző

lcd.setCursor(0, 3); // és a többi

lcd.print(fractions);

lcd.setCursor(0, 4);

lcd.print(fractionss);

 

Ez picit kód- és időigényes megoldás, viszont mindig pontosan ugyanúgy jelenik meg a szám.

 

if, illetve case vizsgálattal azt is meg lehet csinálni, hogy ha az első számjegy 0, akkor üres karaktert adjon, ne 0-t írjon ki (és fordítva is persze).

 

Biztos van ennél elegánsabb megoldás is, egyelőre nem sikerült rájönnöm.

Előzmény: vfp (160)
vfp Creative Commons License 2014.01.31 0 0 160

köszi, nem igazán jött le magamtól

de majd kipróbálom

Előzmény: Prof (159)
Prof Creative Commons License 2014.01.31 0 0 159

Ne az értéket írd ki, hanem vagdosd fel (lásd a mintát). Az elemek utáni true/false a tizedesvessző helye, de gondolom ez lejött.

Előzmény: vfp (158)
vfp Creative Commons License 2014.01.31 0 0 158

Köszönöm.

 

Most egy DS18b20-as hőmérő van rajta, 9 bitet olvasok, csak ronda a sok 000 a végén.

Előzmény: Prof (157)
Prof Creative Commons License 2014.01.31 0 0 157

Hali!

Én eleve nem azt csinálnám, hogy a now-val hívom, hanem külön az egyes időegységeket.

Lásd:

http://www.pjrc.com/teensy/td_libs_Time.html

 

 

Csonkolás:

 

void vagy(unsigned long v) {
  byte ones;
  byte tens;
  byte fractions;

  byte fractionss;
  v = v/10;
  fractionss = v%10;

  v = v/10;
  fractions = v%10;
  v = v/10;
  ones = v%10;
  v = v/10;
  tens = v%10;
  lc.setDigit(0,1,tens,false);
  lc.setDigit(0,2,ones,true);
  lc.setDigit(0,3,fractions,false);
  lc.setDigit(0,4,fractionss,false);

}

Ez max72xx-re fogja kiírni, de az elsó rész gyak. bármi lehet.

 

A sketchben a vagy([homersekletvaltozo]); formulával tudod hívni. A homerseklatvaltozo leginkább unsigned long kell legyen, bár ezen lehet kísérletezni, hogy mi jön ki az rtc-ből (nekem a DS3231-ből sima int jön ki). Lehet, hogy csak egész értékeket fogsz kapni, ez a hőmérőtől függ (bocs, nem néztem vissza, hogy pontosan milyen).

Előzmény: vfp (156)
vfp Creative Commons License 2014.01.31 0 0 156

Üdv.

 

Elakadtam  :(

 

Használom az RTC_DS1307 RTC eljárást

 

meghívom:

  DateTime now;
  now = RTC.now();

 

Most ott van a now változóban a dátum és az idő.

 

Valahogy meg kellene állapítanom, hogy a now.month az 1 vagy 2 karakter hosszú.

 

A másik gondom, meg van a hőmérséklet érték. Hogyan tudnám 2 tizedesre csonkolni?

 

LCD-re szeretném kiírogatni az időt és a mért hőmérsékletet. 

Prof Creative Commons License 2014.01.27 0 0 155

Hajrá! :-)

Előzmény: somat22 (154)
somat22 Creative Commons License 2014.01.27 0 0 154

Nos, megérkezett az Uno R3 alappanelem, a lentebb linkelt oldaltól. Hibátlan, sérülésmentes, és problémamentesen működik.

 

Jöhet a nagy tanulás:)

Laci_L Creative Commons License 2014.01.24 0 0 153

nem, de még nem volt rá szükségem sem  :-)

(úgy értem, nem volt túl bonyolult project eddig, soros porton mindent látni, ha kell)

Előzmény: John Zero (152)
John Zero Creative Commons License 2014.01.24 0 0 152

Ezt próbálta valaki?

http://www.visualmicro.com/post/2012/10/24/Modify-Arduino-Variables-During-a-Debug-Session.aspx

Arduino debugger, fizetős, de talán megéri.

 

vfp Creative Commons License 2014.01.23 0 0 151

Köszönöm, ezen már elindulok.  :)

Előzmény: Prof (150)
Prof Creative Commons License 2014.01.23 0 0 150

http://forum.arduino.cc/index.php?topic=208451.0

 

Mindazonáltal nekem is voltak vele nehézségeim jelentős méretű (PROGMEM-mel paraméterezett) tömböknél. Úgyhogy elmatekoztam 1 dimenzióssá és inkább trükkel hívtam, így működött. (Gyakorlatilag adott egység méretű szekvenciák voltak, ezeket egyesítettem.)

Előzmény: vfp (149)
vfp Creative Commons License 2014.01.23 0 0 149

Nézegetem az Arduino szoftvert, de nem tudok rájönni hogyan lehet kétdimenziós tömböt létrehozni.

 

Van valakinek ötlete?

Prof Creative Commons License 2014.01.23 0 0 148

Hogy ne legyen feszültség-eltérés. Ez csak annyi, hogy az Arduino kitolja a kártyának, hogy hány volton működik (az elterjedtek közül a Due kivételével mind 5V-on). Bár az arduino.cc kapcsolási rajza szerint be sincs kötve... :-)

Előzmény: Laci_L (147)
Laci_L Creative Commons License 2014.01.23 0 0 147

én is így látom. SPI-nél nem nagyon lehet hibázni.

Már intézem a visszaküldést....

btw Vref minek? hova?

Én a SPI rádugásán kívül még a D10-chip_selectet vittem át egy kábellel.

Előzmény: Prof (146)
Prof Creative Commons License 2014.01.22 0 0 146

Asszem a 10-11-12-13 láb kell adatforgalomra, ebben az SPI is benne van, plusz az 5V, plusz a test plusz a Viref, a többi az SD kártya. Próbapanelen össze lehetne dugdosni, bár nem egy egyszerű művelet. Az SPI csatlakozóval (oldalt középen "anya") ne foglalkozz, annak az összes lába megfelel az Uno V3 (és így a Nano) egy-egy lábával.

Szóval szerintem inkább küldd vissza, hogy hibás.

Előzmény: Laci_L (145)
Laci_L Creative Commons License 2014.01.22 0 0 145

Sajnos nem áll rendelkezésre UNO, csak Nano van itthon. 2db. De egyikkel sem kommunikál.

Illetve, ha már az alap LAN dolgai is problémássak, hiába kommunikálna...

Előzmény: Prof (144)
Prof Creative Commons License 2014.01.22 0 0 144

Egyébként szerintem told rá egy kártyára (bármi UNO v3 kompatibilis jó, kivéve a DUE-t), és futtass le bármiylen tesztet.

Előzmény: Laci_L (142)
Prof Creative Commons License 2014.01.22 0 0 143

Nem, küldd vissza cserére!

Előzmény: Laci_L (142)
Laci_L Creative Commons License 2014.01.22 0 0 142

Köszönöm!

 

Azért kérdeztem, mert belefutottam egy hibás kártyába és még így-  csak +5V táppal - sem működik, csak nagyon ritkán!?

Tehát rapszódikus és kva ritka, ha világítanak a FULLD, 100M, LINK, stb. ledje.

Kommunikálni SPI-n (+D10 high)  meg pláne nem tudott eddig soha.

 

Nemtom, javítható-e ez.....!?

Előzmény: Prof (141)
Prof Creative Commons License 2014.01.21 0 0 141

Elvileg helyes a meglátás. Valahogy nekem most nem adja, hogy csináljak egy gyors tesztet, de szerintem működik így.
Bár azon túl, hogy tudod, hogy működik, sokat nem érsz vele, mert az SD kártyát nem fogod tudni kezelni.

Előzmény: Laci_L (140)
Laci_L Creative Commons License 2014.01.21 0 0 140

Üdv. Mindenkinek itt!

 

Jól gondolom, hogy egy Eth./SD Shield-nek, ha csak tápot adok és rádugom az RJ45-öt hálózattal, akkor tökéletesn vissza kellene jeleznie a FULLD, 100M, LINK ledekkel, hogy mi van?

Ehhez nem kell neki alaplap vagy kommunikáció!?

Előzmény: Prof (135)
John Zero Creative Commons License 2014.01.10 0 0 139

"Az eddig begyűjtött információk alapján gyerekkori izgalom motoszkál bennem, mert végre olyan dolgokat is megvalósíthatok, amiket eddig nem is gondoltam volna."

 

Tökéletesen megfogalmaztad az Arduino platform (egyik) lényegét, valóban ez volt a célja a kitalálóinak!

 

Előzmény: somat22 (132)
Prof Creative Commons License 2014.01.09 0 0 138

Az bőven nem elég, hogy kikapcsolod. Folyt. köv. majd a hétvégn.

Előzmény: somat22 (137)
somat22 Creative Commons License 2014.01.09 0 0 137

Nagyon köszönöm az infókat. Igen, én is láttam, hogy angolul rengeteg minden elérhető

 

Tudom, hogy nem lesz ilyen egyszerű, de amíg a lehetőség adott, addig a cél lebeg a szemem előtt.

 

Mindenképpen ki/be kapcsolható lesz, így pl indításnál mindenképpen kikapcsolt állapotban, áramtalanítva lesz.

 

 

Igen, nem a legolcsóbb, de jobb áron jött akcióban a lap, mint itthon, és itt fedeztem fel ugye:)

Azóta találtam már jópár olcsóbbat is, akár az ebayen is.

Viszont ha van megbízható, olcsó forrásod, megköszönöm, ha megosztod velem.

 

Üdv

Előzmény: Prof (135)
Prof Creative Commons License 2014.01.09 0 0 136

Ez a miniinthebox.com valami döbbenetesen drága.

Előzmény: somat22 (134)
Prof Creative Commons License 2014.01.09 0 0 135

Hali!

 

A magyar Arduino érában én ezen a blogon és a távírós jóemberen kívül érdemi információforrással nem találkoztam. Angolul ennek kb. az ezerszerese van, gyakorlatilag még nem találkoztam olyan problémával (egy halott kárgyát leszámítva), amit ne tudtak volna orvosolni napokon (sokszor órákon) belül. Kiváló angol irodalma van.

 

Az ATmega328 kontroller lábanként elvileg 40 mA-t bír, gyakorlatilag 20-25 mA-nél többel nem javasolják terhelni. Ezen felül az egész mikrokontroller összesen 400 mA-rel terhelhető.

 

A kitek (amiket azért tudatosan választottam) kb. harmadát használom, a maradék tök fölösleges. IR távirányító például. Vagy 8x8-as mátrix LED. 7 szegmenses shift register... Dőlésérzékelő... Sok felesleges kacat.

 

8-10 ledhez már shift register vagy pwm meghajtó kell. Különben 8-10 lábad oda (vagy multiplexelsz, de akkor ugye a mikrokontroller értékes programhelyét és számítási kapacitását pazarlod). Ez nem különösebben alkatrészigényes.

Nem úgy a vezérlések. A "rákötöm a relét, azt kész" eleve nem működik. Kell egy előtétellenállás, egy NPN tranzisztor és egy dióda. Ha elegánsan akarod megcsinálni, akkor még egy optocsatoló, hogy ha az autóban galiba van (ami alapból pl. egy indítózásnál előfordul jelentős tüskék formájában), ne tudjon SEMMILYEN módon visszamenni a lábakra, üzemzavar esetén sem. És ez ugye relénként. Plusz a próbanyák, amire mindezt felforrasztod, meg az egyebek, sorkapcsok, műszerdoboz, kábelek, nyavalyatudjami.
Fényérzékelés nem nagy mutatvány, három alkatrész. Jól működőre megcsinálni már annyira nem magától értetődő.

 

Prof

Előzmény: somat22 (134)
somat22 Creative Commons License 2014.01.09 0 0 134

Üdv!

 

A lapot, ami egy Arduino Uno R3 kínai webshopból rendeltem, valamikor a jövő héten érkezik.

A magyar webshopokat is néztem, biztosan rendelek tőlük, márcsak a támogatottság, leírások miatt is.

Azért is nem mertem berendelni mindent egyszerre, mert egyrészt még nagyon az elején járok, másrészt szeretném az ismereteket megszerezni ahhoz is, hogy mire lesz szükségem a projektemhez.

 

Ha érdekel valakit, magával az arduinoval is az alábbi webshopban találkoztam, innen indult az ismerkedés:

www.miniinthebox.com

 

Eddig minden megjött ingyen postával, jó áron, szóval reménykedek, hogy nem lesz átverés.

 

 

Az ebayes kitekre azért gondoltam, mert tényleg nagyon sokminden benne van, és kárba nem fog veszni(vagy továbbadok a felesleges dolgokon, vagy éppen jól fog jönni valamikor.

 

Az nem világos még számomra, hogy mennyire terhelhetem a boardot?

 

Az első projekt biztosan az előbb is említett autós fedélzeti computer lenne.

Amit szeretnék benne:

 

-Fordulatszámmérés, kijelzés 8-10 led segítségével

-Külső hőmérséklet kijelzése LCD panelen

-fényérzékelés, bizonyos sötétedés után felkapcsolna relén keresztül a tompított

-víz/esőérzékelés, víz hatására relén keresztül kapcsolja az ablaktörlőt

 

Emellett láttam, hogy vannak átfolyásmérő modulok, amivel akár egy hozzávetőleges fogyasztás is mérhető.

 

Ezeket egy board elbírja?

Előzmény: Prof (133)
Prof Creative Commons License 2014.01.09 0 0 133

Hali!

 

Üdv a fedélzeten!

 

A starterkitek jelentős része 70% lőzung, tökéletesen felesleges alkatrészekkel. Amelyeket én rendeltem magamnak (még olcsóbban is), azok kb. harmadát épeszű áron ki tudtam árusítani, így kb. az ár fele visszajött (a kártyák rendszerint megmaradtak, bár erre is van kivétel).

 

Kártyát mindenképp kínából kell rendelni (több normális árú és tisztességes minőségű gyártó van), alkatrészekre pedig a 3-4 normális budapesti illetőségű webshop. Kínából igazán csak a nagytételes dolgokatérdemes rendelni (pl. LED, tranzisztorok, sorkapcsok, relék, motorok, vezérlő IC-k stb.), ahol számottevő a kinti és a hazai ár közti különbség.

 

Prof

Előzmény: somat22 (132)
somat22 Creative Commons License 2014.01.09 0 0 132

Üdv Mindenkinek!

Az elmúlt időszakban nagyon sokat böngésztem a neten, és az Arduino platformra bukkantam.
Az érdeklődésemet nagyon felkeltette, így jelentkeztem egy ingyenes tanfolyamra is, amit ezúton is köszönök a szervezőjének.

A neten egy Arduino uno R3-as panelt rendeltem is magamnak, és igyekszem folyamatosan beszerezni a dolgokat a további tanuláshoz. Célom, hogy elsajátíthassam a programozást(ezt a részét érzem részemről a szűk keresztmetszetnek), és a különböző modulokkal, érzékelőkkel, ledekkel, kijelzőkkel a jelenlegi öreg járgányomba hozzak össze egy amolyan fedélzeti számítógépet(Fordulatszámmérés, hőmérséklet kijelzés, esőérzékelés, fényérzékelés, stb)

Ennek megfelelően nézelődök starter kiteket is, és nagy meglepetésemre az ebay jobbnál jobb packokat kínál, igen baráti(10-14k áron). Remélem nem lövök mellé.
Az eddig begyűjtött információk alapján gyerekkori izgalom motoszkál bennem, mert végre olyan dolgokat is megvalósíthatok, amiket eddig nem is gondoltam volna.

A tanácsokat, figyelmeztetéseket előre is köszönöm, és örülök, hogy megtalálhattam a megfelelő hobbit magamnak:)

Üdvözlettel:
Soma

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!