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 prevLEDXCoord = 0; int prevLEDYCoord = 0; int currLEDXCoord = 0; int currLEDYCoord = 0; int prevButtonState = 1; int currButtonState = 1; void lightLED(int prevLedXCoord, int prevLedYCoord, int currLedXCoord, int currLedYCoord){ Serial.println(prevLedXCoord); Serial.println(prevLedYCoord); Serial.println("---"); Serial.println(currLedXCoord); Serial.println(currLedYCoord); Serial.println("---"); int prevLedIndex = (4 * prevLedYCoord) + prevLedXCoord; int currLedIndex = (4 * currLedYCoord) + currLedXCoord; Serial.println(prevLedIndex); Serial.println(currLedIndex); Serial.println("---"); int prevLedPin = myLedMap[prevLedIndex].ledPin; Serial.println(prevLedPin); int ledPin = myLedMap[currLedIndex].ledPin; Serial.println(ledPin); Serial.println("---"); digitalWrite(ledPin, HIGH); digitalWrite(prevLedPin, LOW); } void loop() { // put your main code here, to run repeatedly: prevLEDXCoord = currLEDXCoord; prevLEDYCoord = currLEDYCoord; prevButtonState = currButtonState; currButtonState = digitalRead(BUTTON_UP); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ Serial.println("Button Up"); currLEDXCoord = prevLEDXCoord; currLEDYCoord = (prevLEDYCoord - 1 + 3) % 3; lightLED(prevLEDXCoord, prevLEDYCoord, currLEDXCoord, currLEDYCoord); Serial.println("=============="); delay(500); return; } currButtonState = digitalRead(BUTTON_DOWN); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ Serial.println("Button Down"); currLEDXCoord = prevLEDXCoord; currLEDYCoord = (prevLEDYCoord + 1) % 3; lightLED(prevLEDXCoord, prevLEDYCoord, currLEDXCoord, currLEDYCoord); delay(500); Serial.println("=============="); return; } currButtonState = digitalRead(BUTTON_LEFT); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ Serial.println("Button Left"); currLEDXCoord = (prevLEDXCoord - 1 + 4) % 4; currLEDYCoord = prevLEDYCoord; lightLED(prevLEDXCoord, prevLEDYCoord, currLEDXCoord, currLEDYCoord); delay(500); Serial.println("=============="); return; } currButtonState = digitalRead(BUTTON_RIGHT); if((currButtonState != prevButtonState) && (currButtonState == LOW)){ Serial.println("Button Right"); currLEDXCoord = (prevLEDXCoord + 1) % 4; currLEDYCoord = prevLEDYCoord; lightLED(prevLEDXCoord, prevLEDYCoord, currLEDXCoord, currLEDYCoord); delay(500); Serial.println("=============="); return; } }