habe jetzt alle Kommentare Gelöscht dass ich den Code Posten kann habe sonst zu viele Zeichen ![]()
/*
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 ...
*/
// Config Daten
#define ZEILENTRENNZEICHEN 13
char Firmware_Nr[] = "1.0.1";
char Name[] = "Tropfen Box";
int startPin = 2;
int Baudrate = 9600;
int Lauf = 0;
unsigned long gesamtDauer = 0;
unsigned long starttime;
unsigned long looptime;
struct hardware_t{int pin;long vorlaufzeit; long dauer;};
hardware_t hardware[50]=
{
{3, 10, 30},
{4, 525, 30},
};
int schritte = sizeof(hardware) / sizeof(hardware[0]);
// 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() {
Serial.begin(Baudrate);
pinMode(startPin, INPUT);
pinMode(hardware[0].pin,OUTPUT);
hardware[0].vorlaufzeit*=1000;
hardware[0].dauer*=1000;
hardware[0].dauer+=hardware[0].vorlaufzeit;
pinMode(hardware[1].pin,OUTPUT);
hardware[1].vorlaufzeit*=1000;
hardware[1].dauer*=1000;
hardware[1].dauer+=hardware[1].vorlaufzeit;
} // startPin auf INPUT setzen (Taster)
void loop()
{
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);
}
}
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, ","));
hardware[Zeile].pin = pin;
hardware[Zeile].vorlaufzeit = vorlaufzeit;
hardware[Zeile].dauer = dauer;
pinMode(hardware[Zeile].pin,OUTPUT);
hardware[Zeile].vorlaufzeit*=1000;
hardware[Zeile].dauer*=1000;
hardware[Zeile].dauer+=hardware[Zeile].vorlaufzeit;
Serial.print(pin); Serial.print(",");
Serial.print(vorlaufzeit); Serial.print(",");
Serial.println(dauer);
}
}
if (digitalRead(startPin)== HIGH && Lauf == 0)
{
Lauf = 1;
for (int i=0;i<schritte;i++)
{
if (hardware[i].dauer>gesamtDauer)
{ gesamtDauer=hardware[i].dauer;}
}
starttime=micros();
while (micros()-starttime<gesamtDauer)
{
looptime=micros()-starttime;
for (int i=0;i<schritte;i++)
{
if (looptime>=hardware[i].vorlaufzeit && looptime<hardware[i].dauer)
digitalWrite(hardware[i].pin,HIGH);
else
digitalWrite(hardware[i].pin,LOW);
}
}
// Nur zur Sicherheit nochmal alles abschalten
for (int i=0;i<schritte;i++)
{digitalWrite(hardware[i].pin,LOW);}
}
else if (digitalRead(startPin)== LOW) {Lauf = 0;}
}