Chciałem przenieść część mojego kodu do drugiej zakładki w Arduino IDE, aby lepiej zorganizować. Na początku próbowałem tylko przenieść funkcję i wydawało się, że działa dobrze. Mogłem wywołać funkcję z setup()
funkcji na mojej karcie głównej i nie wystąpiły problemy z kompilacją lub przesyłaniem.
Próbowałem jednak umieścić całą klasę w drugiej zakładce i nagle przestało to działać. Na przykład:
Zakładka 1:
TestClass obj;
void setup()
{
obj.init();
}
void loop()
{
//...
}
Zakładka 2:
class TestClass
{
public:
void init()
{
//...
}
};
Kiedy próbowałem to skompilować, wystąpiły następujące błędy:
tab1:1: error: 'TestClass' does not name a type
tab1.ino: In function 'void setup()':
tab1:5: error: 'obj' was not declared in this scope
Dlaczego rozpoznaje funkcję na innej karcie, ale nie klasę? Czy istnieje sposób, aby działał w Arduino IDE, czy też muszę używać alternatywy takiej jak Eclipse?
programming
arduino-ide
compile
Peter Bloomfield
źródło
źródło
#include
?tab1
i nazwytab2
. Nazwy zostały ustawione za pomocą IDE, więc oba pliki leżą u podstaw.ino
.Odpowiedzi:
Nie można zadeklarować ani używać klas zadeklarowanych w jednym
.pde
pliku w innym.pde
pliku z poziomu Arduino IDE.Jednym obejściem jest przekształcenie drugiego pliku w plik źródłowy C ++ (
.cpp
), a następnie dodanie#include "<filename>"
dyrektywy na początku pierwszego pliku.Ten kod kompiluje się poprawnie:
Zakładka 1:
test.cpp:
źródło
TestClass::init()
próbuje zadzwonićpinMode()
, kompilator skarży się, żepinMode
nie został zadeklarowany w tym zakresie. Czy jest sposób na dostęp do funkcji Arduino w mojej klasie?#include <Arduino.h>
do góry.cpp
pliku.#include "test.cpp"
). Działa, ale może hamować zrozumienie procesu łączenia. Należy dołączyć tylko pliki nagłówków.Sposób działania Arduino IDE polega na tym, że kompiluje on Twój kod (kod napisany w IDE) jako „główny” kod. Następnie pobiera kod ze wszystkich zaimportowanych bibliotek i kompiluje go wraz z kodem głównym. Robienie tego, co sugerujesz, wymagałoby utworzenia biblioteki dla Arduino.
Oto kilka informacji o bibliotekach Arduino:
http://arduino.cc/en/Guide/Libraries
A oto kilka sposobów tworzenia biblioteki:
http://arduino.cc/en/Hacking/LibraryTutorial // ten jest najłatwiejszy do zrozumienia imo
http://playground.arduino.cc/Code/Library
http://www.divilabs.com/2013/03/ write-your-own-arduino-library.html #
Oto przykładowa biblioteka, którą napisałem https://github.com/jamolnng/Arduino/tree/master/libraries/ShiftRegister, jak widać, nie ma problemu z wywoływaniem funkcji Arduino z pliku .cpp (wiem, mam przetestowałem bibliotekę)
źródło
.h
i tworzenie.cpp
plików w głównym projekcie bez konieczności tworzenia osobnej biblioteki.