Llame a Serial.print en un archivo de encabezado / pestaña separado

9

Estoy escribiendo un programa en Arduino 0022.

Llamar a Serial.println funciona bien en mi código de boceto principal, pero cuando intento usarlo en mi archivo de cabecera " Menu.h ", que está en una pestaña separada, aparece un error:

  

En el archivo incluido desde AppController.cpp: 2:
  Menu.h: En el constructor 'Menu :: Menu ()':
  Menú.h: 15: error: 'Serie' no se declaró en este alcance

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

    
pregunta aaaidan

3 respuestas

0

Encontré una forma de tener la clase / objeto Serial declarada en los archivos / pestañas del encabezado:

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

Esto no me parece súper limpio, pero parece que todavía no tiene inconvenientes.

    
respondido por el aaaidan
3

Como alternativa a la muy buena respuesta de @ Majenko, puede crear una clase en C ++ para encapsular sus funciones y colocarlas en la carpeta de bibliotecas como se describe en enlace .

Es posible que necesite #include <Serial.h> en el archivo de implementación de su clase para poder llamar a los métodos en serie. Tendré cuidado al hacer esto, ya que obviamente hay efectos secundarios al llamar a las funciones serie (leer en particular). Prefiero definir un método en mi clase que tome un char * y pase bytes de la interfaz serial a él desde mi programa principal, en lugar de interactuar directamente con la interfaz serial.

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif
    
respondido por el vicatcu
2

No deberías llamar a funciones desde los archivos de cabecera. Los archivos de encabezado son para definir macros de preprocesador (#define) y referencias a variables / funciones en otros archivos.

Debería crear varios archivos C y vincularlos entre sí en tiempo de compilación. El archivo de encabezado se utiliza para indicar a cada archivo C qué funciones y variables tienen los otros archivos C.

Para usar varios archivos en el IDE de Arduino, necesita al menos 1 archivo de encabezado para describir las funciones que están en los otros archivos que desea compartir entre ellos. Además, cualquier variable global que desee utilizar en todos los archivos.

Estas definiciones deben calificarse con el atributo "externo".

Luego debe agregar uno o más archivos "pde" que contengan el código real y las definiciones de variables para las funciones.

Por ejemplo, tengo un archivo "mouse.h":

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

y un archivo "mouse.pde":

#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 tengo:

#include "mouse.h"

y puedo llamar a las funciones que están en "mouse.pde" como si estuvieran en el archivo local.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas