- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 12

Thema: Eigenwilliger Blinker

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Frage Eigenwilliger Blinker

    Hi Leute,

    ich habe mir neulich einen Inkrementalgeber zugelegt. Für den Anfang wollte ich ein kleines Programm schreiben, womit ich mit dem Inkrementalgeber die Blinkfrequenz variieren kann. Nunja den Inkrementalgeber kann ich auslesen, aber beim Blinken wird es Interessant! Die LED blinkt zwar, hört aber nach kurzer Zeit damit auf. Ich kann mir nicht ganz erklären warum. Aber vil. ist es ja nur ein ganz einfacher Logikfehler von mir.

    Naja hier der Code: (geht bestimmt noch eleganter zu lösen)


    Code:
    int LED_1=5;
    int tmp=0;
    unsigned long timer_1=0;
    unsigned long timer_2=0;
    unsigned long time_on=50; //Anzeit der LED in Millisekunden
    unsigned long time_off=50; //Auszeit der LED in Millisekunden 
    
    
    void setup()
    {
    __pinMode(LED_1, OUTPUT);
    }
    
    void loop()
    {
    
    
    __if(tmp==0) //Wenn Blinkvorgang beendet, von forn bginnen
    __{
    ____digitalWrite(LED_1, HIGH); //LED anschalten
    ____timer_1=millis(); //erste Zeit nehmen
    ____tmp=1;//dauerhaftes Zeitnehmen verhindern
    __}
    __if(millis() == (timer_1+time_on)) //wenn die vorher genommene Zeit PLUS der Anzeit mit der derzeitigen Zeit übereinstimmt...
    __{
    ____digitalWrite(LED_1, LOW); //...schalte LED aus... 
    ____timer_2=millis(); //...und nehme Zeit 2
    __}
    __if(millis() == (timer_2+time_off)) //Wenn Auszeit abgelaufen ist, beginne von forn
    __{
    ____tmp=0;
    __}
    
    
    }
    Habt Ihr einen Lösungsansatz für mich? millis() braucht ja glaube so an die 70Tage bis es auf Null zurückfällt, daran kann es also nicht liegen...


    Viele Grüße, Green
    Geändert von Greensiver (18.11.2013 um 16:04 Uhr) Grund: quote zu code geändert :)

  2. #2

    Unglücklich Weiß den keiner Rat?

    Leute......hier geht es um ein einfaches Blinkprogramm für den Arduino.

    Hat den keiner der Arduino-Freunde oder anderen Programmieren hier eine Idee?

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    mill is_rev_on=millis();

    Ohne genaue Beschreibung deines Programms, weisst du in Kürze selbst nicht mehr was du gemacht hast.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    mill is_rev_on=millis();
    JO, da war ein Leerzeichen da, wo es nicht hin sollte.

    Ohne genaue Beschreibung deines Programms
    Ich hab mich jetzt mal bemüht eine gute Beschreibung hinzubekommen...Ich hoffe die is gut so, wenn nicht bitte sagen.

    Auserdem waren noch 2 Variablen zu viel drin.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Hi Geensiver.

    Ist dein gezeigter Code vollständig? Ich bin nicht so firm mit C, aber ich kann nicht erkennen, wo die beiden Funktionen setup() und loop() aufgerufen werden, weil ich kein main() finde.
    Ich vermute, du willst eine Weiterschaltung von Phase zu Phase realisieren:
    1: Zeitnehmen und einschalten
    2: Warten auf Ausschaltbedingung
    3: Warten auf Auszeit-Ende

    Die Phasen 2 und 3 sollten dann WHILE-Konstrukte sein mit der jeweils negierten Bedingung ("solange Abbruch-Kriterium NICHT erreicht").
    Dann fehlt m.E. noch der direkte Sprung nach oben zu Phase 1, oder eben: main() {loop();}

    Dass es bisher überhaupt zu einem Blinken kommt, erscheint mir eher zufällig (wenngleich offenbar reproduzierbar).

    Was ich noch sagen wollte:
    Ich fände es besser, die veröffentlichte ursprüngliche Programmversion nicht nachträglich zu verändern, weil dann die innere Stimmigkeit des Threads verloren geht.
    Lieber durch jeweils aktuelle Versionen die sukkzessive Verbesserung des Programms erkennbar machen.
    Geändert von RoboHolIC (17.11.2013 um 23:25 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Arduino Code ist etwas problematisch. Es läuft einiges im Hintergrund ab, ähnlich wie bei BASCOM.
    Vom Syntax her ist das geschriebene schon richtig, auch das loop()
    Problematisch betrachte ich allerdings dieses unsigned long.
    Wenn das hier: if(millis() == (timer_2+time_off)) nicht genau erreicht wird, ist es vorbei und es gibt keinen Sicherheitsausstieg. Das unsigned long ist eine 8Byte Zahl. Wenn es da während der Addition und Vergleich eine Verschiebung gibt, ist es vorbei.
    Ich bin mir sicher das hier irgendwo der Wurm steckt, auch wenn ich ihn nicht erkenne.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. Optimierter ewiger Blinker
    Von runner02 im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 31.08.2013, 21:32
  2. Blinker
    Von roboter14 im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 24.04.2010, 18:30
  3. einfachster blinker
    Von nullDog im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 27.04.2005, 15:32
  4. simpeler blinker
    Von Goblin im Forum PIC Controller
    Antworten: 10
    Letzter Beitrag: 20.12.2004, 17:54
  5. Led Blitzer/Blinker
    Von VAG im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 24.06.2004, 19:13

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests