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);...
Lesezeichen