Timer

Hallo,

ich beginne gerade mit der Arduino IDE zu Programmieren.
Jetzt wollte ich mich erkundigen, ob ich einen Timer, den ich mit einem Taster aktiviere für mehrere Aktionen zeitlich versetzt verwenden kann. Ich will verschiedene LED´s mit dem Timer zeitlich versetzt ausschalten.

Ich habe leider noch keinen Code.

Danke für Rückmeldungen.

Hallo,
ja, machbar ist das schon.
Nur was genau verstehst du unter "Timer" ?

Hallo,

Du suchst sicher eine Ablaufsteuerung, Schrittkette , endlicher Automat, die/der nach Ablauf einer Zeit weiterschaltet.

Heinz

Jetzt wollte ich mich erkundigen, ob ich einen Timer, den ich mit einem Taster aktiviere für mehrere Aktionen zeitlich versetzt verwenden kann. Ich will verschiedene LED´s mit dem Timer zeitlich versetzt ausschalten.

Ja.

Tipp: zeichne dir einen Zeitstrahl und vermerke was wann passieren soll. Dann fällt dir auch die Programmierung leichter und du wirst den Weg dorthin einfach erkennen.

Mittels Millis die Vergangene Zeit bestimmen siehe IDE-Beispiel blinkwithoutdelay (Datei-Beispiele-02.Digital) und Nachtwächtererklährung hier im Forum.
Wenn die LED in einer bestimmten Zeit ab einem Ereignis ausgehen sollen ( zB nach 3, 4 ,5 Sekunden ab Tastaterbetätigung) braucht es nur eine oldmillis-Variable und mehrere Kontrollen ob die Zeit von 3,4 oder 5 Sekunden abgelaufen ist. Solle die LED von verschiedenen Ereignissen getriggert werden (zb 3 Taster und 3 LED) so braucht jede LED ihre eigene Startzeitzwischenspeicherung. Das ist keine Hexerei weil es ja nur mehrere Variablen sind. Notfalls um keinen Spaghetticode zu schreiben kann auch mehrere Arrays in einer Schleife verwendet werden zB eins für die Tasterpins, eins für die Startzei, eins für die Verzögerungszeit und eines für den Ausgangspin.

Grüße Uwe

uwefed:
Mittels Millis die Vergangene Zeit bestimmen siehe IDE-Beispiel blinkwithoutdelay (Datei-Beispiele-02.Digital) und Nachtwächtererklährung hier im Forum.
Wenn die LED in einer bestimmten Zeit ab einem Ereignis ausgehen sollen ( zB nach 3, 4 ,5 Sekunden ab Tastaterbetätigung) braucht es nur eine oldmillis-Variable und mehrere Kontrollen ob die Zeit von 3,4 oder 5 Sekunden abgelaufen ist. Solle die LED von verschiedenen Ereignissen getriggert werden (zb 3 Taster und 3 LED) so braucht jede LED ihre eigene Startzeitzwischenspeicherung. Das ist keine Hexerei weil es ja nur mehrere Variablen sind. Notfalls um keinen Spaghetticode zu schreiben kann auch mehrere Arrays in einer Schleife verwendet werden zB eins für die Tasterpins, eins für die Startzei, eins für die Verzögerungszeit und eines für den Ausgangspin.

Grüße Uwe

Danke, werde ich mal anschauen :slight_smile:

HotSystems:
Hallo,
ja, machbar ist das schon.
Nur was genau verstehst du unter "Timer" ?

Ich versuche eine kleine Beleuchtungssteuerung zu verwirklichen.
Ich habe 4 "Lampen"(LEDs) die ich mit 4 Tastern Ansteuern (Ein- und Ausschalten) will.
Hinzu kommen 3 Timer, die ich enfalls mit einem Tastern hinzuschalten kann, dass eine Ausgewählte LED z.B. 5 minuten Leuchtet und sich danach wieder ausschaltet.
Da ist die Frage ob ich den Timer mit der verzögerung 5min bei zwei LEDs gleichzeitig aber zeitversetzt auswählen kann oder ob der Timer nur für eine Aktion ausgelegt ist.

Ist kompliziert zu erklären sorry...

Ok, ich verstehe das so, du möchtest mit einem Arduino ( welcher?) quasi eine komfortable Schaltuhr bauen, die mehrere Ausgänge zu verschiedenen Zeiten ein bzw. ausschalten soll.
Somit ist der Timer, von dem du sprichst, diese "Schaltuhr" mit verschiedenen Schaltzeiten ?

Damit kommt jetzt der Tipp von noiasca zum Tragen. Zeichne einen Zeitstrahl mit den gewünschten Schaltzeiten.

Letztendlich wird das die von Rentner erwähnte Ablaufsteuerung.

ich hätte so argumentiert:

Wie will man etwas in einer Programmiersprache hinschreiben, wenn man es nicht in einfachen Worten ausdrücken kann?

Wenn es zu kompliziert zum erklären ist, dann ZEICHNE. Zum Beispiel ein Zustandsübergangsdiagramm.

noiasca:
ich hätte so argumentiert:

Wie will man etwas in einer Programmiersprache hinschreiben, wenn man es nicht in einfachen Worten ausdrücken kann?

Wenn es zu kompliziert zum erklären ist, dann ZEICHNE. Zum Beispiel ein Zustandsübergangsdiagramm.

Ich befürchte, selbst dein "Zustandsübergangsdiagramm" ist da schon zu kompliziert.
Da passt der Zeitstrahl viel besser. :wink:

im englischen Forum hat heute J-M-L eines schnell gezeichnet:

https://forum.arduino.cc/index.php?topic=720424.2 --> Beitrag #2

so ein Zustandsübergangsdiagramm ist quasi auch nur ein Zeitstrahl mit Bogen zum Anfang/Idle :wink:

Hallo
du hast eine schöne Aufgabenstellung zum Üben.
Fang einfach mit einem Stift und Stück Papier an und konstruiere einen Programmablaufplan.
Als Grundlage hierfür kannst du nach dem EVA-Prinzip vorgehen und die Aufgabenstellung aufteilen in:
Eingabe: Taster1 bis Taster7
Verarbeitung: Taster auswerten und evt. Timer=Zeitgeber starten
Ausgabe: LED1 bis LED4 schalten
Aus dieser Aufteilung ergeben sich Funktionen, die du einzeln testen kannst, z.B. ledOn(ledNummer) - ledOff(ledNummer) usw. und nach einem erfolgreichen Test über Kontrollstrukturen, switch(), case:, if() usw. zur Gesamtfunktion zusammenfügen.
Sehr wichtig hierbei ist auf die delay()-Funktion zu verzichten, da diese den Programmablauf blockiert.
Zum Start kann ich dir das BLINK WITHOUT DELAY aus dem IDE empfehlen, da dieser Sketch die Basis für deine Timer=Zeitgeber ist. Da sich Elemente wie Tasten, Leds und Timer wiederholen ist das Studium der struct- und enum-Anweisung wichtig.
Viel Erfolg

Da ist die Frage ob ich den Timer mit der verzögerung 5min bei zwei LEDs gleichzeitig aber zeitversetzt auswählen kann oder ob der Timer nur für eine Aktion ausgelegt ist.

Mantra:
Wenn du 5 Timer brauchst, dann mach dir 5 Timer.

class Timer{};
Timer meineTimer[5];
void setup(){}
void loop(){}

Gut, die können noch nix, ....
Aber ist ein Anfang!

combie:
Wenn du 5 Timer brauchst, dann mach dir 5 Timer.

Du könntest auch die Timer(klasse) aus meinen MobaTools verwenden, dann brauchst Du sie dir nicht selbst machen :wink:

Deine Timer, seine Timer, meine Timer: Egal.
Da jammert man nicht über Timer, sondern nimmt die, welche einem ans Gemüt passen.

Hey, ich habe jetzt den ersten Versuch gestartet.
Jedoch mach das Programm nicht das was ich will.
Plan war es die LED anzuschalten mit zwei Tastern und nach einer gewisse Zeit oder per Taster drei wieder auszuschalten.

Falls Ihr Vorschläge habt, was mein Fehler ist, gerne her damit:)

int stripeone = 13;     // "Stripeone" wird dem Pin13 zugeordnet


int buttonone = 5;      //Initialisierung des Tasterone zum pin 5
int buttontwo = 4;      //Initialisierung des Tastertwo zum pin 4
int buttonthree = 3;    //Initialisierung des Tasterthree zum pin 3
int buttonfour = 2;     //Initialisierung des Tasterfour zum pin 2

unsigned long smillis1;

const unsigned long T1 = 5000;

void setup() {
  Serial.begin(9600);  //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
  pinMode(13,OUTPUT);  //PIN 13 wird als Ausgang deklariert
 
  

  pinMode(5,INPUT);     //PIN 5 wird als Eingang deklariert
  pinMode(4,INPUT);     //PIN 4 wird als Eingang deklariert
  pinMode(3,INPUT);     //PIN 3 wird als Eingang deklariert
  pinMode(2,INPUT);     //PIN 2 wird als Eingang deklariert

 
  smillis1 = millis();
  
}



void loop() {

  if (!digitalRead(buttonone) & !digitalRead(buttontwo)){
    digitalWrite(stripeone, HIGH);
    smillis1 = millis();
    }
      if(millis()- smillis1 >= T1){
      digitalWrite(stripeone, LOW);
      }
  if (!digitalRead(buttonfour)){
    digitalWrite(stripeone, LOW);          
  }
}

Wie hast Du Deine Buttons geschaltet? Hast Du PullDownWiderstände dran?
Weill ein offener Pin wie ein e Antenne wirkt und alles unmögliche einfängt.

Gruß Tommy

Tommy56:
Wie hast Du Deine Buttons geschaltet? Hast Du PullDownWiderstände dran?
Weill ein offener Pin wie ein e Antenne wirkt und alles unmögliche einfängt.

Gruß Tommy

Ich habe meine Taster mit einem Pulldownwiderstand versehen(10K) alle sind von 5V auf die jeweiligen Pins geschalten

Das ist falsch.
Gegen 5V ist Pullup.
Du muss die auf GND legen, dann ist es Pulldown.

Und wo gegen schalten die Taster ?

raymond2:
alle sind von 5V auf die jeweiligen Pins geschalten

Die Taster oder die Widerstände?

Gruß Tommy