Efache Schaltung Funktioniert nur für ca. 30 Sekunden

Guten Abend,

Ich habe eben meinen Aduino bekommen und jetzt mal ein Programm geschrieben, mit dem man durch Drücken eines Schalters den Zustand einer Led( ein oder aus) ändern kann.
Zum entprellen habe ich eine Zeit von 300 ms eingestellt.
Der Code sieht folgendermaßen aus:

int led = 12;
int schalter = 10;
int pause = 200;
int zeitschalter = millis();
int ledstatus = HIGH;


void setup() {                

  pinMode(led, OUTPUT);     
  pinMode(schalter, INPUT);
}


void loop() {
  
if (digitalRead(schalter) == HIGH){
  if((millis()-zeitschalter) > pause){
    zeitschalter = millis();
      if(ledstatus == HIGH){ledstatus = LOW;}else{ledstatus = HIGH;}}
  }  

  
digitalWrite(led , ledstatus);
}

Dies funktioniert auch soweit ganz gut. Zum Beispiel, wenn ich den Schalter einfach gedrückt halte ändert sich alle 300 ms der Zustand.
Allerdings funktioniert das nur bis ca. 30 Sekunden.
Nach dieser Zeit leuchtet die Led nur bei gedrücktem Schalter, oder das an/ ausschalten geschieht mehr oder weniger zufällig, oder die Led wird nur etwas dunkler, wenn ich den Schalter drücke.
Weiß jemand, woher das kommen kann ?

Millis und int vertragen sich nicht gut.

Joah das wars dann auch schon.
Danke Klaus!

Hier ist nochmal der funktionierende Code:

int led = 12;
int schalter = 10;
long pause = 200;
long zeitschalter = millis();
int ledstatus = HIGH;


void setup() {                

  pinMode(led, OUTPUT);     
  pinMode(schalter, INPUT);
}


void loop() {
  
if (digitalRead(schalter) == HIGH){
  if((millis()-zeitschalter) > pause){
    zeitschalter = millis();
      if(ledstatus == HIGH){ledstatus = LOW;}else{ledstatus = HIGH;}}
  }  

  
digitalWrite(led , ledstatus);
}

Einen schönen Abend wünsche ich noch!

Prima, gut gemacht.

long zeitschalter = millis();

ist auch noch nicht das richtige.

unsigned long zeitschalter = millis();

ist optimal.
Grüße Uwe