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! 😃


Anmelden zum Antworten