so habe gemerkt das ich das Falsche Programm eingearbeitet habe
sch.....
jetzt ist das Richtige drin.
Jetzt kann man bei einem Duchgang jede Hadware belibig offt ansteuern also Ein und Ausschalten lassen ![]()
die Fehlerabfrage habe ich auch mit eingebaut und bei einem Fehler kommt nun eine Fehlermeldung und nicht die Prüfantwort.
jetzt kann ich mich dran machen und ein Freebasic Programm dafür zu schreiben das sich mit dem Arduino unterhalten kann ![]()
man bin ich gerade Froh das der teil fertig ist ![]()
Hier noch mal der Code volständig mut Fehlerausgabe:
/*
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 ...
Wenn ein fehler auftrit bei der Übertragung der Seriellen schnitstelle antwortet das Bord mit Fehler
*/
#define ZEILENTRENNZEICHEN 13
int startPin = 2;
char Firmware_Nr[] = "1.2.0";
char Name[] = "Tropfen Box";
int Baudrate = 9600;
int Lauf = 0;
struct hardware_t{int pin;long vorlaufzeit; long dauer;}; // Struktur einer einzelnen Schaltzeit
struct schaltzeit_t{int pin;long zeit; boolean geschaltet;}; // Struktur einer einzelnen Schaltzeit
hardware_t hardware[201]=
{ // Vorlaufzeit und Dauer für die Hardware
{3, 10000, 30000},
{3, 500000, 30000},
};
#define schritte sizeof(hardware)/sizeof(hardware[0])
schaltzeit_t schaltzeiten[2*schritte];
int anzahlSchaltzeiten;
long geschalteteZeit[2*schritte];
void sortSchaltzeiten(int n)
{
schaltzeit_t temp;
for(int x=0; x<n; x++)
{
for(int y=0; y<n-1; y++)
{
if (schaltzeiten[y].zeit>schaltzeiten[y+1].zeit)
{
temp=schaltzeiten[y+1];
schaltzeiten[y+1]=schaltzeiten[y];
schaltzeiten[y]=temp;
}
}
}
}
// Funktion - Serielle Schnittstelle auslesen -
char* receiveBuffer() {
static char lineBuffer[100];
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>=32) {
lineBuffer[counter]=c;
if (counter<sizeof(lineBuffer)-2) counter++; }
return NULL; }
// Funktion - Serielle Schnittstelle auslesen -
void setup()
{
pinMode(startPin, INPUT);
Serial.begin(Baudrate);
}
void loop() {
unsigned long starttime;
unsigned long looptime;
char* text=receiveBuffer();
if(text != NULL)
{
if (strcmp(text,"Name:")==0) {Serial.println(Name);}
else if (strcmp(text,"Firmware:")==0) {Serial.println(Firmware_Nr);}
else if (strcmp(text,"Reset:")==0) {memset(hardware, 0, sizeof(hardware)); Serial.println("Hadware Reset");}
else if (strcmp(text,"Print:")==0)
{
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);
}
} // Print
else if (strncmp(text,"Config:",7)==0)
{
text = text + strlen_P(PSTR("Config:")) ;
int pin = atoi(strtok(text, ","));
int vorlaufzeit = atoi(strtok(NULL, ","));
int dauer = atoi(strtok(NULL, ","));
int Zeile = atoi(strtok(NULL, ","));
if (pin > startPin && pin < 21 && Zeile > -1 && Zeile < 200)
{
hardware[Zeile].pin = pin;
hardware[Zeile].vorlaufzeit = vorlaufzeit;
hardware[Zeile].dauer = dauer;
hardware[Zeile].vorlaufzeit*=1000;
hardware[Zeile].dauer*=1000;
Serial.print(pin); Serial.print(",");
Serial.print(vorlaufzeit); Serial.print(",");
Serial.println(dauer);
}
else
{ Serial.println("Fehler: Werte komnten nicht eingetragen werden."); }
} // Config
else { Serial.println("Fehler: Befehl nicht bekannt"); }
} // if(text != NULL)
if(digitalRead(startPin)== HIGH && Lauf == 0)
{
Lauf = 1;
anzahlSchaltzeiten=0;
for (int i=0;i<schritte;i++)
{
pinMode(hardware[i].pin,OUTPUT);
if (hardware[i].dauer>0)
{
schaltzeiten[anzahlSchaltzeiten].pin=hardware[i].pin;
schaltzeiten[anzahlSchaltzeiten].zeit=hardware[i].vorlaufzeit;
schaltzeiten[anzahlSchaltzeiten].geschaltet=true;
anzahlSchaltzeiten++;
schaltzeiten[anzahlSchaltzeiten].pin=hardware[i].pin;
schaltzeiten[anzahlSchaltzeiten].zeit=hardware[i].vorlaufzeit+hardware[i].dauer;
schaltzeiten[anzahlSchaltzeiten].geschaltet=false;
anzahlSchaltzeiten++;
}
}
starttime=micros();
for (int i=0;i<anzahlSchaltzeiten;i++)
{
while ((looptime=micros()-starttime)<schaltzeiten[i].zeit);
digitalWrite(schaltzeiten[i].pin,schaltzeiten[i].geschaltet);
}
}
else if (digitalRead(startPin)== LOW) {Lauf = 0;}
}