Keresés

Részletes keresés

vfp Creative Commons License 2014.02.08 0 0 180

Szia!

 

Nem a TávIr féle panel, egyszerűen az ebay-ról.

ez:

http://www.ebay.com/itm/281234403721?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

 

A másik is ilyen.

 

Betöltőttem a demokból a Hello world-öt, kiegészítettem egy kicsit. Így már látom hogy az UNO működik, a D13-on a LED ki-be kapcsolgat, a kijelző egy-egy villanást csinál (háátérvilágítás), mást nem.

 

prg:

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
  pinMode(13,OUTPUT);
  lcd.init();                      // initialize the lcd
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
  delay(1000);
}

void loop()
{
  lcd.clear();
  digitalWrite(13,HIGH);
  lcd.setCursor(0,0);
  lcd.print("AAAAAAAAAAAAAA");
  delay(3000);
  digitalWrite(13,LOW);
  lcd.setCursor(0,1);
  lcd.print("bbbbbbbbbbbbbb");
  delay(3000);
}

 

 

Kábelezést ellenőriztem, a tápnak elégnek kell lennie, hiszen csak az LCD van rajta. (Egy másik kiépítésben van rajta SD shield, RTC, DS18B20 hőmérő + 4bites módban az LCD és tökéletesen megy.

 

 

 

Előzmény: Prof (179)
Prof Creative Commons License 2014.02.08 0 0 179

Szia!

Ez a Távírász-féle i2c panel?

Ha a kijelző vezetékelése simán megy, akkor jó eséllyel három helyen lehet galiba:

-- kábelezés (különösen táp, beleértve a terhelhetőséget)

-- i2c címzés

-- i2c kábelezés (sajnos ez sem mindig magától értetődő, az arduino.cc-n is van/volt fent pár ökörség).

 

Aztán érdemes megnézni, hogy a sketchben valami nem kavar-e be a lábaknál. Ezt ki lehet küszöbölni, ha a library mellé rakott mintákkal teszel egy próbát.

 

Én így indulnék neki.

Előzmény: vfp (178)
vfp Creative Commons License 2014.02.07 0 0 178

Sziasztok!

 

Természetesen megint elakadtam.  :(

 

Arduino 1.0.5, UNO panel, I2C LCD panel és egy 1602 LCD

 

Az LiquidCrystal_I2C -t próbálom beüzemelni. Címét le tudom kérdezni, de e legegyszerűbb kiírás eredménye is csak egy felvillanás a kijelzőn, és méla sötétség.

 

Ez valamikor működött, de felraktam egy LCD_keypad shield-et és azzal játszottam egy darabig. Most szeretnék visszatérni az I2C-hez, mert a keypad ütközik az SD kártya kezeléssel (D10 PIN). Normál LCD kezelés 4bit-es módban megy, csak sok kemenetet foglal.

Már szereztem egy új LCD-t és egy új I2C LCD vezérlőt, de nem ezekkel van a baj.

A LiquidCrystal_I2C library-t már lecseréltem, de ez sem segített.

 

Várom az ötleteket, mert 2 napja csak keringek körbe-körbe.

 

Köszönöm előre is.

 

 

Prof Creative Commons License 2014.02.06 0 0 177

Szia!

Az első kör meggyött, válaszoltam is rá, a többi még nem.

Előzmény: VerenJoe (176)
VerenJoe Creative Commons License 2014.02.05 0 0 176

Köszi, elküldöm az email-edre a fájlokat, képeket holnap tudok készíteni.

 

Előzmény: Prof (175)
Prof Creative Commons License 2014.02.05 0 0 175

Szia!

Két alapvető dolog feltétlenül szükséges lenne a dologhoz:

1. Maga a vezérlő sketch (program), ami az Arduinon fut.

2. A rendszer sematikus rajza, amelyen a kábelezés, elektronikai alkatrészek pontosan látszanak, beleértve pl. a motorok típusát is.

 

Ha ez megvan, akkor ez alapján tudok valamit nyilatkozni (pl. hogy tudok-e segíteni vagy sem).

Előzmény: VerenJoe (174)
VerenJoe Creative Commons License 2014.02.05 0 0 174

Sziasztok, új fórumozó vagyok. Segítségre lenne szükségem a következőhöz: építettem egy mozgó szimulátor prototípust két motorral. Egy ismerősöm készíti a vezérlést Arduinoval. Sajnos sokszor nem ér rá, így nem haladunk a dologgal, nekem pedig nagyon sürgős lenne. Megcsinálta elméletileg teljesen, minden úgy működik, ahogy kell, de a motorok mozgása nem egyenletes, hanem szakaszos. Szükségem lenne valakire, aki bele tudna nézni, vagy meg tudná oldani sos-ben a problémát. Természetesen kifizetem a munkáját. Ha valakinek szakmai kérdése lenne, megpróbálok rá válaszolni, de laikus vagyok a témában, én csak a gépet találtam ki és szeretném már használni.

 

Köszönöm 

Prof Creative Commons License 2014.02.04 0 0 173

Igen, ez az aktuális tipp, de még nem ástam bele magam. Az lesz, hogy aki vállalja, feléleszti, aztán majd megalkuszom vele valami épeszű ellenszolgáltatásban.

Előzmény: John Zero (172)
John Zero Creative Commons License 2014.02.04 0 0 172

Hát, ha a bootloader felment, de mégse megy az egész, akkor lehet ott nagyobb a baj. De nem biztos, hogy a PROGMEM túlszaladása okozta, az maximum a flash tárat írhatja felül. Esetleg a fuse-ok elállítódtak? (Vagy rossz modellt választottál? Én szívtam egy kicsit, amíg rájöttem, hogy az atmega168 és atmega328-nak nem ugyanaz a fuse kiosztása)

 

Előzmény: Prof (171)
Prof Creative Commons License 2014.02.03 0 0 171

Az új bootloaderes dolgot egy másik kártyával végigjátszottam. Úgy fest, hogy felment rá, de ettől még nem működik.

A javallatot megnézem, hátha.

Előzmény: John Zero (170)
John Zero Creative Commons License 2014.02.03 0 0 170

Miért nem raksz rá új bootloadert ISP-vel? Vagy esetleg még mindig ott van a HVP (High Voltage Programming), ha jól tudom.

http://mightyohm.com/blog/2008/09/arduino-based-avr-high-voltage-programmer/

 

Előzmény: Prof (169)
Prof Creative Commons License 2014.02.03 0 0 169

Minek? Lerakod a legelejére, oszt kész.

Csinálj pár futás-tesztet így is, úgy is, mert nincs kizárva, hogy kb. egy idő a számolás és a progmem kezelése.
Arra figyelj, hogy a progmem ne verje ki a memóriát, mert nálam egy kártyán már felülírta a bootloadert, úgyhogy most papírnehezék a kártya.

Előzmény: zoknee (168)
zoknee Creative Commons License 2014.02.03 0 0 168

Nem túl nagy még, majd megnézem. De használnék Progmem-ben tárolt tömböt AD gyorsításhoz, hogy ne kelljen számolgatni annyit. Ahhoz jó lenne ha külön fájlban tudnám letárolni az 1024-es tömböt.

Előzmény: Prof (167)
Prof Creative Commons License 2014.02.03 0 0 167

Öööö. Izé...

MEKKORA ez a sketch?

Azért kérdem, mert nekem az eddigi legnagyobb (amiben nincs PROGMEM) 11,8 kB c++, 8,7 kB lefordítva és simán át lehet látni.

 

Én nem vagdosnám szét, hanem hagynám egyben az egészet és belső hívásokat [void (...) ] csinálnék a különböző feladatokra. Így kevés globális változóval meg lehet oldani a kérdést. Az egyes al-rutinokban meg annyi változót deklarálsz, amennyit akarsz (illetve ami a memóriában elfér). Ráadásul így áttekinthető(bb) is lesz az egész program.

Másfelől. Ez (lehet) az a tipikus eset, amikor egyszerűbb egy új könyvtárat (library) létrehozni. Persze ez programozásilag számottevően bonyolultabb, illetve más feladat.

Előzmény: zoknee (166)
zoknee Creative Commons License 2014.02.03 0 0 166

Sziasztok!

 

Több fájlra szeretném szétosztani az ArDuino-s projektemet, hogy jobban olvasható, logikusabban rendezhető legyen. Ha létrehozok egy újabb fájlt az ArDuino IDE-vel, és abban megírom a függvényeket, akkor azokat elérem a főprogramban. Viszont ha ezekben a fájlokban deklarálnék globális változót, azt nem látja a főprogram.

Amelyik projektből kiindultam, ott ez a módszer működött (több fájlra szétbontva, és a logikailak oda tartozó globális változók az adott fájlban voltak deklarálva, és a főprogram is meghívta őket), és az ArDuino.cc-n sem találtam még instrukciót, mit kéne még csinálnom, hogy jó legyen. Extern-ként meg kéne hivatkozni? Az IDE 1.0.5-ös verzióját használom Windows 8-on.

Prof Creative Commons License 2014.02.02 0 0 165

A régi nyelvekkel semmire sem mész lényegében. Ez objektumorientált programozás, legalábbis a C++-nek az Arduino által használt eleme.

 

Angolból sok normális könyv van, azért kérdeztem, meg a fórumok (ezen egy szál kivételével itt) gyakorlatilag sehol semmi sincs.

 

 

Előzmény: vfp (164)
vfp Creative Commons License 2014.02.02 0 0 164

Az angolt tanulgatom, de öreg fejjel nehezen haladok vele.

 

A regi programnyelvek egy részét ismerem, csak 20 éve nem használtam (fortran, basic, pascal, clipper)

Előzmény: Prof (163)
Prof Creative Commons License 2014.02.02 0 0 163

Szia!

 

Kérdezgess bátran!

A library-k jelentős részének nem nagyon van részletes leírása. Ami akad, az vagy az arduino.cc fórumában van, vagy a GitHub-on.

 

A LiquidCrystal könyvtárban a print és a write között annyi a differencia, hogy a write a zárójelbe írt éréték (vagy a zárójelbe írt változó tartalmának megfelelő) ascii kódú karaktert jeleníti meg (csak azt), míg a print-tel gyakorlatilag bármit kiírhatsz ('a' egy karaktert, "asdf" több karaktert ír ki, míg a változó kiírható magában is (direktben), vagy különböző módokon kódolva (dec, hex, oct, bin).

 

Változó konverzióra sok mód van, de egyik sem egyszerű. Programozási szempontból az az elsődleges, hogy a célnak megfelelő minimálisan szükséges (vagyis a lehető legkevesebb szabad memóriát lekötő) változó legyen az adott célra deklarálva.

 

Mennyire megy az angol?

Előzmény: vfp (162)
vfp Creative Commons License 2014.02.01 0 0 162

Nagyon köszönöm a részletes leírást!!!  :)

 

Nekem nagyon hiányoznak az adattipus konverziók.

 

Még arra sem igazán jöttem rá, hogy mi a különbség az lcd.print() és az lcd.write() között.

 

Nem igazán tudom feldolgozni azt, hogy van egy library (mondjuk az RTC-hez), és nem találok hozzá megfelelően alacson szintű leírást (mármint az én szintemnek megfelelőt).

 

Sajnos csak itt tudok kérdezgetni, ha már elvesztettem a türelmemet.

 

Köszönöm  :)

Előzmény: Prof (161)
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)

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