2011-01-16 19 views
34

मुझे पता है कि आपको Arduino इंस्टॉल निर्देशिका के "पुस्तकालय" फ़ोल्डर के तहत कोई बाहरी पुस्तकालय रखना है, लेकिन मेरे पास एक प्रोजेक्ट है जो मैंने प्रोजेक्ट के लिए बनाए गए कई पुस्तकालयों का उपयोग किया है और मुख्य रूप से उस कोड को स्वयं निहित और मुख्य पीडीई फाइल से बाहर रखने के लिए। हालांकि, मैंने पुस्तकालयों को एक ही निर्देशिका में मुख्य पीडीई फ़ाइल के रूप में रखने की कोशिश की है ताकि मैं सबवर्सन में सबकुछ सिंक हो सकूं (मैं इस पर कई कंप्यूटरों पर काम करता हूं) और मैं नहीं जाना चाहता वापस पुस्तकालयों को अलग और समन्वयित करना। इसके अलावा, केवल स्केच फ़ोल्डर को आसानी से ज़िप करने में सक्षम होने के लिए और यह जान लें कि इसमें आवश्यक सब कुछ शामिल है।Arduino स्केच निर्देशिका में सभी पुस्तकालयों को रखते हुए

मैंने हेडर फ़ाइलों को एक नए टैब के रूप में स्केच में जोड़ने का प्रयास किया है, लेकिन ऐसा लगता है कि वे बिल्कुल काम नहीं कर रहे हैं ... अगर वे Arduino IDE में उठना चाहते हैं तो भी परवाह नहीं है।

मैं भी उप-निर्देशिकाओं के स्केच निर्देशिका (मैं बहुत क्या पसंद करेंगे) के लिए पुस्तकालयों को जोड़ने और फिर उनसे लिंक करने वाली की कोशिश की है:

#include "mylib/mylib.h" 

और

#include <mylib/mylib.h> 

लेकिन दोनों फ़ाइल में इन परिणाम त्रुटियों को नहीं मिला।

क्या यह संभव है? और, यदि हां, तो मैं उन्हें मुख्य फाइल में निर्माण के लिए कैसे शामिल करूं? अधिमानतः अपनी उपनिर्देशिका में।

+0

मैक्रोज़ का उपयोग करके आंशिक समाधान: http://arduino.stackexchange.com/a/9575/6697 – jjz

उत्तर

8

नमूने मेरे पास है के लिए, "*.h" और "*.cpp" पुस्तकालय फ़ाइलें वास्तव में स्केच के रूप में एक ही फ़ोल्डर में रहते हैं, और मैं उन्हें "someheader.h" की तरह कहते हैं। मैंने यह भी देखा कि यदि मैं sketch मेनू और add file... में जाता हूं कि फ़ाइल तब तक प्रकट नहीं होती जब तक कि मैं स्केच को बंद और दोबारा खोलूं।

+3

यदि आपके पास उन्हें एक ही फ़ोल्डर में है तो आप उन्हें '# शामिल "libName.h" शामिल कर सकते हैं। लेकिन यह कोड को संकलित करने से पहले आपको आईडीई को फिर से लोड करना होगा। – tbraun89

+1

धन्यवाद tbraun, चाल है IDE –

3

मुझे बस यही समस्या थी (मैं कोड को स्वयं निहित रखना भी पसंद करता हूं), इसलिए मैं कुछ नोट्स को कम कर दूंगा; कहें कि MyLibClass.cpp का उपयोग कर MyPdeSketch.pde है; तो मैं इसे इस

/path/to/skdir/MyPdeSketch/MyPdeSketch.pde 
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp 
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h 

तरह का आयोजन किया है (सिद्धांत रूप में, यहाँ /path/to/skdir/~/sketchbook/ के बराबर है)

 

क्या मेरे लिए काम किया है कुछ की तरह:

mkdir /path/to/arduino-0022/libraries/MyLibClass 
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/ 

के बाद आईडीई को पुनरारंभ करें, MyLibClass "स्केच/आयात लाइब्रेरी" के अंतर्गत दिखाना चाहिए।

ध्यान दें कि लाइब्रेरी क्लास फ़ाइल के लिए अन्य लाइब्रेरी फ़ाइलों को संदर्भित करने का एकमात्र तरीका उन्हें अपेक्षाकृत (वर्तमान स्थान 'से) शामिल करना है, मानते हैं कि वे सभी एक ही मुख्य arduino-0022/libraries फ़ोल्डर (संभवतः संबंधित स्टैक   ओवरफ़्लो प्रश्न: Is it possible to include a library from another library using the Arduino IDE?)।

अन्यथा, MyLibClass निर्देशिका को सीधे arduino-0022/libraries (मैन्युअल रूप से निर्देशिका बनाने के बजाय, और फिर फ़ाइलों को सिंक्रनाइज़ करने के बजाय) को सिमलिंक करना भी संभव होना चाहिए। इसी कारण से, वैकल्पिक स्थान ~/sketchbook/libraries पर सिम्लिंकिंग भी समस्याग्रस्त हो सकती है।

अंत में, एक संभवतः बेहतर संगठन हो सकता है:

/path/to/skdir/MyLibClass/MyLibClass.cpp 
/path/to/skdir/MyLibClass/MyLibClass.h 
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde 

... जो, libraries को symlinking के बाद, Arduino आईडीई (हालांकि, यह हो सकता है में MyLibClass पुस्तकालय के लिए उदाहरण के नीचे दिखाने के लिए मजबूर होना पड़ा MyPdeSketch यदि आप एक ही निर्देशिका के तहत एकाधिक वर्ग फ़ोल्डरों को स्वयं-शामिल करना चाहते हैं तो लागू नहीं होंगे)।

संपादित करें: या बस का उपयोग एक Makefile - जो, avr-gcc के साथ सीधे काम करेगा Arduino आईडीई (इस स्थिति में, नोटबुक फ़ाइल संगठन कुछ हद तक ढीला किया जा सकता है) ..

6

मैं आपसे सहमत हूँ दरकिनार; यह सॉफ़्टवेयर विकसित करने का एक असहिष्णु तरीका है: इसे प्रत्येक फ़ाइल की आवश्यकता होती है जिसे आपको मुख्य प्रोग्राम के समान निर्देशिका में होना चाहिए!

इस के आसपास पाने के लिए, मैं make का उपयोग अपने .h और .cpp स्रोतों से एक साथ एक एकल .h फ़ाइल डाल करने के लिए - आप इस this Makefile में प्रयोग किया जाता देख सकते हैं: - अगर

PREPROCESS=gcc -E -C -x c -iquote ./src 
# -E : Stop after preprocessing. 
# -C : Don't discard comments. 
# -x c : Treat the file as C code. 
# -iquote ./src : Use ./src for the non-system include path. 

TARGETS=sketches/morse/morse.h 

all: $(TARGETS) 

clean: 
    rm $(TARGETS) 

%.h: %.h.in 
    $(PREPROCESS) $< -o [email protected] 

Arduino फ़ाइल अंत के बारे में बहुत picky है आप इसे अपने आप स्रोत में इसे इस्तेमाल करता है अपनी निर्देशिका में .cpp या .cc फ़ाइल रखा, और आप कुछ भी है कि एक .cpp, .cc या .h नहीं है शामिल नहीं कर सकते हैं - तो यह ऐसा करने का एक ही तरीका है के बारे में है।

मैं जावास्क्रिप्ट फ़ाइलों here को एक साथ रखने के लिए एक समान चाल का उपयोग करता हूं।

यह आवश्यक है कि आप अपनी फ़ाइलों को संपादित करने के बाद make चलाएं, लेकिन चूंकि मैं बाहरी संपादक (Emacs) का उपयोग कर रहा हूं, यह मेरे लिए शून्य परेशानी है।

3

दुर्भाग्यवश Arduino IDE भयानक है और इसमें सुधार करने का कोई संकेत नहीं दिखाता है। कोई वास्तविक निर्माण प्रणाली नहीं है, इसलिए यह आपको केवल एक ही निर्देशिका में रहने वाले प्रोग्राम बनाने देता है।

एकमात्र असली समाधान मेकफ़ाइल लिखना है, तो आप वास्तविक आईडीई का उपयोग कर सकते हैं। मुझे आशा है कि एक दिन कोई QtCreator के लिए Arduino प्लगइन लिख देगा।

http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8

1

सोचो कि मैं क्या यू वास्तव में आवश्यकता है पता है:

यहाँ एक उदाहरण makefile है।

आप एक परियोजना फ़ोल्डर है कहना MYPROJ_FOLDER और आपको लगता है कि अपने कस्टम पुस्तकालयों के लिए और अधिक बच्चे पैदा फ़ोल्डर हैं एक पुस्तकालय फ़ोल्डर शामिल करना चाहते हैं।

आप निम्न कार्य करने होंगे: 1- इस प्रकार फ़ोल्डर बनाने:

-MyProjFolder 
-MyProjFolder/MyProjFolder   

और फिर .ino विस्तार -MyProjFolder/MyProjFolder/MyProjFolder में साथ फ़ोल्डर का नाम एक फ़ाइल बनाएँ।ino

2- बनाने पुस्तकालयों फ़ोल्डर: -MyProjFolder/पुस्तकालयों < < < < < नाम एक विकल्प की तरह बुलाया जाना चाहिए नहीं है।

3- तो अपने स्वयं के पुस्तकालयों -MyProjFolder/पुस्तकालयों/lib1 -MyProjFolder/पुस्तकालयों/lib1/lib1.cpp -MyProjFolder/पुस्तकालयों/lib1/उदाहरण < < < < बनाने यह एक फ़ोल्डर है -MyProjFolder/पुस्तकालयों/lib1/उदाहरण/example1

दोहराने चरण 3 आप चाहते हैं के रूप में के रूप में ज्यादा

012,

भी जाँच http://arduino.cc/en/Guide/Libraries

-3

क्यों न हम सिर्फ एक स्क्रिप्ट एक प्रति कमांड के साथ लिखते हैं, जहाँ भी हमारे पुस्तकालय Arduino आईडीई पुस्तकालय फ़ोल्डर में स्थित है से हमारे libs को कॉपी?

इस तरह हम अपनी इच्छित फाइल संरचना रखते हैं और बिना किसी झगड़े के आईडीई लाइब्रेरी आवश्यकताओं का उपयोग करते हैं।

कुछ इस तरह मेरे लिए काम करता है:

cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/. 

ध्यान दें कि रास्तों अपने ही फ़ाइल संरचना के सापेक्ष हैं।

उम्मीद है कि यह किसी की मदद करेगा। इसमें मेरा भविष्य स्वयं शामिल है कि मैं शर्त लगाऊंगा कि इसे निकट भविष्य में पढ़ा जाएगा ... हमेशा की तरह!

जम्मू

-1

Hefny की तर्ज के बाद, अपनी परियोजना के अपने पुस्तकालय के लिए एक उदाहरण हैं।

उदाहरण के लिए (यूनिक्स env), मान लें कि पुस्तकालयों ~ arduino/पुस्तकालयों में हैं

आपका अपनी परियोजना ~ arduino/पुस्तकालयों/MyProject, अपने पुस्तकालयों वहाँ जाना (उदाहरण के लिए ~/arduino/पुस्तकालयों/MyProject बनाने /module1.h ~/arduino/पुस्तकालयों/MyProject/module1.cpp ~/arduino/पुस्तकालयों/MyProject/module2.h ~/arduino/पुस्तकालयों/MyProject/module2.cpp

अब: mkdir -p ~ arduino/पुस्तकालय/MyProject/उदाहरण/myproj

संपादित करें ~ arduino/पुस्तकालय/MyProject/उदाहरण/myproj/myproj.ino (ध्यान दें कि यह उदाहरण/myproj.ino नहीं है लेकिन उदाहरण/myproj/myproj.ino)

आईडीई को पुनरारंभ करें, आपको मेनू/फ़ाइल/उदाहरण/MyProject मेनू में अपनी प्रोजेक्ट मिलनी चाहिए।

भी ध्यान रखें कि आप # शामिल

5

मैं एक ही मुद्दा था के साथ शामिल है। इसे Arduino IDE> 1.8 के लिए हल किया गया। संदर्भ के अनुसार नए आईडीई (?) में एक विशेषता लगता है (नीचे लिंक देखें)।

आपको लाइब्रेरी फ़ोल्डर बनाने से पहले "src" उपनिर्देशिका जोड़नी होगी।तो अनिवार्य रूप से अपनी परियोजना इस तरह दिखना चाहिए:

/SketchDir (with *.ino file) 
/SketchDir/src 
/SketchDir/src/yourLib (with .h and .cpp file) 

और अंत में अपने स्केच में आप संदर्भ:

#include "src/yourLib/yourLib.h" 

अन्यथा मेरे मामले में - अगर मैं "src" फ़ोल्डर याद आ रही है - मैं त्रुटि मिलती है संदेश है कि यह आपकी Lib.cpp फ़ाइल नहीं ढूंढ सकता है।

नोट: यदि मैं अलग-अलग हूं और वास्तव में वीडी कोड Arduino IDE के लिए रैपर के रूप में एक विंडोज सिस्टम का उपयोग कर रहा हूं। लेकिन दोनों आईडीई इस संरचना के साथ संकलित करते हैं।

संदर्भ: https://forum.arduino.cc/index.php?topic=445230.0

+0

मेरे लिए काम किया, धन्यवाद: डी –

+0

v1.8.3 धन्यवाद यहाँ! – nimig18

0

क्या मेरे लिए काम किया है एक निर्देशिका, उदाहरण के लिए स्केच dir के तहत "src" बनाने के लिए है, और प्रत्येक निजी पुस्तकालय के लिए है कि एक निर्देशिका के अंतर्गत।

उदाहरण:

मैं एक परियोजना ObstacleRobot कहा जाता है, कि के तहत मेरे स्केच, नामित obstaclerobot (स्वचालित रूप से आईडीई द्वारा बनाई गई) और वहाँ मेरी स्केच "obstacleRobot.ino"

ऊपर

करने के लिए एक फ़ोल्डर अब हमने:

/ObstacleRobot 
    /obstaclerobot 
     obstacleRobot.ino 

तो मैं एक निजी पुस्तकालय है कि इस परियोजना के साथ पूरी तरह से संबंधित था शामिल करना चाहता और आईडीई पुस्तकालयों में शामिल में कोई मतलब नहीं बनाया है, अच्छी तरह से वास्तव में मैं के प्रत्येक भाग के लिए ऐसा करना चाहते हैं रोबोट लेकिन मैं अभी भी काम कर रहा हूं यह।

अंत में मेरे लिए क्या काम किया था:

#include "src/Sonar/Sonar.h" 

और यह सब thats:

/ObstacleRobot 
    /obstaclerobot 
     obstacleRobot.ino 
     /src 
      /Sonar 
      Sonar.h 
      Sonar.cpp 

तो क्या आप मुख्य स्केच में क्या करना है इस प्रकार में शामिल हैं लिखने के लिए है।

संबंधित मुद्दे