INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Countdown Timer
05.10.2016, 17:47
Beitrag #17
RE: Countdown Timer
OK ich steh etwas auf dem Schlauch was genau Du meinst.
Ich gebe per Menü z.b. ein
Aufnahmezeit 10Min,
Intervall 1Sec,
daraus wird dann die Anzahl der Aufnahmen, 600Stück, berechnet und wie weit der Slider zwischen jeder Aufnahme fahren muss was auch alles Wunderbar klappt. Habe dann einen Cowndown zähler wo die Aufnahmen herunter zählt, klappt auch wunderbar.

Aber ich möchte eben noch das auch die eingestellten 10Min im Minuten Schritt herunter gezählt werden.
Dazu habe ich in der Schleife am Anfang "unsigned long c = millis();" eingetzt und am ende der Schleife mit " X = (c / 60000)" umgerechnet das es 1Minute ergibt und diese X dann von der Dauer abgezogen.
Hab den Teil vom Sketch mal hier rein, vielleicht ist es dann übersichtlicher.

Was ich nur nicht verstehe warum "C / 60000" und nicht "C * 60000" ??? bei * gehts total schief.

Bei 600 Aufnahmen müsste der Timer ja dann bei 540 Aufnahmen auf 9Min springen, er Springt aber schon bei 545 Aufnahmen auf 9Min, also 5 Sec zu früh.
Nehme ich wieder 10Min aber 3,5Sec Intervall sind das 171Aufnahmen und bei 154 Aufnahmen Springt der Timer auf 9Min das dann auf die Aufnahme genau ist!! Aber warum bei 3,5Sec und nicht auch bei 1Sc Intervall???


Wie gesagt im grunde ist es egal wie genau der Zeit Timer ist, gegen ende kann ich eher abschätzen wie lange es dann noch dauert aber bei noch mehreren Hundert Aufnahmen will ich net viel rechnen müssen und auf 1-2Min kommt es da nicht drauf an. Da ja dieser Timer keinen Einfluss auf die Aufnahmen hat, die laufen ja Perfekt in der eingestellten Zeit und im richtigen Intervall ab.
Aber da kommt mein Ehrgeiz ins Spiel der eben herausfinden möchte warum das so ist und wie man es ändern kann;-)

Code:
if (key == SELECT_KEY) {
      digitalWrite(led, LOW);
      analogWrite(led4, 32);
      lcd.clear();
      //for (i = 0; i < 5 ; i++) {          // Test-Schleife
      for (i = 0; i < Bilder ; i++) {       // Intervall-Schleife
        unsigned long c = millis();                                  // Startet Zeitmessung für Intervall
        lcd.setCursor(0, 0);
        lcd.print("Noch ");
        if ((Bilder) - (i + 1) < 1000) lcd.print("0");
        if ((Bilder) - (i + 1) <  100) lcd.print("0");
        if ((Bilder) - (i + 1) <   10) lcd.print("0");
        lcd.print((Bilder) - (i + 1));      // Restbilder von
        lcd.setCursor(10, 0);
        if ((Dauer - X) <  100) lcd.print("0");
        if ((Dauer - X) <   10) lcd.print("0");
        lcd.print( Dauer - X);
        lcd.setCursor (1, 1);
        lcd.print("von ");
        if (Bilder < 1000) lcd.print("0");
        if (Bilder <  100) lcd.print("0");
        if (Bilder <   10) lcd.print("0");
        lcd.print(Bilder);                  // Gesamtbilder
        lcd.setCursor(10, 1);
        if ((Dauer) <  100) lcd.print("0");
        if ((Dauer) <   10) lcd.print("0");
        lcd.print(Dauer);

        if (Ease == wertJ) {
          if ((Bilder) - (i + 1) > (Bilder - 90)) {
            steps = 0;
                      }
          if ((Bilder) - (i + 1) < (Bilder - 90)) {
            steps = ((Motor / 4.5) * Vorschub);
          }
          if ((Bilder) - (i + 1) < (Bilder - Bilder + 90)) {
            steps = 0;
          }
        }

        if (Ease == wertN) {
        }

        //unsigned long c = millis();                                  // Startet Zeitmessung für Intervall
        digitalWrite(ledA, HIGH);                                    // schaltet Kamera ein
        delay(150);                                                  // Auslösezeit der Kamera
        digitalWrite(ledA, LOW);                                     // schaltet Kamera aus
        delay(Verschluss * 1000);                                    // Max Verschlusszeit 30Sec
        if ((Bilder) - (i + 1) == 0) break;                          // Unterbricht Schleife bei 0 Bilder, da sonst Motor noch 1x Läuft
        digitalWrite(led, HIGH);                                     // Schaltet Motor Richtungs LED an
        unsigned long a = millis();                                  // Startet Zeitmessung wie lange der Motor läuft
        stepper.step(steps);                                         // Motor Lauf
        unsigned long b = millis();                                  // Beendet Zeitmessung wie lange der Motor läuft
        a = (b - a);                                                 // Berechnet die Motor Lauf Zeit
        digitalWrite(led, LOW);                                      // Schaltet Morot Richtungs LED ab
        delay((Intervall * 1000) - (Verschluss * 1000) - (150) - a); // Restlicher Intervall
        //unsigned long d = millis();                                // Beendet Zeitmessung für Intervall
        X = (c / 60000) ;                                           // Berechnet Zeit für Timer
      }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2016, 19:46
Beitrag #18
RE: Countdown Timer
AngryAngryAngryBlush
Jetzt weiß ich warum das nicht klappt so wie ich es bisher hatte.....Die millis haben immer die Zeit gemessen seit der Arduino an war und nicht seit wann die Schleife gestartet wurde..Blush
Ich kann zwar die Zeit der Schleife messen und ausgeben aber nicht zusammen zählen.
Hab auch versucht die Zeit seit Start und die Zeit der Schleife irgendwie zu verrechnen aber ich bekomm es Net hin.....
Auch das blink ohne delay Beispielen hat nicht geholfen, obwohl ich denke das es in die Richtung gehen müsste.
Aber jetzt hab ich Kopfschmerzen und keine Lust mehr....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2016, 20:14
Beitrag #19
RE: Countdown Timer
Hallo,
millis() braucht Variablen ohne Ende.

Zeit aller Schleifen =+ Zeit der Schleife

ist

Zeit aller Schleifen = Zeit aller Schleifen + Zeit der Schleife

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.10.2016, 07:26
Beitrag #20
RE: Countdown Timer
(06.10.2016 20:14)SkobyMobil schrieb:  Hallo,
millis() braucht Variablen ohne Ende.

Zeit aller Schleifen =+ Zeit der Schleife

ist

Zeit aller Schleifen = Zeit aller Schleifen + Zeit der Schleife

Gruß und Spaß
Andreas
HuhHuhHuhHuhHuhHuh
Ich versteh nur Bahnhof.....sorry.....
Was ist =+ ????
Könntest du das etwas genauer beschreiben???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.10.2016, 17:17
Beitrag #21
RE: Countdown Timer
Dies ist sicher ein Tippfehler und sollte += heissen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2016, 10:46
Beitrag #22
RE: Countdown Timer
Hy, ich bin immer noch keinen Schritt weiter Sad
Hat keinen nen tip für mich? Ich begreif den millis befehl irgendwie nicht....
Ich kann die Zeit vom Anfang bis Ende der Schleife messen und auch auf dem Display ausgeben. Gibt es da jetzt ne möglich diese Zeit zusammen rechnen zu lassen bis ich eben auf 60 000millis komme und dann von der Dauer 1 abziehen und das immer wieder ?
Ich hab das Gefühl die for() schleife teilt den Code in 2Hälfte, und Befehle davor gehen danach nicht mehr.

MfG
Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2016, 13:20
Beitrag #23
RE: Countdown Timer
(12.10.2016 10:46)Uwe1475 schrieb:  ...
Hat keinen nen tip für mich? Ich begreif den millis befehl irgendwie nicht....
...

Hallo Uwe,

mit den millis() ist es wie im richtigen Leben wenn du auf eine Uhr schaust.

Wenn du dir ein 5 Minuten Frühstücksei kochen willst, schaust du auf die Uhr wenn du das Ei in das Wasser legst und merkst dir die Uhrzeit. In der Folge schaust du ständig auf die Uhr bis 5 Minuten vergangen sind.

Auf dem Arduino sieht das zu der Zeit wenn das Ei ins Wasser springt so aus:
Code:
tauchzeit = millis();
Damit hast du die Startzeit in die vorher definierte unsigned long Variable "tauchzeit" übernommen.

Jetzt willst du nur noch wissen wann die 5 Minuten vorbei sind.
Auf dem Arduino sieht das dann vereinfacht so aus:
if (millis() >= tauchzeit + 5 Minuten);
Weil der Arduino aber mit 5 Minuten nichts anfangen kann muss man dem die 5 Minuten in Millisekunden umrechnen. Eine Sekunde hat 1000 Millisekunden. Eine Minute hat 60 Sekunden. Also 1000*60 Millisekunden. 5 Minuten sind dann 1000*60*5 Millisekunden.
Arduinotauglich:
Code:
if (millis() >= tauchzeit + (1000*60*5));

Dazu muss man wissen:
Die Arduinointerne Uhr beginnt immer bei jedem Einschalten des Arduinos von 0 an zu laufen.
Diese interne Uhr kann man aus dem Programm heraus nicht stellen oder beeinflussen. (vereinfacht dargestellt)
millis() ist wie ein Blick auf diese Uhr um den aktuellen Stand der Uhrzeit in Millisekunden seit dem einschalten des Arduinos zu erfahren.
millis() liefert also immer die vergangene Zeit in Millisekunden seit der Arduino eingeschaltet wurde. (auch vereinfacht weil es irgendwann einen Überlauf gibt und dann wieder bei 0 begonnen wird)

Wenn du also eine Zeit seit einem bestimmten Ereignis anzeigen willst, musst du erst die Zeit bei diesem Ereignis in einer Variablen speichern.
Code:
ereignis = millis();

Die seit diesem Ereignis vergangene Zeit in Millisekunden erhältst du wenn du von der aktuellen Zeit die Zeit vom Ereignis abziehst.
Code:
vergangene_zeit = (millis() - ereignis);

Die seit diesem Ereignis vergangene Zeit in ganzen Sekunden:
Code:
vergangene_zeit = ((millis() - ereignis) / 1000);

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.10.2016, 18:33
Beitrag #24
RE: Countdown Timer
JUHUUUUUUU....*freu*
Ich habe es endlich hinbekommen!!!
Nach unzähligen Versuchen und herum probieren habe ich es nun endlich geschafft das mir immer 1(min) nach (ca)60Sec von meiner eingegebenen Dauer abgezogen wird. Das (ca) weil es durch die delay() zwar eigentlich schon 60Sec vorbei sind aber die Anzeige eben noch nicht Aktualisiert werden konnte, aber damit kann ich leben.
War ein harter Kampf und habe seeehr oft enttäuscht den PC wieder ausgemacht.
Als ich es endlich Geschafft hatte das mir die Zeit hochgezählt wurde und eben nach 60Sec 1 von der Dauer abgezogen wurde war mein Problem das die Zeit einfach weiter lief ich musste aber die Zeit resetten damit der Zähler eben wieder bei 0 anfing um wieder auf 60 zählen zu können, da ja immer bei 60Sec 1(min) abgezogen werden sollte.

JETZT ist mein Sketch zu 100% Fertig....*FREU*

Danke Euch für eure Hilfe ohne Euch hätte ich das glaub nie hinbekommen!!!

MfG
Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  (Mega) Timer 3 A, B & C Scheams 0 231 04.06.2016 17:09
Letzter Beitrag: Scheams
  Arduino MEGA2560 Timer PWM Einsteiger94 3 667 04.04.2016 10:38
Letzter Beitrag: RMR
  Timer Interrupt Anfängerprobleme Fox 4 623 05.03.2016 02:28
Letzter Beitrag: Fox
  OUTPUT bleibt HIGH und timer stopt nicht. Atwist 4 536 08.01.2016 11:02
Letzter Beitrag: Atwist
  Timer inizialisieren Mathias 2 572 21.10.2015 21:24
Letzter Beitrag: Mathias
  Timer.h - es will nicht so, wie ich will. Daher benötige ich Hilfe. Gelegenheitsbastler 1 642 13.09.2015 14:32
Letzter Beitrag: Bitklopfer
Question Lcd display countdown Tom 4 1.214 13.07.2015 18:29
Letzter Beitrag: Scherheinz
  250µs-Timer für Arduino Due HaWe 0 654 19.11.2014 16:32
Letzter Beitrag: HaWe
  Timer-IRQ-Routine für Arduino Due umschreiben HaWe 2 1.373 18.10.2014 17:42
Letzter Beitrag: HaWe
  Timer-gesteuerter Interrupt René Hitz 12 3.087 08.10.2014 16:27
Letzter Beitrag: René Hitz

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste