Arduino mehrere Datein



  • Hallo, ich hoffe hier keinen DoppelThread aufgemacht zu haben.
    Ich habe das Problem, dass ich bei einem kleinen Arduino Project mehrere Dateien verwende. In einer zusätzlichen Datei habe ich einen Timer programmiert, der wird aber anscheinend von der MainLoop nicht gefunden, es passiert nämlich nichts 😞

    Die Funktion die nicht gefunden wird ist die MyTon
    Kopiere ich die Funktion aber vor die MainLoop funktionierts, deshlab gehe ich davon aus, dass die Funktion nicht gefunden wird. Hier meine Dateien:

    SechsLEDs

    #include "Functions.h"   
    
    #include "SechsLEDs.h"
    
    // variables will change:
    char buttonState = FALSE;         
    int ActiveLed = LED_PIN_START;
    
    void setup() 
    {
      int i = 0;
    
      // initialize the LED pin as an output:
      for (i = LED_PIN_START; i <= LED_PIN_END; i++)
        pinMode(i, OUTPUT);
    
      // initialize the pushbutton pin as an input:
      pinMode(BUTTON_PIN, INPUT);
    }
    
    char buttonStateBuff = 0;
    
    void loop() 
    {
      int i = 0;
    
      //initialize TimeStruct for Button
      TIMESTRUCT *PrellTime = NULL;  
      PrellTime = (TIMESTRUCT *) malloc(sizeof(TIMESTRUCT));  
      PrellTime->PresetTime = PRELL_TIME; 
    
      while(1)
      {
        // read the state of the pushbutton value:
        PrellTime->Enable = digitalRead(BUTTON_PIN);    
        buttonState = MyTon(PrellTime);
    
        if (buttonState == TRUE && !buttonStateBuff) 
        {
          if(ActiveLed > LED_PIN_END)
          {
            ActiveLed = LED_PIN_START;
    
            for (i = LED_PIN_START; i <= LED_PIN_END; i++)
              digitalWrite(i, LOW);  
          }
          else
          {
            digitalWrite(ActiveLed, HIGH);
            ActiveLed++;
          }
      }
    
      buttonStateBuff = buttonState;
      }
    }
    

    Functions.c

    #include "Functions.h"
    
    //ToDO Überlauf von Zeit abfangen
    char MyTon(TIMESTRUCT *pStruct)
    {
      char frc = FALSE;
    
      if(!pStruct->EnableBuff)
      {
        pStruct->StartTime = millis();  
      }
    
      if((millis() - pStruct->StartTime) > pStruct->PresetTime)
        frc = TRUE;
    
      pStruct->EnableBuff = pStruct->Enable;
    
      return frc;
    }
    

    Functions.h

    #ifndef FUNCTIONS_H
    #define FUNCTIONS_H
    
        #define TRUE  1
        #define FALSE 0
    
        typedef struct 
        {
          unsigned long StartTime;
          unsigned long PresetTime;      
          //unsigned long Accu;
          char Enable;
          char EnableBuff;
        }TIMESTRUCT;
    
        #ifdef __cplusplus
          extern "C" {
        #endif
    
          extern char MyTon(TIMESTRUCT *pStruct);
    
        #ifdef __cplusplus
          }
        #endif
    
    #endif
    

    SechsLEDs.h

    #ifndef SECHSLEDS_H
    #define SECHSLEDS_H
    
      const int BUTTON_PIN          = 3;     
      const int LED_PIN_START       = 8;  
      const int LED_PIN_END         = 13;  
      const unsigned int PRELL_TIME = 50;
    
    #endif
    

    Vielen Dank für eure Hilfe. Es handelt sich hierbei nicht um eine Hausaufgabe oder so etwas, ich wollte einfach nur mal Anfangen mit so einem Teil etwas herumzuspielen. Ich habe schon einiges gelesen bezüglich des EXTERn "C", bekomme das aber irgendwie nicht hin.

    Nochmal vielen Dank



  • Du könntest versuchen, vor die Definition von MyTon noch ein extern C davorsetzen, wie du es bei der Deklaration getan hast. Kompilierst und linkst du auch beide Dateien? extern C benötigst du nur, mischt du C und C++-Kompilate.
    Ansonsten solltest du dynamisch reservierten Speicher auch freigeben und unerwartet ändernde Variablen als volatile markieren.



  • Ich habe jetzt das Arduino Plugin für Visual Studio runtergeladen. Dann probiere ich das heute Abend noch einmal. Wo kann ich dann eventuell sehen, ob alle angelegten Files mitkompiliert werden??? Ich habe die Dateien angelegt, aber sonst nichts angegeben. Nach dem kompilieren bekam ich keinen Fehler und gehe davon aus das alles ok ist.

    Danke für die schnelle Antwort.


Anmelden zum Antworten