שְׁאֵלָה:
מדוע איני יכול להכריז על שיעור בכרטיסייה אחרת בארדואינו IDE?
Peter Bloomfield
2014-02-13 21:03:21 UTC
view on stackexchange narkive permalink

רציתי להעביר חלק מהקוד שלי לכרטיסייה שנייה ב- Arduino IDE, כדי לשמור על דברים מסודרים יותר. בהתחלה ניסיתי רק להזיז פונקציה ונראה שהיא עובדת בסדר. יכולתי להתקשר לפונקציה מהפונקציה setup () בכרטיסייה הראשית שלי, ולא היו בעיות בהרכבה או בהעלאה.

עם זאת, ניסיתי להכניס כיתה שלמה לשנייה הכרטיסייה, ופתאום זה לא עבד יותר. לדוגמא:

כרטיסייה 1:

  TestClass obj; התקנת חלל () {obj.init ();} loop loop () { //...}

כרטיסייה 2:

  class TestClass {public: void init () {//. ..}};  

כשניסיתי לקמפל את זה, זה נתן לי את השגיאות הבאות:

  tab1: 1: error: 'TestClass' does לא שם שם typetab1.ino: בפונקציה 'בטל התקנה ()': tab1: 5: שגיאה: 'obj' לא הוכרז בהיקף זה לשונית, אבל לא כיתה? האם יש דרך לגרום לזה לעבוד ב- Arduino IDE, או שאני צריך להשתמש בחלופה כמו Eclipse? 
האם זהו כלל הקוד? מהם שמות הקבצים? האם אין הוראות מעבד מקדים כמו '# include'?
כן, זה כל הקוד. הכרטיסיות נקראות "tab1" ו- "tab2" בהתאמה. השמות נקבעו באמצעות ה- IDE, כך שהקבצים הבסיסיים הם שניהם '.ino'.
אני מתחיל לשנוא את משחקי הג'יג'רי שעושה ארדואינו IDE. מה שזה מוסיף בנוחות השימוש ב- AVR זה לוקח משבירת דברים כאלה.
שתיים תשובות:
#1
+14
asheeshr
2014-02-13 22:21:10 UTC
view on stackexchange narkive permalink

לא ניתן להכריז ולהשתמש בשיעורים המוצהרים בקובץ .pde אחד בקובץ .pde אחר מתוך IDE של ארדואינו.

דרך פיתרון אחת היא להפוך את הקובץ השני לקובץ מקור C ++ ( .cpp ) ואז להוסיף הנחיה #include "<filename>" בתחילת הקובץ הראשון.


קוד זה מהדר כהלכה:

כרטיסיה 1:

  # כלול "test.cpp" TestClass obj; התקנה בטל () .init ();} לולאה ריק () {//...}

test.cpp:

  class TestClass {public: void init ( ) {// ...}};  
תודה על הדרך לעקיפת הבעיה. זה עובד לדוגמא הבסיסית, אך למרבה הצער זה לא עובד אם אני מוסיף שיחות ספציפיות לארדואינו בקובץ .cpp. לדוגמא, אם 'TestClass :: init ()' מנסה לקרוא 'pinMode ()', המהדר מתלונן ש- pinMode 'לא הוכרז בהיקף זה. האם יש דרך לגשת לפונקציות הארדואינו בכיתה שלי?
@PeterR.Bloomfield הוסף "# כלול " לראש הקובץ `.cpp`.
אני חושב שזה לא טוב ללמד אחרים לכלול קבצי מקור ('#include "test.cpp" `). זה עובד, אך עשוי לבלום את ההבנה של תהליך הקישור. יש לכלול רק קבצי כותרת.
אני מסכים עם @Mars - פיתרון טוב יותר הוא להכניס את הצהרת הכיתה לקובץ .h, ואת ההגדרה (הטמעה) בקובץ .cpp. אז יש לך שני קבצים נוספים בפרויקט. זו למעשה הדרך הרגילה לטפל בשיעורים.
#2
+6
Jesse Laning
2014-02-13 22:21:35 UTC
view on stackexchange narkive permalink

הדרך שבה ה- Arduino IDE עובד היא שהוא מכין את הקוד שלך (הקוד שאתה כותב ב- IDE) כקוד "הראשי". ואז הוא שולף קוד מכל הספריות שייבאתם ומרכיב את זה יחד עם הקוד הראשי. כדי לעשות את מה שאתה מציע ידרוש ממך ליצור ספרייה עבור Arduino.

הנה מידע נוסף על ספריות Arduino:

http://arduino.cc/ he / Guide / Libraries

והנה כמה כיצד ליצור ספריה:

http://arduino.cc/en/Hacking/LibraryTutorial // זה הקל ביותר להבנת imo
http://playground.arduino.cc/Code/Bibliotheek
http: // www .divilabs.com / 2013/03 / כתוב-משלך-ארדואינו-ספרייה.html #

הנה ספריית דוגמה שכתבתי https: // github.com/jamolnng/Arduino/tree/master/libraries/ShiftRegister כפי שאתה יכול לראות אין שום בעיה להתקשר לפונקציות Arduino מקובץ .cpp (אני יודע, בדקתי את הספרייה)

אפשר גם פשוט ליצור קבצי '.h' ו- '.cpp' בפרויקט הראשי שלך, מבלי שתצטרך ליצור ספרייה נפרדת.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...