Dirk3000:
aber mit programmierung kenn ich mich nicht aus 
ich habe hier den arduino uno liegen
Den Pin-13, an dem eine LED hängt, kannst Du nur auf Boards vom Typ "UNO R3" problemlos als Input verwenden.
Hast Du einen "UNO R3" oder vielleicht ein älteres Board?
Im Zweifelsfall lieber als INPUT einen anderen Pin als 13 für verwenden!
Nur beim UNO R3 kann Pin-13 problemlos auch als INPUT verwendet werden.
Bei solchen Abläufen wie Du es vorhast, ist die Wahl einer passenden Datenstruktur die halbe Miete. Ich habe dir mal ein Programmbeispiel gemacht, bei dem zu einer bestimmten "Startzeit" (die über einen Input-Button festgelegt wird) bis zum Ablauf einer Gesamtzeit eine Abfolge von Schaltvorgängen ausgelöst wird.
Die Schaltvorgänge sind in einem struct-Array definiert, wobei jedes Array-Element drei Variablen enthält:
- pin ==> Legt fest, welcher Pin geschaltet werden soll
- vorlaufzeit ==> Legt fest, nach welcher Zeit ab Start gerechnet eingeschaltet werden soll
- dauer ==> legt die Dauer der Einschaltzeit fest
Da Du die Timings offenbar in Millisekunden festlegen möchtest, aber der millis() Timer nicht auf die Millisekunde genau läuft, habe ich die Variablen so festgelegt, dass Du in der Datenstruktur zwar Millisekunden vorgibst, aber im Setup werden diese Werte in Mikrosekunden umgerechnet und im Programm dann nach dem Stand des micros() Timers geschaltet. Die erzielbare Schaltgenauigkeit mit diesem Code sollte bei ca. +/-0,5ms liegen.
Vielleicht kannst Du was damit anfangen.
//Ventilsteuerung by 'jurs' for German Arduino Forum
// (Code ist ungetestet)
int startPin = 3;
int ventil1Pin = 12;
int ventil2Pin = 11;
int ventil3Pin = 10;
int kameraPin = 9;
struct hardware_t{int pin;long vorlaufzeit; long dauer;};
hardware_t hardware[]={
{ventil1Pin, 2000, 300},
{ventil2Pin, 2300, 20},
{ventil3Pin, 2350, 40},
{kameraPin, 2310, 2},
};
int schritte=sizeof(hardware)/sizeof(hardware[0]);
unsigned long gesamtDauer;
void setup()
{
Serial.begin(9600); // Serielle Schnittstelle mit 9600 Baud starten
Serial.println("Ventilsteuerung gestartet");
pinMode(startPin, INPUT); // startPin auf INPUT setzen
gesamtDauer=0; // Gesamtdauer des längsten Schaltschritts ermitteln
for (int i=0;i<schritte;i++)
{
pinMode(hardware[i].pin,OUTPUT); // Pin auf OUTPUT setzen
hardware[i].vorlaufzeit*=1000; // Millisekunden zu Mikrosekunden
hardware[i].dauer*=1000; // Millisekunden zu Mikrosekunden
if (hardware[i].vorlaufzeit+hardware[i].dauer>gesamtDauer)
gesamtDauer=hardware[i].vorlaufzeit+hardware[i].dauer;
}
Serial.print("Gesamtdauer: ");
Serial.print(gesamtDauer/1000);
Serial.print(" ms = ");
Serial.print(gesamtDauer);
Serial.println(" Mikrosekunden");
}
void loop() {
unsigned long starttime;
unsigned long looptime;
if (digitalRead(startPin)==HIGH)
{
Serial.println("Started...");
starttime=micros();
while (micros()-starttime<gesamtDauer) // Jetzt läuft die Steuerschleife
{
looptime=micros()-starttime;
for (int i=0;i<schritte;i++)
{
if (looptime>=hardware[i].vorlaufzeit && looptime<hardware[i].vorlaufzeit+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);
}
Serial.println("Finished...");
}
}
Und dran denken: Die Vorlaufzeiten in der Datenstruktur gelten für jede angesteuerte Hardware ab Startzeit, also nicht relativ zu irgendeiner anderen Hardware, sondern ab Auslösung durch den INPUT! Die Reihenfolge, in der die Hardware in der Datenstruktur steht (z.B. Kamera am Ende) ist ohne Belang, es kommt nur auf die eingetragenen Vorlaufzeiten ab der Startzeit an, wann eine bestimmte Hardware geschaltet wird. Testen konnte ich das mangels vorliegender Hardware allerdings nicht vollständig.
Nachtrag: Bestimmte Hardware "abwählen" kannst Du, indem Du Kommentarstriche // vor die entsprechenden Zeilen der Datenstruktur setzt.