#define használata Arduino alatt

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

#define használata Arduino alatt

Hozzászólás Szerző: tomi52 »

A következő megoldás tényleg nem működik Arduino alatt, vagy én csinálok valamit rosszul?
A főprogramban a következőt írtam:

Kód: Egész kijelölése

#define HUFONT
A librari-ból hívott cpp-ben a következő van:

Kód: Egész kijelölése

#ifndef HUFONT
  #include "glcdfont.hu.c"
#else
  #include "glcdfont.c"
#endif
(Grafikus LCD fontkészlet választás.)
Nem tudom, hogy ez a C++-ban sztenderd lehetőség és itt hiányzik, vagy amelyik rendszerben működik, ott többlet, vagy egyszerűen csak valamit nem jól írtam?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Mit flancolsz?
Minek a 2 pont az állomány névben?

És mi lenne ha *.c helyett szabályosan a *.h állományokat includolnádbe?
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

kapu48 írta:Mit flancolsz?
Minek a 2 pont az állomány névben?
Nem mindegy mi a neve? Amúgy kipróbáltam más, pont nélküli névvel is, úgy sem működik.
kapu48 írta:És mi lenne ha *.c helyett szabályosan a *.h állományokat includolnádbe?
Mondjuk ezt a változtatást nem próbáltam, majd kipróbálom. A librari-ket a netről töltöttem, így volt az eredetiben, ehhez a "c"-hez nem tartozik "h" .

Még egy plusz kérdés: gondolom, van olyan doksi, csak nem tudom, hol keressem, ahonnan meg lehetne tudni, milyen #define-okat ad a környezet a beállításokról? Gondolok itt ilyesmikre mint például: #ifdef __AVR__ vagy #if ARDUINO >= 100
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Először tisztázzuk:
Melyik Arduino?.?.? IDEt használod?

A kisebb, mint 1.0.0 libek, nem kompatibilisek a nagyobb IDE-kel
Amit használni akarsz libet melyik IDE-hez ajánlják?

Mi a hibaüzenet?

Milyen LCD-ről van szó? Melyik libről (link)?
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

kapu48 írta:Először tisztázzuk:
Melyik Arduino?.?.? IDEt használod?
A kérdés jogos, bár úgy gondoltam, az alapkérdésem nem verzió függő.
A teljes környezet:
- Lenovo T400 notebook
- Kubuntu 14.04 LTS - linux oprendszer
- Arduino "HOURLY BUILDS" - 1.6.6-ként jelentkezik be - linux 32 bit-es verzió
- AVR-Duino / R3 (Arduino Diecimila) (tavir shop)
- Mega 2560 klón (vatera - nem R3, viszont kb. harmadába került)
- TFT LCD 2,4", érintőképernyő, microSD kártyahely - http://www.mcufriend.com (vatera)
kapu48 írta:A kisebb, mint 1.0.0 libek, nem kompatibilisek a nagyobb IDE-kel
Amit használni akarsz libet melyik IDE-hez ajánlják?
A libeket a netről töltöttem, két különbözőt is, mindkettővel működnek a programok, bár mindkettőben van egy-egy funkcióban kisebb hiba, nem azonos funkciók.
kapu48 írta:Mi a hibaüzenet?
Nincs hibaüzenet, csak "jelenség". Ha a programban létrehozok egy #define AKARMIT, úgy tapasztalom, a lib-ben ezt nem látja. Ugyan az az eredmény akár van #define, akár nincs.
Nem vagyok nagyon otthon a C++-ban, nem tudom, mi lenne a sztenderd működés. Kicsit szórakoztam már MPLABX-ben PIC-kel, abban a fejlesztő környezetben ez a program felépítés remekül működik. Nem tudom, itt ezt ne várjam, vagy csak valamit itt másképp kellene-e csinálnom.
kapu48 írta:Milyen LCD-ről van szó? Melyik libről (link)?
Az LCD-ről annyit tudok, amit fent említettem, illetve még annyit, hogy a meghajtó IC-je st7783 típusú..
A kétféle lib:
1. Adafruit_GFX_Library - SWTFT_Shield páros - github.com
2. st7783.zip-ben összecsomagolt libet - egy Arduino fórumban találtam a linkjét.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Előbb: „#define AKARMIT”

Utána: „#include "akarmi.h"

Vagy, az „akarmi.h” elejére: „#define AKARMIT”
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Az Arduino "HOURLY BUILDS" - 1.6.6 szerintem még Béta!

Inkább ajánlom az Arduino1.6.5-öst!
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

kapu48 írta:Előbb: „#define AKARMIT”
Utána: „#include "akarmi.h"
Vagy, az „akarmi.h” elejére: „#define AKARMIT”
Azt hiszem, talán érthetőbb lesz a kérdésem, ha mellékelek egy direkt erre írt kis tesztet. Ezt most az 1.6.1-es alatt csináltam, az van még fent a beta mellett a gépemen. Nálam a konkrét könvtárak a következők:
- a librari: ebben van a lib
- hívó program: (home könyvtáramból)/forras/arduino/itestproba
Most konkrét hibajelzést is produkál, mert úgy tűnik, mindkét include-ot végrehajtja, ezért a "szam" nevű változó duplán van definiálva:

Kód: Egész kijelölése

Arduino: 1.6.1 (Linux), Board: "Arduino Duemilanove or Diecimila, ATmega328"
iteszt/iteszt.cpp.o:(.data.szam+0x0): multiple definition of `szam'
itestproba.cpp.o:(.data.szam+0x0): first defined here
collect2: error: ld returned 1 exit status
Hiba a fordítás során.
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
librari:
iteszt.zip
próba program:
itestproba.zip
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

És ha odafigyelnél az ilyen apró részletekre?
ir1.h:

Kód: Egész kijelölése

#ifndef _IR1_H	//<<<<?????
#define _IR1_H

char szam = '1';

#endif
ir2.h:

Kód: Egész kijelölése

#ifndef _IR2_H	//	<<<<<????
#define _IR2_H

char szam = '2';

#endif
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Még mindig javításra szorul:

ir1.h:

Kód: Egész kijelölése

#ifndef _IR1_H	//<<<<?????
#define _IR1_H

#define szam  '1';

#endif
ir2.h:

Kód: Egész kijelölése

#ifndef _IR2_H	//	<<<<<????
#define _IR2_H

#define szam  '2';

#endif
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

[quote="kapu48"]És ha odafigyelnél az ilyen apró részletekre?
ir1.h:

Kód: Egész kijelölése

#ifndef _IR1_H	//<<<<?????
Ez nem oda "nem" figyelés, hanem szándékosan volt így. Mivel nem tudom, hol, milyen doksit kéne beszereznem, hogy ezeket a megoldásokat megismerjem, ezt a részletet csak kifigyeltem a libekben. Arra a következtetésre jutottam - tévesen? - hogy ez arra való, ha valami már előbb beincludeolta az adott forrást, ne jöjjön be még egyszer. Ezért szándékosan volt egyforma a két file-ban. Kijavítva az eredmény ugyan az.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

itesztProba.ino:

Kód: Egész kijelölése

 #define EGYES

#include "iteszt.h"
iteszt teszt;


void setup()
{
#if defined(EGYES)

 teszt.kiir();
 char szam_ =1; 
 Serial.println(szam_);
#else
 char szam_ =2;
 teszt.kiir();
 Serial.println(szam_);
 teszt.kiir();
#endif 
  
  
}

void loop()
{
  while(1);
}
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

Bocs, közben kicsit "hanyagoltam a témát", nem jártam erre.
Ez így ok, csak nem arra megoldás, ami az alap kérdésem. Kezd meggyőződésemmé válni, hogy azt az Arduino környezet nem tudja.
Ha a forráson belül van a define és a lekérdezése is, akkor persze ok. De ha a főprogramban van a define, eddigi próbálkozásaim alapján úgy tűnik, hogy azt a librari programban nem érzékeli. Mire lenne ez jó? Most egy konkrét példa alapján jött elő: TFT LCD kezelő librari-be a szerint kell beincludálni egy további c forrást, hogy uno vagy mega panelra fordítom a programot. Mennyivel elegánsabb lenne, ha ezt a főprogramból lehetne állítani, és nem a librari-be kellene belepiszkálni.
Mint korábban írtam, nem vagyok nagyon otthon a C++-ban, sem a PIC-es MPLABX-ben, de ott pl. remekül működik egy ilyen megoldás.
Végül is mindegy, (semmiképp nem akarok hitvitát provokálni, de) nekem pillanatnyilag szimpatikusabb a PIC, csak az arduino-hoz meg annyi libet lehet találni a neten. És van egy mpIDE fejlesztő környezet is, ami meg arduino szerű, de tud PIC32-eseket kezelni.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: segítség!!

Hozzászólás Szerző: kapu48 »

Ebben teljesen igazad van!
Az arduinó 1 végletekig leegyszerűsített nyelv, amatőr müvészek számára kitalálva!

A Cpp betéteket viszont azok használják, akik ennél azért többet szeretnének!


Használj Atmel Studiot, és megszabadulsz az Arduino korlátaitól!
:wink:
Avatar
tomi52
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2009. június 15. hétfő, 6:00

Re: segítség!!

Hozzászólás Szerző: tomi52 »

kapu48 írta:Használj Atmel Studiot, és megszabadulsz az Arduino korlátaitól!
:wink:
Megint rég jártam erre, kicsit mással foglalkoztam. Kössz a segítséget.
Ez a stúdió nálam nem játszik. Néztem már többször az oldalt, de mióta nyögdíjas vagyok, és nem köt a munka(hely), csak olyan fejlesztő rendszer érdekel ami fut linuxon. PiciPuha Ablakai kímáljenek! (Használtam sok évig, tudnék pár (ind)okot felsorolni, de eszem ágában sincs hitvitát indítani.)
Válasz küldése