diff --git a/keypad/keypad.ino b/keypad/keypad.ino index 339d9a5..f62d880 100644 --- a/keypad/keypad.ino +++ b/keypad/keypad.ino @@ -8,6 +8,9 @@ const int switchColPins[] = {40, 38, 36, 34, 32, 30, 28, 26, 24, 22}; // Switch const int LEDRowPins[] = {51, 49, 47, 45}; // LED Rows (Anodes) const int LEDColPins[] = {41, 39, 37, 35, 33, 31, 29, 27, 25, 23}; // LED Columns (Cathodes) +const int NUM_SLIDERS = 6; +const int analogInputs[NUM_SLIDERS] = {A2, A3, A4, A5, A7, A9}; + #define ROWS 4 #define COLS 10 int keyState[ROWS][COLS] = {0}; // Holds the state of each key @@ -17,15 +20,20 @@ int keyState[ROWS][COLS] = {0}; // Holds the state of each key #define PRESSED 1 #define HELD 2 -bool litButtons[][] = { +bool buttonBuffer[ROWS][COLS] = { {false, false, false, false, false, false, false, false, false, false}, {false, false, false, false, false, false, false, false, false, false}, {false, false, false, false, false, false, false, false, false, false}, {false, false, false, false, false, false, false, false, false, false} -} +}; + +bool litButtons[ROWS][COLS] = { + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false}, + {false, false, false, false, false, false, false, false, false, false} +}; -int curLitRow = -1; -int curLitCol = -1; void setup() { Serial.begin(9600); @@ -44,79 +52,89 @@ void setup() { pinMode(pin, OUTPUT); digitalWrite(pin, HIGH); } + for (int i = 0; i < NUM_SLIDERS; i++) { + pinMode(analogInputs[i], INPUT); + } + + // for(int y = 0; y < litButtons.length; y++){ + // for(int x = 0; x < litButtons[y].length; x++){ + // litButtons + // } + // } } -bool arrayIsFalse(bool arr[]){ - for(bool b : arr){ - if(!b){return false;} - } - return true; -} +// bool arrayIsFalse(bool arr[]){ +// for(bool b : arr){ +// if(!b){return false;} +// } +// return true; +// } -bool array2dIsFalse(bool arr[][]){ - for(bool b[] : arr){ - if(!arrayIsFalse(b)){return false;} - } - return true; -} +// bool array2dIsFalse(bool arr[][]){ +// for(bool b[] : arr){ +// if(!arrayIsFalse(b)){return false;} +// } +// return true; +// } void updateLights(){ - if(array2dIsFalse(litButtons)){ - curLitRow = -1; - curLitCol = -1; - return; - } - - if(curLitRow == -1){ - curLitRow = 0; - }else{ - curLitRow = (curLitRow+1) % ROWS; - } - - if(curLitCol == -1){ - curLitCol = 0; - }else{ - curLitCol = (curLitCol+1) % COLS; - } - // Find next enabled light - while(true){ - if(arrayIsFalse(curLitRow)){ - curLitRow = (curLitRow+1) % ROWS; - continue; - } + // while(true){ + for (int row = 0; row < ROWS; row++) { - while(true){ - if(!litButtons[curLitRow][curLitCol]){ - curLitCol = (curLitCol+1) % COLS; - continue; - } + digitalWrite(LEDRowPins[row], HIGH); // Activate row + for (int col = 0; col < COLS; col++) { + if (buttonBuffer[row][col]) { - break; + // Serial.print(row); + // Serial.print(", "); + // Serial.println(col); + + digitalWrite(LEDColPins[col], LOW); + delay(1); + digitalWrite(LEDColPins[col], HIGH); + + // digitalWrite(LEDRowPins[row], HIGH); + // digitalWrite(LEDColPins[col], LOW); + // Serial.print("Button pressed at row "); + // Serial.print(row); + // Serial.print(", col "); + // Serial.println(col); + // delay(1000); // Keep the LED on for a second + // digitalWrite(LEDRowPins[row], LOW); + // digitalWrite(LEDColPins[col], HIGH); + } + } + // for(int col = 0; col < COLS; col++){ + // digitalWrite(LEDColPins[col], HIGH); + // } + + digitalWrite(LEDRowPins[row], LOW); // Deactivate row } - } + // } } void loop() { - // for (int row = 0; row < ROWS; row++) { - // digitalWrite(switchRowPins[row], LOW); // Activate row - // for (int col = 0; col < COLS; col++) { - // if (digitalRead(switchColPins[col]) == LOW) { - // digitalWrite(LEDRowPins[row], HIGH); - // digitalWrite(LEDColPins[col], LOW); - // Serial.print("Button pressed at row "); - // Serial.print(row); - // Serial.print(", col "); - // Serial.println(col); - // delay(1000); // Keep the LED on for a second - // digitalWrite(LEDRowPins[row], LOW); - // digitalWrite(LEDColPins[col], HIGH); - // } - // } - // digitalWrite(switchRowPins[row], HIGH); // Deactivate row - // } + updateLights(); + + for (int row = 0; row < ROWS; row++) { + digitalWrite(switchRowPins[row], LOW); // Activate row + for (int col = 0; col < COLS; col++) { + if (digitalRead(switchColPins[col]) == LOW) { + // digitalWrite(LEDRowPins[row], HIGH); + // digitalWrite(LEDColPins[col], LOW); + + litButtons[row][col] = true; + + // delay(1000); // Keep the LED on for a second + // digitalWrite(LEDRowPins[row], LOW); + // digitalWrite(LEDColPins[col], HIGH); + } + } + digitalWrite(switchRowPins[row], HIGH); // Deactivate row + } } // #include