Простой код будет выглядеть как-то так:
int ledPin1 = 1;
int ledPin2 = 2;
int ledPin3 = 3; // Светодиоды
int inPin = 4; // кнопка
void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(inPin, INPUT);
}
bool flag = false;
int counter = 0;
uint32_t timer = 0
void loop()
{
if (digitalRead(inPin) && !flag && millis()-timer < 500 && counter < 3)
{
flag = true;
counter++;
timer = millis();
}
if (!digitalRead(inPin) && flag)
{
flag = false;
}
if (!flag && millis()-timer > 2000)
{
counter=0;
}
switch (counter)
{
case 1:
digitalWrite(ledPin1, true);
digitalWrite(ledPin2, false);
digitalWrite(ledPin3, false);
break;
case 2:
digitalWrite(ledPin1, false);
digitalWrite(ledPin2, true);
digitalWrite(ledPin3, false);
break;
case 3:
digitalWrite(ledPin1, false);
digitalWrite(ledPin2, false);
digitalWrite(ledPin3, true);
break;
default:
digitalWrite(ledPin1, false);
digitalWrite(ledPin2, false);
digitalWrite(ledPin3, false);
}
}
Можно его усовершенствовать, учесть дребезг контактов, можно воспользоваться библиотекой
GyverButton