int BUTTON_UP = 2; int BUTTON_DOWN = 4; int BUTTON_LEFT = 3; int BUTTON_RIGHT = 5; int LED0 = 18; int LED1 = 19; int LED2 = 22; int LED3 = 23; int LED4 = 10; int LED5 = 11; int LED6 = 16; int LED7 = 17; int LED8 = 7; int LED9 = 6; int LED10 = 8; int LED11 = 9; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(LED0, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); pinMode(LED9, OUTPUT); pinMode(LED10, OUTPUT); pinMode(LED11, OUTPUT); pinMode(BUTTON_UP, INPUT_PULLUP); pinMode(BUTTON_DOWN, INPUT_PULLUP); pinMode(BUTTON_LEFT, INPUT_PULLUP); pinMode(BUTTON_RIGHT, INPUT_PULLUP); } typedef struct { int ledIndex; int ledPin; } ledMap; const ledMap myLedMap[] { {0, LED0}, {1, LED1}, {2, LED2}, {3, LED3}, {4, LED4}, {5, LED5}, {6, LED6}, {7, LED7}, {8, LED8}, {9, LED9}, {10, LED10}, {11, LED11} }; int currLEDIndex = 0; int delay_time = 500; int prevButtonState = 1; int currButtonState = 1; void loop() { // put your main code here, to run repeatedly: int ledPin = myLedMap[currLEDIndex].ledPin; digitalWrite(ledPin, HIGH); delay(delay_time); digitalWrite(ledPin, LOW); currLEDIndex = (currLEDIndex + 1) % 12; prevButtonState = currButtonState; currButtonState = digitalRead(BUTTON_UP); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ delay_time = delay_time / 2; if (delay_time < 25) { delay_time = 25; } return; } currButtonState = digitalRead(BUTTON_DOWN); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ delay_time = delay_time * 2; return; } }