Zeit nach jedem Durchlauf um 1 Sek erhöhen

Hallo alle zusammen,

ich bin neu hier. Ich heiße Manuel, bin 33 und komme aus NRW.
Ich bin ansoluter Anfänger in Sachen Arduino.

Ich habe mir schon einige Tutorials angeschaut und ein wenig herumexperimentiert.

Nun stehe ich vor folgendem Problem.

Ich möchte im ersten Schritt eine LED für eine Sekunde einschalten. Dann soll sie ausgehen, 10 Sekunden warten und für 2 Sekunden angehen. Wieder 10 Sekunden Pause und dann für 3 Sekunden angehen usw. Die Pause von 10 Sekunden soll fest sein aber die Einschaltzeit soll sich mit jedem Durchlauf um eine Sekunde erhöhen.
Die Delay Funktion kann man ja nicht um ++ erhöhen deshalb stehe ich vor einem Problem.

Im nächsten Schritt möchte ich über den Output einen Spannungswandler ( von 5V auf 12V ) ansteuern der dann eine 12V Lampe in dem selben Muster leuchten lässt.
Wie kann ich das realisieren?

Wäre für Tips dankbar.
Sorry für die vielleicht dumme Frage, aber bin wirklich bei 0 gestartet und total unbeholfen

Viele Grüße
Manuel

mach eine Variable
verwende die Variable in delay
erhöhe die Variable um 1000

Danke für die schnelle Antwort.

Also du meinst dann anstatt Delay(1000) einfach delay(variable) und dann am ende des Sketch variable++ ?

variable++ erhöht um 1.
delay erwartet millisekunden.

wenn du das so machen willst, dann würde sich

delay(variable * 1000UL);

anbieten.

warum *1000UL?

Das Multiplikationszeichen darin verstehe ich nicht so ganz und was bedeutet UL?

Ich hätte das jetzt so versucht ( keine Ahnung ob das funktioniert )

int Schließzeit;

int LEDPin = 13;




void setup() {

 
 
 pinMode(LEDPin,OUTPUT);
 
 
 
}

void loop() {

Schließzeit = 1000;


  digitalWrite(LEDPin,HIGH)

  delay(Schließzeit)

  digitalWrite(LEDPin,LOW)
  Delay(5000)
 
 
Schließzeit + 1000;

}

a) verwende Code-Tags zum Posten von Code.
b) lade den Code in deine IDE und versuche es zu kompilieren. Es wird viele Syntax-Fehler hageln
c) das kann nix:
Schließzeit + 1000;

du brauchst eine Variablenzuweisung. ca in der Art

schliesszeit= schliesszeit+ 1000;
// oder kurz:
schliesszeit+= 1000;

d) Variablennamen immer in kleinbuchstaben beginnen lassen.
e) schau mal nach wie groß ein Wert von int sein darf. Wenn du über 32 Sekunden kommen willst, dann brauchst du unsigned long.
f) der Arduino rechnet grundsätzlich mit int, wenn nicht anders angegeben, daher kennzeichne ich die 1000 mit UL unsigned long, damit bei der Rechnung ein Unsigned Long rauskommen kann.
g) adaptiere deinen Sketch und lade ihn in deinen Arduino.

Was noiasca noch vergessen hat: die Schließzeit wird im jedem Durchlauf wieder auf 1000 zurückgesetzt.
Tip: im Setup auf 1000 setzen und in der Loop nur noch erhöhen

also das mit dem UL habe ich nicht so ganz verstanden. Reicht es einfach aus bei einer int Variable nach dem Wert das UL anzufügen und der darstellbare Zahlenbereich vergrößert sich ?

Ich habe den Code jetzt so umgeschrieben aber er sagt mir dann immer das:

" exit status 1
'schliesszeit' was not declared in this scope
"

manuel1711:
... und was bedeutet UL?

Siehe Integer Constants.

manuel1711:
Ich habe den Code jetzt so umgeschrieben ...

Ich sehe kein Programm!

Und verwende Code-Tags, auch in Post #4, wie noiasca dir schon geschrieben hat. Das kannst du in deinem Post auch noch nachträglich ändern.

Mach es bitte, damit der Sketch für alle besser lesbar ist.

oh entschuldigt

int Schliesszeit;

int LEDPin = 13;




void setup() {

  
  
  pinMode(LEDPin,OUTPUT);

  Schliesszeit = 1000UL;
  
  
}

void loop() {



   digitalWrite(LEDPin,HIGH);

   delay(schliesszeit);

   digitalWrite(LEDPin,LOW);
   delay(5000);
  
  
 Schliesszeit + 1000UL;

}

[/code]

Immer die Groß/kleinschreibung beachten.

Und schmeiß die überflüssigen Leerzeilen raus, die machen deinen Sketch schlecht lesbar.

Und deine letzte Zeile hat noch einen Fehler.

Danke. Ja da muss man sich wirklich dran gewöhnen. Wenn man das zum ersten mal macht, ist das echt sehr unüberschaubar war groß und was klein geschrieben wird

Habe den Sketch jetzt hochgelasen, aber die LED bleibt immer nur für 1 Sekunde an und erlischt dann für 5 Sekunden

Fehler gefunden. Jetzt klappt es.
Wunderbar. Vielen Lieben Dank an euch alle

manuel1711:
Fehler gefunden. Jetzt klappt es.
Wunderbar. Vielen Lieben Dank an euch alle

Und wenn du auch das machen würdest, worum wir dich gebeten haben, wäre ja super.

Wo war dein Fehler ?

HotSystems:
Und wenn du auch das machen würdest, worum wir dich gebeten haben, wäre ja super.

Was meinst du damit ?

Der Fehler war, dass ich keine Variablenzuweisung gemacht hatte

manuel1711:
Was meinst du damit ?

Was in Post #5 und #9 steht.

Ach so okay.
Habe oben den Code Tag hinzugefügt

Das Prgorgramm läuft jetzt wie es soll.

Wollte jetzt noch einen 3 Poligen Schalter dazuwischen schalten, sodass das Programm nur ausgeführt wird, wenn der Schalter eingeschaltet ist. Also an PIN 2 ein Signal ankommt. Habe den Code folgendermaßen angepasst, aber das Programm läuft durch, egal ob der Schalter betätigt ist oder nicht

int SchalterA;
int InputPin = 2;
int LEDPin = 13;
int schliesszeit;


void setup() {

  Serial.begin(9600);
  pinMode(InputPin,INPUT);
  pinMode(LEDPin,OUTPUT);
  schliesszeit = 1000UL;
   
   
}

void loop() {

SchalterA = digitalRead(InputPin);
Serial.println(SchalterA,DEC);


 if (SchalterA == 1)
 {
  
   digitalWrite(LEDPin,HIGH);
   delay(schliesszeit);
   digitalWrite(LEDPin,LOW);
   delay(5000); 
 
   schliesszeit = schliesszeit+1000UL;


 }

 if (SchalterA == 0)

 {
  digitalWrite(LEDPin,LOW);
  
 }

}

a) statte dein Programm mit Serial.print Ausgaben aus damit du siehst was dein Programm macht. Das ist die einfachste Variante um Logikfehler auf die Spur zu kommen, aber auch wenn die Hardware nicht das macht, was man glaubt.

b) lies dich über Pulldown und Pullup Widerstände ein. Recherchiere wie man einen Schalter beschaltet und was es mit INPUT_PULLUP auf sich hat

e) schau mal nach wie groß ein Wert von int sein darf. Wenn du über 32 Sekunden kommen willst, dann brauchst du unsigned long.