ich meine das die genanten Programm alle auf WIN laufen ich habe hier einen MAC ![]()
geht auch so ;-), es ist auch etwas Chaotisch für mich da ich die Codeschnipsel nicht alle zu 100% kenne, und immer erst wider lesen muss was was ist. peinlich und das bei so einem Kleinen Programm peinlich
Om das ist eine Gute Idee das baue ich gleich mal mit ein ![]()
also das „if(text != NULL)“
Den Rest werde ich mal versuchen umzusetzen wie du das beschrieben hast.
ich habe das Test Programm noch mal etwas umgeschrieben:
/*
Befehl Reagzion Antwort
Name: Ausgabe Programm Name
Firmware: Ausgabe Firmware Nr.
Reset: Sätzt das Array Hadware Reset
Hadware wider auf
0
Print: Ausgabe der hadware
Config in einer Tabelle
Config:1,10,30,0 sätzt die Hadware Zahlenfolge
Configuration neu ...
*/
#define ZEILENTRENNZEICHEN 13 // 13 ist Steuerzeichen CR (Carriage Return)
// Config Daten
char Firmware_Nr[] = "1.0.1"; // Firmware
char Name[] = "Tropfen Box"; // Programmmane
int startPin = 2; // Hier ist der taster angeschloßen
int Baudrate = 9600; // Baudrate für die Übertragung zwischen Arduino und PC
int Lauf = 0; // Zwischenspeicher
struct hardware_t{int pin;long vorlaufzeit; long dauer;}; // Hadware Strucktur
// Test Hadware Arrey füllen
hardware_t hardware[5]=
{
{3, 10, 30},
{4, 50, 30},
};
int schritte = sizeof(hardware) / sizeof(hardware[0]); // Anzahl der Hadware Schritte definiren
// Das ist eine Funktion !!!
char* receiveBuffer()
{
static char lineBuffer[100]; // Maximale Zeilenlänge festlegen
static byte counter=0;
char c;
if (Serial.available()==0) return NULL; // Nullpointer zurück
if (counter==0) memset(lineBuffer,0,sizeof(lineBuffer)); // Puffer vor Benutzung löschen
c=Serial.read(); // Aktueller Pufer in c Speichern
if (c==ZEILENTRENNZEICHEN) // wenn c gleich ZEILENTRENNZEICHEN dann aufführen
{
counter=0; // Zähler zurücksätzen damit neue Zeilen empfangen werden kann
return lineBuffer; // Volständige Zeile zurückgeben
}
else if (c>=32) // kein Steuerzeichen! (23 = Ascii zeichen !)
{
lineBuffer[counter]=c; // Zeichen im Zeilenpuffer einfügen
if (counter<sizeof(lineBuffer)-2) counter++;
}
return NULL;
}
// Das ist eine Funktion !!!
void setup()
{
Serial.begin(Baudrate); // Serielenport Starten
pinMode(startPin, INPUT); // startPin auf INPUT setzen (Taster)
}
void loop()
{
char* text=receiveBuffer(); // Alles aus der Serielenschnitstelle Lesen
if(text != NULL)
{
if (strcmp(text,"Name:")==0) // Befehl prüfen "Name:"
{Serial.println(Name);} // Ausgabe
if (strcmp(text,"Firmware:")==0) // Befehl prüfen "Firmware:"
{Serial.println(Firmware_Nr);} // Ausgabe
if (strcmp(text,"Reset:")==0) // Befehl prüfen "Reset:"
{memset(hardware, 0, sizeof(hardware)); Serial.println("Hadware Reset");} // Hadware Reseten und Ausgabe
if (strcmp(text,"Print:")==0) // Befehl prüfen "Print:"
{
for (int i=0;i<schritte;i++)
{
Serial.print(hardware[i].pin);
Serial.print(", ");
Serial.print(hardware[i].vorlaufzeit);
Serial.print(", ");
Serial.println(hardware[i].dauer);
}
}
// Hier muss jetzt die Erkennung Config rein
}
}
das ich bei deiner Version immer "Config:" eingeben muss finde ich nicht so schlimm: später soll das Arduino über eine Andere Software angesprochen werden, damit ich eine Grafische Oberfläche habe und nicht alles Tippen muss, daher macht mir das nichts aus.