- 3D-Druck Einstieg und Tipps    Werbung      
Ergebnis 1 bis 5 von 5

Thema: Mit Knopf LED einschalten und mit Timer ausschalten

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Ich würds so lösen:
    Code:
    #define LED_PIN  9
    #define TASTER_PIN  8
    #define DELAYTIME  3000 // 3 sec
    unsigned long tasterMoment;
    
    void setup() 
    {
      pinMode(LED_PIN, OUTPUT);
      pinMode(TASTER_PIN, INPUT);
    }
    
    void loop() {
      if(digitalRead(TASTER_PIN)) 
      { 
        tasterMoment= millis();
        digitalWrite(LED_PIN, LOW);
      }   
      if (millis() - tasterMoment >= DELAYTIME) 
      {
        digitalWrite(LED_PIN, HIGH);
      }
    }

  2. #2
    Neuer Benutzer
    Registriert seit
    14.12.2014
    Beiträge
    2
    Vielen Dank für eure Antworten.
    Das heißt, ich frage vor der Anweisung die aktuelle Zeit ab, speicher sie in einer Variablen und ziehe diese nachher wieder von der aktuellen Zeit ab... Okay, hab's soweit Bild  

    Können in dem Programm 2 alle Delay Funktionen ebenfalls durch millis() ersetzt werden? Müsste ich dann mehrere Timer laufen lassen?!

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Können in dem Programm 2 alle Delay Funktionen ebenfalls durch millis() ersetzt werden? Müsste ich dann mehrere Timer laufen lassen?!
    Versuch mal so:
    Code:
    #define TIMER_AUS  -1
    #define TIMER_AN    0
    #define LED_PIN     9
    #define TASTER_PIN  8
    #define TICTIME    30 // 30 ms
    #define TICCOUNTMAX 100
    
    void setup() {
      pinMode(LED_PIN, OUTPUT);
      pinMode(TASTER_PIN, INPUT);
    }
    
    void loop() {
     timer();
     // tue was anderes
    }
    
    void timer() {
      static unsigned long tic = millis();
      static int ticcount = TIMER_AUS;  
      if(millis() - tic > TICTIME && ticcount >= TIMER_AN) // 30 ms vergangen und Timer gestartet?
      {
        tic = millis();                // nächsten 30ms Zyklus starten
        ticcount++;
        if (ticcount > TICCOUNTMAX) {  // Timer fertig?
          ticcount = TIMER_AUS;
          digitalWrite(LED_PIN, HIGH);
        }
        else
          blinkfunction(ticcount);    // Timer läuft noch -> blinkfunction() 
      }
      if(digitalRead(TASTER_PIN))     // Taste betätigt? Timer startet (neu)
        ticcount = TIMER_AN;
    }
    
    void blinkfunction(int ticcount)  // in 30 ms Zeitabständen aufgerufen
    {                                 // ticcount wird jeden Aufruf um 1 erhöht
      digitalWrite(LED_PIN, LOW);  
    }
    Die Funktion blinkfunction(int ticcount) kannst du jetzt so umbauen, wie du willst. Also in Abhängigkeit von ticcount die Led dimmen. Z.B.
    if(ticcount < 32) analogWrite(ticcount*8-1);...
    Geändert von Sisor (15.12.2014 um 21:17 Uhr)

Ähnliche Themen

  1. LED per PWM einschalten und dimmen PROBLEM
    Von mat-sche im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 14.02.2014, 16:35
  2. Lichtschranke/Sensor zum ein- und ausschalten von LED-Stipes
    Von Timoletto im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 15.12.2012, 19:50
  3. Lampen mit RN-controll an- und ausschalten
    Von cricri im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 18.01.2011, 09:22
  4. Led mit Taster ein- und ausschalten
    Von Nullinger im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 30.01.2009, 13:00
  5. PWM mit Timer 0 und 2 geht, aber nicht mit Timer 1 (mega64)
    Von popi im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.06.2006, 16:00

Berechtigungen

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

    Werbung      fchao-Sinus-Wechselrichter AliExpress