manière correcte d'inclure les fichiers .cpp et .h dans une esquisse Arduino

Tout d'abord, le problème:

principal esquisse fichier:

char foo;            //required to clean up some other problems
#include <Arduino.h> //tried it in desperation, no help
#include "a.h"

void setup(){
  Serial.begin(9600);
  Serial.println("\nTest begins");
  for (int num = -1; num < 1; num++){
    Serial.print(num);
    if (isNegative(num)){
      Serial.println(" is negative");
    } else {
      Serial.println(" is NOT negative");
    }
  }
}

void loop(){}

//un.h

#ifndef H_A
#define H_A

boolean isNegative(int x);                  //Err#1
int anotherOdity();

#endif //H_A

//a.cpp

#include "a.h"

int isNegative(int x){
  Serial.println("I can't print this from inside my INCLUDE FILE"); //Err#2
  if (x<0) return true;
  return false;
}

int anotherOdity(){
  char ch[5];
  memcpy(ch,"1",1);  //doesn't work, memcpy not declared      //Err#3
}

Ci-dessus, comme il est, ne se compile pas et ce sont les erreurs que j'obtiens:

In file included from a.cpp:1:
a.h:4: error: 'boolean' does not name a type
a.cpp: In function 'int isNegative(int)':
a.cpp:4: error: 'Serial' was not declared in this scope
a.cpp: In function 'int anotherOdity()':
a.cpp:11: error: 'memcpy' was not declared in this scope

Le premier problème est de type booléen, semble souffrir de quelques amputation des noms que l'environnement Arduino, mais qui est généralement fixé par le char foo; dans le fichier principal. Et dans certaines situations, il est. Mais pour utiliser ce type dans le .cpp fichier génère cette erreur.

Je peux voir que les Erreurs 2 et 3 sont liées, mais comment puis-je obtenir ces dans le champ d'application? Je me rends compte qu'une partie du problème est probablement le #include lui-même (peut-être) parce que Serial et memcpy ne sont pas encore définis/déclarés? J'ai essayé, y compris le Arduino.h de la bibliothèque, mais cela n'a pas aidé. En fait, il ne aider à la boolean problème, mais seulement dans le cas de tout mettre dans le .h fichier (comme je l'ai discuter de la suite ci-dessous), ce qui n'aide pas l'exemple ci-dessus.

Si j'ai mis les trois fichiers ensemble et ont tout dans les principaux esquisse (.ino) fichier, il fonctionne comme il se doit. Mais l'idée ici, c'est que j'ai envie de sortir un peu de code et de faire mes croquis plus lisible.

Le plus proche je suis arrivé à une solution a été trouvée ici: http://liudr.wordpress.com/2011/02/16/using-tabs-in-arduino-ide/ où, après l'exécution de mes propres tests, j'ai décidé que si je mets le TOUT dans une .h fichier, ça fonctionne!

Par exemple, en laissant le principal esquisse fichier inchangé, si je supprime a.cpp et créer a.h (comme suit), il fonctionne!

#ifndef H_A
#define H_A

boolean isNegative(int x){
  Serial.println("I can't print this from inside my INCLUDE FILE");
  if (x<0) return true;
  return false;
}

int anotherOdity(){
  char ch[5];
  memcpy(ch,"1",1);  //doesn't work, memcpy not declared
}

#endif //H_A

Cela résout le booléen problème (enfin.... J'ai encore besoin de Arduino.h ou char foo;), et il résout les questions de portée.

Mais il se sent juste mal.

Ce n'est pas sur la création d'une bibliothèque de fonctions standard, j'ai pu utiliser sur les différents croquis, il est tout au sujet de la rupture de mon code en plus petits (lisible) de morceaux, et de les garder tous ensemble dans le dossier du projet. Je veux faire cela dans la plus correcte possible, il semble juste être je suis limitée par l'IDE. Je suis sûr que j'ai adapté à la compréhension de la façon de mettre un en-tête et associés .cpp fichier (j'espère que j'ai pas eu ça part mal).

Je suis totalement autodidacte avec tout C/C++ et n'ont vraiment entré dans la programmation de micros très récemment.

J'ai fait des recherches à travers les profondeurs de google et je suis juste continuellement court.

Sans recourir à hacks et garder les choses simples pour les gens comme moi, comment pourrais-je mieux de mettre ensemble les exemples ci-dessus, de sorte que l'IDE Arduino/gcc compiler?

edit: j'ai pensé que je voudrais simplement comprendre CERTAINS des onglets j'ai ouvert ici pour montrer que j'ai vraiment fait des recherches sur ce!

http://arduino.cc/en/Reference/Include

http://arduino.cc/en/Hacking/LibraryTutorial

http://forum.arduino.cc/index.php/topic,124904.msg938861.html#msg938861

http://forum.arduino.cc/index.php?topic=84412.0 (c'est là que j'ai trouvé le char foo; solution)

http://liudr.wordpress.com/2011/02/16/using-tabs-in-arduino-ide/

Y compris .fichiers cpp

En gardant toutes les bibliothèques dans le sketch Arduino répertoire

En-Tête C++ et du RPC comprend

source d'informationauteur Madivad