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.
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.
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.
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.
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.
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!
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);
}
}
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