C++ Klassen Programm Anfänger
-
hallo kann mir jemand helfen mein Programm zum Laufen zu bringen. Bin c++ anfänger und möchte meinen GPIO Pin im Source File einlesen. Leider bekomme ich immer Identifier led1 undefiend ausgegeben.Wenn ich es allerdings in der main.cpp einlese dann funktioniert es
#include "mbed.h" #include "Shieldbot.h" #define led1 D13 Shieldbot::Shieldbot() { DigitalOut led1(D13); }
das ist die .cpp
// ensure this library description is only included once #ifndef Shieldbot_h #define Shieldbot_h // include types & constants of Wiring core API #include "mbed.h" // library interface description class Shieldbot { // user-accessible "public" interface public: Shieldbot(); }; #endif
das ist die .h
#include "mbed.h" #include "Shieldbot.h" int main() { while(1) { led1= 1; // LED is ON wait(0.2); // 200 ms led1= 0; // LED is OFF wait(1.0); // 1 sec } }
das ist die main.cpp
ich will das ich digitalout nicht in der main.cpp anlegen muss sondern in der shieldbot.c
-
#define led1 D13
Warum?
-
ich hab einfach alles versucht damit es funktioniert...kann auch wieder raus.Aber es klappt leider nur wenn ich den Pin direkt in der main.cpp initialisiere.
-
Lege DigitalOut led1 als Membervariable der Klasse Shieldbot an:
class Shieldbot { // ... private: DigitalOut led1; };
Und initialisiere diese im Konstruktor (Stichwort: Initialisierungsliste):
Shieldbot::Shieldbot() : led1(D13) { }
Und dann mußt du selbstverständlich in der main ein Objekt der Klasse Shieldbot anlegen (und evtl. noch weitere Klassenfunktionen implementieren).
-
// include core Wiring API #include "mbed.h" // include this library's description file #include "Shieldbot.h" void Shieldbot::gpio() { DigitalOut led1(D13); }
// ensure this library description is only included once #ifndef Shieldbot_h #define Shieldbot_h // include types & constants of Wiring core API #include "mbed.h" class Shieldbot { public: void gpio(); }; #endif
#include <mbed.h> #include <Shieldbot.h> Shieldbot meine(); int main() { meine.gpio(); while(1) { led1= 1; // LED is ON wait(0.2); // 200 ms led1= 0; // LED is OFF wait(1.0); // 1 sec } }
ich habs nochmal versucht nach einiger Recherche aber es wird mir weiterhin ein Fehler ausgegeben. Sieht jemand meinen Fehler?
-
Fabse schrieb:
Sieht jemand meinen Fehler?
Ich würde gerne erstmal die Fehlermeldung sehen (exakt, nicht "Der Compiler beschwert sich, dass er irgendwas nicht finden könne oder so")
-
#include <mbed.h> #include <Shieldbot.h> Shieldbot meine = Shieldbot(); int main() { meine.gpio(); while(1) { led1= 1; // LED is ON wait(0.2); // 200 ms led1= 0; // LED is OFF wait(1.0); // 1 sec } }
Error: Identifier "led1" is undefined in "Shield_Bot/Shieldbot/main.cpp", Line: 11, Col: 11
bin leider zu blöd ein bild hier einzufügen sorry habe nochmal das objekt editiert und bekomme nur noch diesen einen error
-
Also ich behaupte mal du hast es noch nicht ganz verstanden. - led1 und 2 sollten Eigenschaften von deinem ShieldBot sein.
Das Setzen der LED's wäre dann in etwa:
ShieldBot gpioHandler(); gpioHandler.gpio(); gpioHandler.SetLED1(1); // an gpioHandler.SetLED2(0); // aus
-
Hattest du meinen Beitrag nicht verstanden?
Deine Funktion
void Shieldbot::gpio() { DigitalOut led1(D13); }
ist (ebenso) unsinnig.
Und was soll denn led1 in der main sein?Ich denke dir fehlen die Grundlagen der OOP - arbeite am besten ersteinmal ein Buch durch.
Edit:
@inflames2k:ShieldBot gpioHandler();
falsch!