compiler findet referencen nicht

hallo
ich habe da ein kleines Problem…
vermutlich Einstellungen oder Pfad oder was auch immer…

ich habe ein kleines Projekt auf gesetzt zu dem noch zwei selbst gebaute Softwaremodule gehören. ( wegen der Übersichtlichkeit)
nach dem die Standart C includierung (auch nicht mit extren "c" {}) nicht funktioniert hat, habe ich alles nach der den Anweisungen im Tutorial zu Libarys umgebaut. Nicht dramatisch aber is halt auch Arbeit.
Alle Module ( C++ und h Dateien) liegen in dem Verzeichniss wo auch das Sketch liegt.

der compiler ist nicht zufrieden :smiley:
und schmeisst

EZFW_Doors.cpp.o: In function loop': C:\Users\Jan_2\AppData\Local\Temp\build1189687443788806958.tmp/EZFW_Doors.cpp:137: undefined reference to Servo_in::getcommand()’
C:\Users\Jan_2\AppData\Local\Temp\build1189687443788806958.tmp/EZFW_Doors.cpp:181: undefined reference to RetractSound::startpump()' EZFW_Doors.cpp.o: In function setup’:
C:\Users\Jan_2\AppData\Local\Temp\build1189687443788806958.tmp/EZFW_Doors.cpp:114: undefined reference to `Servo_in::Servo_in_init(int, char)’

für Servo_in::Servo_in_init(int, char) mal die entsprechenden code schnipsel

declaration in SERVO_in.H

class Servo_in 
{
  public:
    void Servo_in_init (int pin , char mem_location);
    Servo_Cmd_t getcommand(void);
    void set_param (char max,char min );
  private:
   int            _pin;
   char           _start_mem;
   Servo_param_t  _params;   
};

Definition in Servo_in.cpp

void Servo_in::Servo_in_init(int pin, char  mem_location )
{
 
   pinMode(pin, INPUT);
// Pin to read 
    _pin      = pin;
//startpoint of parameters deposed in eeprom    
   _start_mem = mem_location;
   params.valid    = EEPROM.read (_start_mem +2);
   if (0xAA == params.valid)
   {
   params.min_value = EEPROM.read (_start_mem +1);
   params.max_value = EEPROM.read (_start_mem +1);

   }
   else 
    {/*default values */
     params.min_value = 30;
     params.max_value = 70; 
    }
    
    
}

Einbindung in das eigentliche Sketch

 #include "Servo_in.H"
....
Servo_in     Inline;
....

und Aufruf der Funktion

void setup() {
// serial Connecton 
Serial.begin(9600);

//servo line in from Receiver
Inline.Servo_in_init(COMANDLINE,16);
//Servo Output
...

Die Funktion bewertet einen Servoausgang eines RC Recievers um dann ein ON /OFF/NOTValid Signal zu generieren.

andere fertige sketch projekte kann ich falten frei kompelieren und linken

da ich noch auf mein HW warte wollte ich die Zeit nutzen um mich mit der Entwicklungeumgebeung vertraut zu machen.

was habe ich übersehen?

Hallo

ich habs mir absolut nicht angesehen und deswegen fiel mir aus :

declaration in SERVO_in.h

include SERVO_in.H

Case sensitive ! ;)

erstmal eine Korrektur
es schimpft doch der Compiler nicht der Linker

#include “Wprogram.h”
#include <EEPROM.h> // Parameter storage
#include <Servo.h> // DriverClass for Servo

#include “Servo_in.H”
#include “RetractSound.h”
#include “EZFW_Doors.h”

bringt auch keine Heilung …
es ist frustrierend …
und unter win 7 sollte des auch egal sein —

:astonished: keiner ne idee ? =(

Deine code schnipsel lassen sich bei mir auch nicht compilieren... da kommen sogar noch viel mehr fehlermeldungen.

wenn ich nächste Woche wieder zuhause bin werde ich mal den gesammten Code Online stellen. dann ist sicher die Fehler suche einfacher bis dahin werde ich das ganze in einem Megamodul zusammen schrauben.....

so hier doch schon schneller der Link http://janbrockmann.de/Quellecodes/Arduino/EZFW/EZFW_Doors/index.HTM

die einzelne Module sind in denglisch beschreiben Sorry for that

ich finde es nicht

aber die HW lässt ja auch noch auf sich warten ...

http://janbrockmann.de/Quellecodes/Arduino/EZFW/EZFW_Doors/index.HTM die Links gerichtet. sorry for that 8)

Hallo,

Alle Module ( C++ und h Dateien) liegen in dem Verzeichniss wo auch das Sketch liegt.

vielleicht probierst Du mal, die h-Dateien im Arduino Verzeichnis unter libraries zu speichern?

Gruß Reinhard

danke Reinhard
ist aber nicht die Lösung. Der Compiler unterscheidet an der Stelle zwischen Includes
<compilerinclude.h> und
“projektinclude.h”
es ist schon ein wenig frustrierend… und ich bin der festen Überzeugung ,das es ein absolut blödes Detail ist.

bitschubser:
danke Reinhard
ist aber nicht die Lösung. Der Compiler unterscheidet an der Stelle zwischen Includes
<compilerinclude.h> und
“projektinclude.h”

Wo ist da das Problem?
Etwas in eine Library zu packen, hat normalerweise (auch) den Grund den Code für andere Projekte wiederverwertbar zu machen. Und deshalb gehört eine Library auch projektunabhängig ins Libraryverzeichnis.
Erstelle im Libraryverzeichnis der Arduino IDE einen Unterordner “Servo_in” und kopier dort die Dateien “Servo_in.h” und “Servo_in.cpp” rein. Am besten erstellst Du auch gleich noch eine “keywords.txt”, den Aufbau dieser Datei kannst Du anderen Libraries entnehmen.
Und dann in Deinem Projekt mit "#include <Servo_in.h> einbinden.

Hallo Manfred das operative ist nicht das Problem .... nur beide Version funktionieren dennoch nicht und geben auch die gleichen Fehlermeldungen :(

Und natürlich ist es ein guter Plan Module wieder verwendbar zu machen ... :astonished: werde ich auch sobald es sich compilieren lässt und so funktioniert wie ich mir das denke. mein Problem ist das es sich nicht compilieren lässt... Ich habe oben weiter den aktuelle Stand verlinkt. vielleicht findest du den Fehler... Ich habe bereits die ganzen How tos durch und immer noch keine Idee

Ich hab Dir jetzt mal die Dateien ordentlich formatiert und die Fehler korrigiert. Zudem haben die zwei Libraries auch gleich jeweils eine keywords.txt Datei erhalten.
“EZFW_Doors.zip” ist Dein Projekt, “Servo_in.zip” und “RetractSound.zip” gehören in das “Libraries” Verzeichnis.

EZFW_Doors.zip (3.82 KB)

Servo_in.zip (3 KB)

RetractSound.zip (2.48 KB)

erstmal ganz herzlichen Dank da hast du mir ein wundervolles 1.Advents Geschenk gemacht.
Da das hier ein Forum ist sollten wir meine Dummheiten besprechen, damit andere die Chance haben das Problem selbst zu lösen.
Ich habe deine und meine Dateien gedifft.
In der RetractSound.cpp fehlte ein Doppelpunkt. ( also meine Schlamperei)
Natürlich sind die includes angepasst. ("" gegen <> )
und die Ablageorte sind etwas anders.
das Sketch liegt eine Ebene höher
Aber was war der Killer? Denn formal müssten ja auch die Module im Sketch Order funktionieren.
**************************************jetzt ein bischen off topic ****************************************

und damit man mal ein Vorstellung hat wo für das ist ( 4takt VMotor mit ca 30 ccm)

und was das werden soll

In RetractSound war eigentlich gar kein Fehler, die waren (fast) alle in Servo_in.cpp und Servo_in.h. Ich bin einfach alle Module durchgegangen und hab alles was mir aufgefallen ist korrigiert. Anschließend lies sich das Programm anstandslos compilieren. Somit könnte ich jetzt ehrlich gesagt nicht auf Anhieb sagen, was für das nichtfinden der Includedatei verantwortlich war.