Problem Mit Millis

Hallo,
ich habe hier ein kleines Problem mit meinem Code für eine MAX7219 Matrix. Per Push Button sollen einzelnen Programme gewählt werden. Funktioniert auch alles soweit ohne Probleme. Ein Counter wird mit millis() gesteuert.

include "LedControl.h"
#define BUTTON_PIN                 2

LedControl lc = LedControl(12,11,10,1);

int buttonState;           
int lastButtonState = LOW;  
unsigned long lastDebounceTime = 0;  
unsigned long debounceDelay = 50;    
unsigned long previous_millis = 0;
byte counter = 0;
byte program = 0;

byte squares[5][8]  = 
{
	{0b11111111,0b10000001,0b10000001,0b10000001,0b10000001,0b10000001,0b10000001,0b11111111},
	{0000000000,0b01111110,0b01000010,0b01000010,0b01000010,0b01000010,0b01111110,0b00000000},
	{0000000000,0b00000000,0b00111100,0b00100100,0b00100100,0b00111100,0b00000000,0b00000000},
	{0000000000,0b00000000,0b00000000,0b00011000,0b00011000,0b00000000,0b00000000,0b00000000},
	{0000000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000},
};

void testing(uint16_t interval, byte arr[0][8])
{
	if (millis() - previous_millis >= interval)
	{
		previous_millis += interval;
					
		for (byte row = 1; row < 9; row++)
		{
			lc.setRow(0, row-1, arr[counter][row - 1]);
		}
		counter++;
    if (counter == 5)
			counter = 0;  
	}
}

void debounce()
{
	int reading = digitalRead(BUTTON_PIN);
  
  if (reading != lastButtonState)
	{
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) 
	{
    if (reading != buttonState)
		{
      buttonState = reading;
      
      if (buttonState == HIGH)
			{
				lc.clearDisplay(0);				
				program++;				
				counter = 0; 				
      }
    }
  }   
  lastButtonState = reading;
}

void setup()
{
	lc.shutdown(0,false); 
  lc.setIntensity(0,1);
  lc.clearDisplay(0);
   
	pinMode(BUTTON_PIN, INPUT);
	Serial.begin(9600);
}

void loop()
{
	debounce();		 	

  Serial.println(counter);

	switch(program)
	{
		case 1:
			testing(1000, squares);				
			break;
		case 2:
			testing(500, squares);				
			break;
		default:							
			counter = 0;				
			program = 0;
			break;
	}
}

Anstatt

if (millis() - previous_ms >= interval)
{
previous_ms = millis();
}
habe ich folgendes probiert: (wie in dem beispiel ganz unten,

, Modifikation für exakte Intervalle)

if (millis() - previous_ms >= interval)
{
previous_ms += interval;
}

Funktioniert auch soweit, jedoch wird die counter variable nach jedem Tastendruck teilweise nicht wieder auf 0 gesetzt, also manchmal nach dem ersten Durchlauf (also case wieder auf 1)
, startet der counter bei 3 oder 4 ( laut Serial Monitor) , obwohl er eigentlich bei 0 starten sollte.

woran kann das liegen?

vielen Dank schonmal im Voraus

gruß

Hendrik

include "LedControl.h"
#define BUTTON_PIN 2

LedControl lc = LedControl(12, 11, 10, 1);

bool buttonState;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long previous_millis = 0;
byte counter = 0;
byte program = 0;

byte squares[5][8]  =
{
  {0b11111111, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b11111111},
  {0000000000, 0b01111110, 0b01000010, 0b01000010, 0b01000010, 0b01000010, 0b01111110, 0b00000000},
  {0000000000, 0b00000000, 0b00111100, 0b00100100, 0b00100100, 0b00111100, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000},
};

void testing(unsigned long interval, byte arr[][8]) {
  if (millis() - previous_millis >= interval) {
    previous_millis += interval;

    for (byte row = 1; row < 9; row++) {
      lc.setRow(0, row - 1, arr[counter][row - 1]);
    }
    counter++;
    if (counter == 5) counter = 0;
  }
}

void debounce() {
  bool reading = digitalRead(BUTTON_PIN);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == HIGH) {
        lc.clearDisplay(0);
        program++;
        counter = 0;
        Serial.println("Tastendruck");
      }
    }
  }
  lastButtonState = reading;
}

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 1);
  lc.clearDisplay(0);

  pinMode(BUTTON_PIN, INPUT);
  Serial.begin(115200);
}

void loop() {
  debounce();
  Serial.print("program: ");
  Serial.print(program);
  Serial.print("; counter: ");
  Serial.println(counter);

  switch (program) {
    case 1:
      testing(1000, squares);
      break;
    case 2:
      testing(500, squares);
      break;
    default:
      counter = 0;
      program = 0;
      break;
  }
}

Kannst du das mal testen und die Serielle Ausgabe posten?

Wie ist der Button angeschlossen?

Und erklär mal bitte mit ein paar Worten, was da passieren soll.

r: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; co□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ɽ���program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
Tastendruck
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
Tastendruck
program: 3; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 3
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
Tastendruck
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
Tastendruck
program: 3; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 4
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
Tastendruck
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 3
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
program: 2; counter: 4
Tastendruck
program: 3; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
program: 1; counter: 3
Tastendruck
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
program: 2; counter: 2
Tastendruck
program: 3; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
Tastendruck
program: 2; counter: 0
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
program: 2; counter: 1
Tastendruck
program: 3; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
program: 0; counter: 0
Tastendruck
program: 1; counter: 0
program: 1; counter: 0
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 1
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2
program: 1; counter: 2

10k Pullup Resistor an besagten Pin. Bei Knopfdruck sollen die Programme im Switch(Program) ausgewählt werden. Das Phänomen mit dem Counter tritt aber wie gesagt nur sporadisch auf

include "LedControl.h"
#define BUTTON_PIN 2

LedControl lc = LedControl(12, 11, 10, 1);

bool buttonState;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long previous_millis = 0;
byte counter = 0;
byte program = 0;

byte squares[5][8]  = {
  {0b11111111, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b11111111},
  {0000000000, 0b01111110, 0b01000010, 0b01000010, 0b01000010, 0b01000010, 0b01111110, 0b00000000},
  {0000000000, 0b00000000, 0b00111100, 0b00100100, 0b00100100, 0b00111100, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000},
};

void testing(unsigned long interval, byte arr[][8]) {
  if (millis() - previous_millis >= interval) {
    previous_millis += interval;

    for (byte row = 1; row < 9; row++) {
      lc.setRow(0, row - 1, arr[counter][row - 1]);
    }
    counter++;
    if (counter == 5) counter = 0;
    Serial.print("counter: ");
    Serial.println(counter);
  }
}

void debounce() {
  bool reading = digitalRead(BUTTON_PIN);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == HIGH) {
        lc.clearDisplay(0);
        program++;
        counter = 0;
        Serial.println("Tastendruck");
        Serial.print("program: ");
        Serial.println(program);
      }
    }
  }
  lastButtonState = reading;
}

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 1);
  lc.clearDisplay(0);

  pinMode(BUTTON_PIN, INPUT);
  Serial.begin(115200);
}

void loop() {
  debounce();
  switch (program) {
    case 1:
      testing(1000, squares);
      break;
    case 2:
      testing(500, squares);
      break;
    default:
      counter = 0;
      program = 0;
      break;
  }
}

Kannst du es so noch mal testen

counter: 1
counter: 2
counter: 3
Tastendruck
program: 2
counter: 1
counter: 2
counter: 3
counter: 4
counter: 0
counter: 1
counter: 2
counter: 3
counter: 4
Tastendruck
program: 3
Tastendruck
program: 1
counter: 1
counter: 2
counter: 3
counter: 4
counter: 0
Tastendruck
program: 2
counter: 1
counter: 2
counter: 3
counter: 4
counter: 0
counter: 1
counter: 2
Tastendruck
program: 3
Tastendruck
program: 1
counter: 1
counter: 2
counter: 3
Tastendruck
program: 2
counter: 1
counter: 2
Tastendruck
program: 3
Tastendruck
program: 1
counter: 1
counter: 2
Tastendruck
program: 2
counter: 1
counter: 2
counter: 3
counter: 4
counter: 0

Also erster Knopfdruck case 1 - zweiter Knopfruck case 2 - dritter Knopfdruck default (alles löschen)

Jetzt passt es doch. Oder?

Setze solche (langen) Ausgaben bitte in Codetags, damit man nicht ewig scrollen muss.
Wie das geht, steht hier. Das kannst Du auch nachträglich ändern.

Gruß Tommy

ok danke , poste hier noch so oft

leider kommt bei case 1 immer noch ein kleine verzögerung

Augenblick, füge mal hinter Zeile 49 previous_millis = 0; ein.

das hatte ich auch schon probiert , bringt aber keine besserung .

Dann ändere es bitte auch in Deinem Posting #8.

Gruß Tommy

Das ist doch Murks!
Der wartet jetzt erst das prellen ab, dann wartet er nach dem letzten prellen nochmal 50ms (debouncetime) bis er merkt, dass er die Taste gedrückt hat.

@rermtoe8
Ich hab leider nicht verstanden, wann die Taste was auslösen soll, da Du programm und counter gemischt verwendest.

per Tastendruck soll die Program-Variable inkrementiert werden, der Counter ist für die Darstellung des Musters , im Loop also von 0 - 5

// #include "LedControl.h"
constexpr uint8_t BUTTON_PIN {2};

// LedControl lc = LedControl(12, 11, 10, 1);

constexpr bool isPressed {LOW};
uint8_t lastProgramm;

bool buttonState;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long previous_millis = 0;
byte counter = 0;
byte program = 0;

byte squares[5][8] =
{
  {0b11111111, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b11111111},
  {0000000000, 0b01111110, 0b01000010, 0b01000010, 0b01000010, 0b01000010, 0b01111110, 0b00000000},
  {0000000000, 0b00000000, 0b00111100, 0b00100100, 0b00100100, 0b00111100, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000},
};

void testing(uint16_t interval, byte arr[0][8])
{
  if (millis() - previous_millis >= interval)
  {
    previous_millis += interval;

    for (byte row = 1; row < 9; row++)
    {
      // lc.setRow(0, row - 1, arr[counter][row - 1]);
    }

    counter++;

    if (counter >= 5)
    { counter = 0; }

    Serial.print(F("Counter: "));
    Serial.print(counter);
  }
}

void getButton()
{
  bool buttonState = digitalRead(BUTTON_PIN);

  if (buttonState == isPressed)
  {
    if (lastButtonState != isPressed)
    {
      lastButtonState = isPressed;
      program++;
    }
  }
  else if (millis() - lastDebounceTime > debounceDelay)
  {
    lastButtonState = !isPressed;
  }
}

void setup()
{
  /*
    lc.shutdown(0, false);
    lc.setIntensity(0, 1);
    lc.clearDisplay(0);
  */
  pinMode(BUTTON_PIN, INPUT);
  Serial.begin(9600);
}
void loop()
{
  getButton();
  setProgramm();
}

void setProgramm()
{
  if (lastProgramm != program)
  {
    counter = 0;
//    lc.clearDisplay(0);
    lastProgramm = program;
    Serial.print(F("programmAuswahl: "));
    Serial.println(program);
  }

  switch (program)
  {
    case 0:
      break;

    case 1:
      testing(1000, squares);
      break;

    case 2:
      testing(500, squares);
      break;

    default:
      program = 0;
      break;
  }
}

Es kommt momentan nix auf den LED raus, das ist Absicht.
Theoretisch müsste mit jedem Tastendruck das Programm weiterzählen.
Der counter kommt dann erst mit der 1 - ich bin nicht so schnell heute....

EDIT: Evtl. stimmt die Zeit nach dem umschalten nicht.
Dann neue Zeile 90
previous_millis = 0;
und die schliessende Klammer wird dann Zeile 91

programmAuswahl: 1
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2programmAuswahl: 2
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2programmAuswahl: 3
programmAuswahl: 0
programmAuswahl: 1
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1programmAuswahl: 2
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0programmAuswahl: 3
programmAuswahl: 0
programmAuswahl: 1
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0programmAuswahl: 2
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2programmAuswahl: 3
programmAuswahl: 0
programmAuswahl: 1
Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0Counter: 1Counter: 2Counter: 3Counter: 4Counter: 0

Sieht für mich nicht falsch aus.

#include "LedControl.h"
constexpr uint8_t BUTTON_PIN {2};

LedControl lc = LedControl(12, 11, 10, 1);

constexpr bool isPressed {LOW};
uint8_t lastProgramm;

bool buttonState;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long previous_millis = 0;
byte counter = 0;
byte program = 0;

byte squares[5][8] =
{
  {0b11111111, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b11111111},
  {0000000000, 0b01111110, 0b01000010, 0b01000010, 0b01000010, 0b01000010, 0b01111110, 0b00000000},
  {0000000000, 0b00000000, 0b00111100, 0b00100100, 0b00100100, 0b00111100, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00011000, 0b00011000, 0b00000000, 0b00000000, 0b00000000},
  {0000000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000},
};

void testing(uint16_t interval, byte arr[0][8])
{
  if (millis() - previous_millis >= interval)
  {
    previous_millis += interval;

    for (byte row = 1; row < 9; row++)
    {
      lc.setRow(0, row - 1, arr[counter][row - 1]);
    }

    counter++;

    if (counter >= 5)
    { counter = 0; }

    Serial.print(F("Counter: "));
    Serial.println(counter);
  }
}

void getButton()
{
  bool buttonState = digitalRead(BUTTON_PIN);

  if (buttonState == isPressed)
  {
    if (lastButtonState != isPressed)
    {
      lastButtonState = isPressed;
      program++;
    }
  }
  else if (millis() - lastDebounceTime > debounceDelay)
  {
    lastButtonState = !isPressed;
  }
}

void setup()
{
  lc.shutdown(0, false);
  lc.setIntensity(0, 1);
  lc.clearDisplay(0);
  pinMode(BUTTON_PIN, INPUT);
  Serial.begin(9600);
}
void loop()
{
  getButton();
  setProgramm();
}

void setProgramm()
{
  if (lastProgramm != program)
  {
    counter = 0;
    lc.clearDisplay(0);
    lastProgramm = program;
    Serial.print(F("programmAuswahl: "));
    Serial.println(program);
    previous_millis = 0;
  }

  switch (program)
  {
    case 0:
      break;

    case 1:
      testing(1000, squares);
      break;

    case 2:
      testing(500, squares);
      break;

    default:
      program = 0;
      break;
  }
}