For-Schleife die verzögert zählen soll

Hallo Zusammen,

also ich versuche gerade mittels einer For-Schleife den PWM-Wert zeitlich zu erhöhen. Dies geschieht bisher mit einer Delay-Funktion. Problematisch ist dabei leider, wie wahrscheinlich jeder weiß, dass damit mein Programm angehalten wird, was nicht der Fall sein dürfte. Hat mir jemand einen Rat wie ich das ändern könnt.
Um einen Startpunkt zu bekommen, habe ich mir mal eine “vereinfachte Uhr” programmiert. Diese ist nur zum Testen so programmiert worden und soll später durch einen anderen “Startgeber” ersetzt werden.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int StartTaster = 7;
const int Lampe = 10;

void setup() 
{
  pinMode(StartTaster, INPUT);
  pinMode(Lampe, OUTPUT);
}

 int Minute0 = 5;
 int Minute1 = 5;
 int Stunde0 = 9;
 int Stunde1 = 0;
 
void loop()
{
 if(StartTaster)
  {
    delay(1000); //Verkürzte Zeit, da es sonst zu lange dauert => theor. 60000ms für 1 Min
    Minute0 ++;
    
    if(Minute0 > 9)
    {
      Minute1 ++;
      Minute0 = 0;
    }
    
    if(Minute1 > 5)
    {
      Stunde0 ++;
      Minute1 = 0;
    }
    
    if(Stunde0 > 9)
    {
      Stunde1 ++;
      Stunde0 = 0;
    }
    
    if(Stunde1 == 2 && Stunde0 > 3)
    {
      Stunde0 = 0;
      Stunde1 = 0;
    }
    lcd.setCursor(1,0); lcd.print(Stunde1);
    lcd.setCursor(2,0); lcd.print(Stunde0);
    lcd.setCursor(3,0); lcd.print( ":" );
    lcd.setCursor(4,0); lcd.print(Minute1);
    lcd.setCursor(5,0); lcd.print(Minute0);
  }
  
  if(Stunde1 == 1 && Stunde0 == 0)
  {
    unsigned long StartZeit = millis();
    
    for(int i = 0; i < 255; i++)
    {
      analogWrite(Lampe, i);
      delay(100);
    }
  }
}

Nun, für zeitlich abhängige Vorgänge bietet sich immer die Verwendung von millis() an.

Hallo,
vielleicht hilft es, Reply 12/13

Gruß und Spaß
Andreas

Hey,

@Klaus_ww: Also hab es jetzt mal zum 1000 mal mit millis() ausprobiert und ich bin schon ein gutes Stück weiter.
@SkobyMobil : Ja hat mir geholfen

Problem ist nur, dass das Programm jetzt bis 11 hochzählt (Zaehler) und dann stehen bleibt. Ich sehe nur leider nicht wo das Problem ist?!
Hat jemand von euch eine Idee?

const int LED = 6;

void setup()
{
  pinMode(6, OUTPUT);
  //digitalWrite(LED, LOW); 
  Serial.begin(9200);
}

long Timestamp = 0;
long intervall = 1000;
long Zaehler;

void loop()
{
  Verzoegerung();
  
  Serial.print(Zaehler);
  analogWrite(LED, Zaehler);
}



void Verzoegerung()
{
  if(millis() - Timestamp == intervall && Zaehler < 255)
  {
    Timestamp = millis();
    Zaehler++;
  }
}

Mach mal >= Intervall Und unsigned long schadet auch nicht.

Super :) Ja passt danke!