Quería mover parte de mi código a una segunda pestaña en el IDE de Arduino, para mantener las cosas mejor organizadas. Al principio, solo intenté mover una función, y parecía funcionar bien. Podía llamar a la función desde la setup()
función en mi pestaña principal, y no hubo problemas al compilar o cargar.
Sin embargo, intenté poner una clase completa en la segunda pestaña, y de repente ya no funcionó. Por ejemplo:
Pestaña 1:
TestClass obj;
void setup()
{
obj.init();
}
void loop()
{
//...
}
Pestaña 2:
class TestClass
{
public:
void init()
{
//...
}
};
Cuando intenté compilar esto, me dio los siguientes errores:
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
¿Por qué reconoce una función en otra pestaña, pero no una clase? ¿Hay alguna manera de que funcione en el IDE de Arduino, o necesito usar una alternativa como Eclipse?
programming
arduino-ide
compile
Peter Bloomfield
fuente
fuente
#include
?tab1
ytab2
respectivamente. Los nombres se configuraron utilizando el IDE, por lo que los archivos subyacentes son ambos.ino
.Respuestas:
No es posible declarar y usar clases declaradas en un
.pde
archivo en otro.pde
archivo desde el IDE de Arduino.Una solución alternativa es convertir el segundo archivo en un archivo fuente C ++ (
.cpp
) y luego agregar una#include "<filename>"
directiva al comienzo del primer archivo.Este código se compila correctamente:
Pestaña 1:
test.cpp:
fuente
TestClass::init()
intenta llamarpinMode()
, el compilador se queja de quepinMode
no se declaró en este ámbito. ¿Hay alguna forma de acceder a las funciones de Arduino en mi clase?#include <Arduino.h>
a la parte superior del.cpp
archivo.#include "test.cpp"
). Funciona, pero puede frenar la comprensión del proceso de vinculación. Solo se deben incluir archivos de encabezado.La forma en que funciona el IDE de Arduino es que compila su código (el código que escribe en el IDE) como el código "principal". Luego, extrae el código de todas las bibliotecas que ha importado y lo compila junto con el código principal. Para hacer lo que está sugiriendo, necesitaría crear una biblioteca para Arduino.
Aquí hay más información sobre las bibliotecas Arduino:
http://arduino.cc/en/Guide/Libraries
Y aquí hay algunos sobre cómo crear una biblioteca:
http://arduino.cc/en/Hacking/LibraryTutorial // este es el más fácil de entender imo
http://playground.arduino.cc/Code/Library
http://www.divilabs.com/2013/03/ write-your-own-arduino-library.html #
Aquí hay una biblioteca de ejemplo que escribí https://github.com/jamolnng/Arduino/tree/master/libraries/ShiftRegister, como puede ver, no hay ningún problema al llamar a las funciones de Arduino desde el archivo .cpp (lo sé, he probó la biblioteca)
fuente
.h
y.cpp
archivos en su proyecto principal, sin tener que crear una biblioteca separada.