- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Pause mit millis wenn geschaltet wird.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Zitat Zitat von i_make_it Beitrag anzeigen
    Was noch zu berücksichtigen ist, ist das millis natürlich irgendwann überläuft und dann einmal der aktuelle Wert kleiner sein kann als der in der Variablen gespeicherte.
    Diesen Fehlerfall sollte man noch abfangen, denn sonst funktioniert das Programm sollange bis millis das erste mal den Maximalwert erreicht und danach nicht mehr, da millis ja nie mehr um den Grenzwert größer werden kann als der gespeicherte Wert.
    Also:
    Code:
    if (cur1micros > prev1micros) prev1micros = 0;
    müsste noch zum Code dazu.
    Wenn man nur mit Zeitdifferenzen rechnet, braucht man das nicht.

    Das
    Code:
    if (cur1micros - prev1micros >= toggleinterval) { //alle 10ms umschalten
    rechnet auch bei einem Überlauf richtig.

    Ich klau einfach mal hier die Zahlen, da hat es schon einer vorgerechnet
    http://forum.arduino.cc/index.php/topic,85706.0.html
    4294967290 - 4294967280 = 10
    4294967291 - 4294967280 = 11
    4294967292 - 4294967280 = 12
    4294967293 - 4294967280 = 13
    4294967294 - 4294967280 = 14
    4294967295 - 4294967280 = 15 (jetzt kommt der Überlauf)
    0 - 4294967280 = 16
    1 - 4294967280 = 17
    2 - 4294967280 = 18
    3 - 4294967280 = 19

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Ups, ja stimmt.

    Ich hab das halt standardmäßig zur Absicherung drin, hatte beim Posten nicht dran gedacht das ich ja auch selbst unsigned genommen habe.

    Sagen wir mal so, schaden tut es nicht. nur bei unsigned braucht man es halt auch nicht.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke HaWe!
    jetzt habe ich das endlich soweit kapiert, das ich das delay ersetzen kann.

    Habe ich auch gleich umgesetzt und bin begeistert.

    Das delay habe ich nur an die Stelle gesetzt, an der ich gerne die millis Pause hätte. Tut mir Leid, verwirrend zu schreiben.

    Danke i_make_ it,

    Deine Ausführungen habe ich auch schon oft gelesen und dabei viel gelernt. Dich werde ich nie mehr einholen.
    Verspreche aber, deinen Text mehrfach zu lesen.

    Das 2 gleiche Zeiten nicht möglich sind, wenn zusätzliche Funktionen den Loop Durchlauf verzögern, leuchtet mir ein.

    if (cur1micros - prev1micros >= toggleinterval) { //alle 10ms umschalten
    Warum Mikrosekunden, nicht Milli?
    Wo kommen die 10 ms her?

    Bei mir ist das alles viel einfacher. Ich baue nur aus Quatsch und ohne ernsten Sinn einen kleinen Solarroboter, der auf der Terasse rumfährt und bei einem Hindernis oder Verschattung, ein Rad kurz Rückwärts laufen lassen soll. (Zum Ausweichen) Und diese Rückwärtszeit mache ich mit millis(Danke das kann ich ja dank Euch jetzt).

    Ich wollte endlich mal hinkriegen, Pausen ohne delay zu machen.

    Dankeschön.
    Achim

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Zitat Zitat von achso Beitrag anzeigen
    Warum Mikrosekunden, nicht Milli?
    Wo kommen die 10 ms her?
    Wie heißt es doch so schön ?
    Only the code tells the truth.
    Code:
    unsigned long cur1micros = millis();
    Auch wenn die Variable micros heißt, können millis drin sein.

    Code:
    const long toggleinterval = 1000;
    Auch wenn der Kommentar sagt es wären 10, können es 1000 sein.

    Hat aber mit der Grundproblematik nichts zu tun. Sowas passiert beim Programmieren, deshalb habe ich gar nichts gesagt.

    micros() statt millis() gibt es bei Arduino aber auch, machen insbesondere bei den schnellen 32 Bittern manchmal Sinn.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    cur1micros
    Ist dieses dann nur der Name?
    Es könnte auch anders heißen?

    Sonst verstehe ich das nicht. Ist es eine Abkürzung für:
    "current eine Mikrosekunde" nur so zum Spaß geschrieben?

    Das Arduino Kochbuch habe ich schon rauf und runter. Es sind immer mindestens 2 Funktionen in einem Sketch. Das macht mich ganz verrückt.
    Der Unterschied zwischen Millis und Micros ist da schon beschrieben.
    Ich muß mich da noch mehr mit beschäftigen. Aber jetzt ist doch Sommer und das war jetzt nur :"Seid Tagen regnet es deshalb muß ich irgendeinen Quatsch machen"
    Nun scheint wieder die Sonne und weder ist der Quatsch fertig noch habe ich so viel Kraft mich dem draussen Sein zu entziehen.
    Aber dass mit den millis habe ich jetzt glaube ich drauf.

    Fetten Dank
    Achim

  6. #6
    HaWe
    Gast
    Zitat Zitat von achso Beitrag anzeigen
    cur1micros
    Ist dieses dann nur der Name?
    Es könnte auch anders heißen?

    Sonst verstehe ich das nicht. Ist es eine Abkürzung für:
    "current eine Mikrosekunde" nur so zum Spaß geschrieben?

    Achim
    kurze Antwort: Ja, es ist nur ein beliebiger Name, es könnte auch (fast) beliebig anders heißen.

    lange Antwort:
    C hat nur rund 20 "reservierte Wörter", alles andere sind frei gewählte Bezeichner-Namen.
    Die frei gewählten Namen können natürlich mehr oder weniger gut gewählt sein, und manche können auch etwas verwirren...
    Wenn allerdings einmal ein Name verwendet und deklariert oder definiert wurde (z.B. in bestimmten eingebundenen (#include) Libraries), dann ist dieser Name ab diesem Moment ebenfalls "reserviert". (ok, ja, in C++ kann man ihn auch "überladen"). Bei Arduinisch gibt es sehr viele davon, und man erkennt sie nicht auf den ersten Blick, weil viele Libs, in denen sie stehen, quasi durch die IDE versteckt sind.
    loop() ist so ein Ding, und setup(), und Serial().
    cur1micros gehört nicht dazu.
    Du erkennst es, wo und wie er im Code definiert wird:
    Schema:
    Code:
        Datentyp    Bezeichner-Name  Initialisierung
    unsigned long   cur1micros          = millis();
    also ist der Name cur1micros frei gewählt, er könnte genausogut Alf, FordPrefect, Lichtjahre oder Mondfinsternis heißen: alles mehr - oder auch weniger - sinnvoll.
    Geändert von HaWe (27.06.2017 um 21:37 Uhr)

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hallo HaWe,
    danke für deine ausführliche Antwort.

    Das begreif ja selbst ich!!

    In Zukunft achte ich da drauf.

    Mit C++ habe ich noch nichts gemacht, obwohl mir hier schon einige dazu rieten.

    Ich tüdel so`n bisschen mit Tiny und Pro Mini rum und gestehe ein, dass ich sehr sehr schlecht lernen kann.
    Das war zwar nicht immer so, aber nun freue ich mich umso mehr, wenn mir etwas so toll erklärt wird!!!

    Dankeschön bis zu meinem nächsten > ? <.

    Achim

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Zitat Zitat von achso Beitrag anzeigen
    Deine Ausführungen habe ich auch schon oft gelesen und dabei viel gelernt. Dich werde ich nie mehr einholen.
    Sieh es nicht so negativ, sonst wird es noch wahr.
    Das war mein drittes Arduino Programm. Halt mit dem Vorsprung schon bald 30 Jahre alles mögliche und unmögliche zu programmieren.

    Bei den Komentaren und Namen der Variablen sieht man die Faulheit.
    Variablen und Komentare stammen noch aus der ersten Version des Programs.

    Aber wie Du ja jetzt weist sind so Sachen frei wählbar.
    Man kann tatsächlich auch z.B.: heinz, susi, nikolaus oder v00001, v00002, v00003 nehmen. wie es einem halt gefällt.
    Jeder entwickelt da seine eigene Nomenklautur. und solange man alleine arbeitet muß man sich da auch mit niemandem abstimmen.
    Bei größerne Projekten mit mehreren Beteiligten werden dann Design Guidlines erstellt, in denen sogar sowas festgeschrieben sein kann.

    Wichtig ist nur immer erst mal nach dem eigenen Vermögen Stück für Stück was neues dazuzunehmen.
    Als ich vor 2 Jahren mit Arduino angefangen habe, habe ich mir 2 Nano Clones geholt, da konnte ich einfach auf einem etwas neues probieren und dann sehen ob sich das Verhalten bei beiden Codevarianten gleicht oder nicht.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke HaWe,
    ich nehme es als Lektüre für die dunklen Monate. Momentan ist Draußen zuviel anderes los.
    Zum Glück kann man sich hier ja immer wieder die alten Beiträge ansehen. Davon habe ich schon zig Mal profitiert.
    Interessant ist das Thema schon, obwohl ich immer noch gerne Analog und dazu mit Logik Gattern spiele. Aber zuverlässiger, was Störimpulse betrifft, sind die Controller auf jeden Fall. Wir haben z.B. ein Stallgebäude mit 4 Türen =4x Reedkontakt. Ein "4082 AND" checkt das und steuert 2 NE555 an. Trotz Entstörung und Pufferung gibt es immer wieder Fehlalarm. Wenn Leuchtstofflampen starten oder abschalten. Aber das ist auch ein Thema für Später!

    Nein, i_make_it,
    ich sehe das nicht so Schwarz.
    Auch habe ich in diesem doch kurzen Tread sehr viele Hinweise bekommen.

    Es wird schon was werden.

    Dankeschön

    Achim

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Nochmal Danke,
    das ist einfach Spitze, was habe ich schon erfolglos probiert.
    Und so einfach ohne "else" und so.
    Und current heißt nicht Strom sondern derzeitiger Zeitstempel.
    Und while heißt: Solange der Zustand wahr ist. In dem Fall: Bist 1000ms vergangen sind. Deshalb auch <.
    Total übersichtlich.


    Ich bin aber auch ein Dösel
    Geändert von achso (29.06.2017 um 19:43 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Lovotics: Wenn der Roboter eifersüchtig wird
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 30.06.2011, 16:50
  2. Spannungsregler wird heiß, wenn ISP angesteckt wird
    Von loukumas im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 11.02.2008, 16:53
  3. Was Passiert wenn die Last zu groß wird.
    Von Süße Hexe im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 13.09.2007, 21:20
  4. Led leuchtet, wenn Strom entnommen wird
    Von Christoph2 im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 23.09.2006, 19:38
  5. Simulator wird langsam wenn beim ATtiny2313 PB0=1 ist
    Von felack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 10.10.2005, 14:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen