Forum: Mikrocontroller und Digitale Elektronik Objekte werden nicht erkannt


von John B. (yel_low)


Lesenswert?

Moin Moin oder wat,

ich komme gerade beim Programmieren nicht weiter..

Ich möchte einen Arduino Nano Every mit einer main.cpp, einer start.cpp 
und einer start.h Datei programmieren.
Jetzt stehe ich allerdings vor einem Problem. Wenn ich ein Objekt in der 
main.cpp Datei erstelle und dort eine Funktion aus der start.cpp Datei 
aufrufe, dann spuckt der Compiler einen Fehler aus:

*start.cpp: 9:2: error: 'servo1' was not declared in this scope*

Muss ich das Objekt Servo1 irgendwie an die Funktionen übergeben?
1
-------------main.cpp-----------------
2
#include "start.h"
3
#include "servo.h"
4
5
Servo servo1;
6
7
void setup()
8
{
9
  servo1.attach(14);
10
}
11
12
13
---------start.cpp-------------------
14
#include "start.h"
15
16
void servorotate(int deg)
17
{
18
  servo1.write(deg);
19
  delay(230);
20
}
21
22
23
---------start.h--------------
24
#ifndef start_h
25
#define start_h
26
27
void servorotate(int deg);
28
29
#endif

: Verschoben durch Moderator
Beitrag #7109708 wurde von einem Moderator gelöscht.
von John B. (yel_low)


Lesenswert?

sorry, es muss main.ino heißen.

Das funktioniert nicht.

Beitrag #7109717 wurde von einem Moderator gelöscht.
von Programmierer (Gast)


Lesenswert?

Schreibe in die start.h:
1
extern Servo servo1;

von Schlaumaier (Gast)


Lesenswert?

Dir fehlt eine Zeile.

In meinen Beispielcode aus einen Buch heisst es.

Servo Servomotor;  // erstellt Objekt "Servomotor" aus der Klasse 
"Servo".

int Sensorwert;
bytes servowinkel;

Ich gebe zu das ich das abgetippt habe, aus eine Fachbuch, da ich selbst 
keine Servos besitze.

Hier das Buch : 
https://www.thalia.de/shop/home/artikeldetails/A1056176041

Wenn du es kaufst, gibt es das Ebuch gratis. Und es ist WIRKLICH 
empfehlenswert.

von John B. (yel_low)


Lesenswert?

Besten Dank für die schnelle Lösung!

Es müssen tatsächlich alle .cpp Dateien in .ino geändert werden.
Weißt du auch, warum das mit der .cpp Endung nicht funktioniert?

von Schlaumaier (Gast)


Lesenswert?

Nachtrag : der Code in die Main direkt unter #include "servo.h"

von J. S. (jojos)


Lesenswert?

John B. schrieb:
> Weißt du auch, warum das mit der .cpp Endung nicht funktioniert?

Das Arduino Buildsystem möchte es so.
Die Servodeklaration gehört dann logisch in die start.cpp und das servo 
include in start.h. Wobei Start.h schon ein blöder Name ist.

von Schlaumaier (Gast)


Lesenswert?

J. S. schrieb:
> Wobei Start.h schon ein blöder Name ist.

nö.

Start.h = Start.head zu deutsch Start.Hauptprogramm.  Da deklariert man 
den Mist und ladet nach.

Macht irgendwie Sinn.

von J. S. (jojos)


Lesenswert?

Bleib bei deinem Basic, aber versuche bitte nicht Cpp zu lehren.
.h steht für header.
Und die Zweite Funktion kommt dann in zwei.cpp? Und wenn die Reihenfolge 
im main mal geändert wird und Start nicht mehr Start ist?
In Start.h ist bis jetzt eine Servofunktion drin, da sollen wohl noch 
mehr rein. Also wären es zb ServoFunctions.cpp/h.

von Schlaumaier (Gast)


Lesenswert?

J. S. schrieb:
> Bleib bei deinem Basic, aber versuche bitte nicht Cpp zu lehren.
> .h steht für header.

Ich habe auch START.h geschrieben. Der Name unten den ich das kenne ist 
MAIN.h . Und da stimmt meine Aussage.

von Ein T. (ein_typ)


Lesenswert?

Schlaumaier schrieb:
> Ich habe auch START.h geschrieben. Der Name unten den ich das kenne ist
> MAIN.h . Und da stimmt meine Aussage.

Nein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.