@combie: Ich möchte es mal wagen: und kleine Fragen Stellen zu deinem Programm Aufbau.
Auch wenn ich Gefahr laufe das ich gleich mit Google bestraft werde.
Ich gehe das Haupt Programm von Oben nach unten durch.
- die Datei config.h wird eingebunden. OK
es gibt jedoch keine Config.cpp somit stehen dort nur Deklarationen drin !
Hier hast du die Installation der Serielenschnitstelle und den Zeilenumbruch (Job Bestätigung) bei der Serielenschnitstelle.
ich habe das auseinander genommen was du da geschrieben hast: sieht dann so aus bei mir.
#pragma once
static const unsigned long Baudrate = 9600; // Geschwindigkeit, Serielle Schnittstelle
static const char ZEILENTRENNZEICHEN = 10; // Zeilenumbruch in der Serielle Komunikation
/* static
* Variable bleibt bestehen wird nach einem Fungzionsaufruf nicht zerstört.
* const
* Keine Variable sondern eine Konstante, kann werend des Programm
* ablaufes nihct geändert werden.
* unsigned long
* keine negativen Zahlen, Bereich von 0 bis 4.294.967.295
* char
* ist ein art String wenn ein * dahinter steht dann wird nicht nur der
* Wert sondern die Zeichenkette im Speicher verändert ! extrem verwirend
* für mich.
*/
Meine Frage, warum hast du das #define hier raus genommen?
mit #define habe ich doch die Möglichkeit das der Wert der dahinter steht im gesamten Code eingetragen wird, warum hast du das bei dir so Kompliziert geschrieben?
Wenn ich die Config Datei richtig verstanden habe, kann ich in in die alles rein schreiben das sonst vor dem void setup() steht? auch genau so wie es vor dem Loop sonst steht, ich muss da auf nichts achten?
Ich arbeite mich langsam durch das Programm Stück für Stück, und versuche auch so viel als Möglich nach zu googeln.
Gruß Mücke
Damit man alles noch mal in der Übersicht hat:
MueckeAuslagern.ino
#include "config.h"
#include "Funktionen.h" // Deklarationen der Funkionen
#include "Job.h" // Deklarationen der Funkionen
void setup()
{
Serial.begin(Baudrate); // Seriellen Monitor Installiren
}
void loop()
{
delay(10); // warten für 10 millisekunde
Serielle_abfrage(); // abfrage der Seiellen schnittstelle und Job aufrufen
}
Funktionen.cpp
#include <Arduino.h>
#include "config.h"
#include "Job.h"
#include "Funktionen.h"
/* ***********************************************************************************************
* FunktionSerielle Schnittstelle auslesen
* ***********************************************************************************************/
char* receiveBuffer()
{
static char lineBuffer[35];
static byte counter = 0;
char c;
if (Serial.available() == 0) return NULL;
if (counter == 0) memset(lineBuffer, 0, sizeof(lineBuffer));
c = Serial.read();
if (c == ZEILENTRENNZEICHEN)
{
counter=0;
return lineBuffer;
}
else if (c>=40)
{
lineBuffer[counter] = c;
if (counter < sizeof(lineBuffer) - 2) counter++;
}
return NULL;
}
/* ***********************************************************************************************
* Funktion Serielle Schnittstelle Abfragen
* ***********************************************************************************************/
void Serielle_abfrage()
{
char* text=receiveBuffer();
if(text != NULL)
{
if (strcmp_P(text, PSTR("Test"))==0) { Job_Test(); } // Ausgabe TEST
else if (strncmp_P(text, PSTR("Print"), 5)==0) { Job_Print(text + 6); } // Ausgabe alles was Hinter Print: kommt
else { Serial.println(F("NOK, Unbekannter Job"));}
} // if text
} // Serielle_abfrage
Funktionen.h
#pragma once
char* receiveBuffer();
void Serielle_abfrage();
Job.cpp
#include <Arduino.h>
#include "Job.h"
/* ***********************************************************************************************
* Job: Test
* ***********************************************************************************************/
void Job_Test()
{
Serial.println(F("OK, TEST"));
}
/* ***********************************************************************************************
* Job: Print
* ***********************************************************************************************/
void Job_Print(char* str)
{
Serial.print(F("Übergeben wurde: "));
Serial.println(str);
}
Job.h
#pragma once
void Job_Test();
void Job_Print(char* str);
Job.h
#pragma once
static const unsigned long Baudrate = 9600; // Geschwindigkeit, Serielle Schnittstelle
static const char ZEILENTRENNZEICHEN = 10; // Zeilenumbruch in der Serielle Komunikation