9 votos

Serial.print llamada en un archivo separado ficha/Rúbrica

Estoy escribiendo un programa en Arduino 0022.

Llamar a Serial.println trabaja bien en mi código de bosquejo principal, pero al intentar usarlo en mi archivo de cabecera " Menu.h ", que está en una pestaña separada, me sale un error:

En el fichero incluído de AppController.cpp:2:
MENU.h: en constructor 'Menu::Menu()':
MENU.h:15: error: 'Serial' no se declaró en este ámbito

¿Cómo puedo usar Serial.println fuera código de bosquejo?

3voto

user4245 Puntos 324

Usted no debe llamar a funciones desde dentro de los archivos de encabezado. Archivos de encabezado son para definir pre-procesador de macros (#define) y las referencias a variables / funciones en otros archivos.

Usted debe ser la creación de múltiples C archivos y vinculan entre sí en tiempo de compilación. El archivo de encabezado se utiliza para decirle a cada archivo C ¿qué funciones y variables de los otros C archivos tienen.

Para el uso de varios archivos en el Arduino IDE se requiere al menos 1 archivo de encabezado para describir las funciones que en el resto de los archivos que desea compartir entre ellos. También, las variables globales que desea utilizar en todos los archivos.

Estas definiciones deben ser calificados con el "exterior" de atributo.

Entonces usted necesita para agregar uno o más "pde" el archivo que contiene el código real y variable de las definiciones de las funciones.

Por ejemplo, yo tengo un "ratón.h" archivo:

extern void mouse_read(char *,char *, char *);
extern void mouse_init();

y un "ratón.pde" archivo:

#include <ps2.h>

PS2 mouse(6,5);

void mouse_read(char *stat,char *x, char *y)
{
  mouse.write(0xeb);  // give me data!
  mouse.read();      // ignore ack
  *stat = mouse.read();
  *x = mouse.read();
  *y = mouse.read();
}

void mouse_init()
{
  mouse.write(0xff);  // reset
  mouse.read();  // ack byte
  mouse.read();  // blank */
  mouse.read();  // blank */
  mouse.write(0xf0);  // remote mode
  mouse.read();  // ack
  delayMicroseconds(100);
}

Luego, en mi archivo principal que tengo:

#include "mouse.h"

y me pueden llamar a las funciones que están en "el ratón.pde" como si estuvieran en el archivo local.

3voto

JW. Puntos 145

Como una alternativa a @Majenko muy buena respuesta, usted podría hacer una clase de C++ para encapsular sus funciones y ponerlo en la carpeta de bibliotecas, como se describe en http://www.arduino.cc/en/Hacking/LibraryTutorial.

Puede que necesite #include <Serial.h> en su implementación de la clase de archivo a ser capaz de llamar a la Serie de métodos. Me gustaría tener cuidado acerca de este pensamiento de car como obviamente, hay efectos secundarios a la llamada Serie de funciones (leído en particular). Prefiero definir un método en mi clase que toma un char * y de paso bytes de la interfaz en serie a partir de mi programa principal, en lugar de tener que interactuar con la interfaz en serie directamente.


#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif

1voto

Devdas Puntos 589

Encontré una manera de tener el Serial objeto de la clase declarada en archivos de encabezado/tabs:

#include <WProgram.h>  // at the top of the file

Esto no se siente super limpio para mí, pero no parece tener ningún inconvenientes todavía.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X