#include "keyboardstate.h" #include namespace { constexpr size_t width = 6; constexpr size_t height = 5; const std::array xPins = {}; const std::array yPins = {}; typedef KeyboardState keyboard_state_t; keyboard_state_t state; } // namespace void setup() { for (auto pin : xPins) { pinMode(pin, OUTPUT); } } //! Turn on one column pin and turn of the rest void changeColumnPin(size_t column) { for (size_t i = 0; i < xPins.size(); ++i) { digitalWrite(xPins[i], i == column); } } void readRowPins(keyboard_state_t &keyboardState, size_t x) { for (size_t y = 0; y < yPins.size(); ++y) { int value = digitalRead(yPins[y]); auto &keyState = keyboardState.state(x, y); if (keyState != value) { // Todo: Handle this Serial.print("key is changed"); keyState = value; } } } void loop() { // Cycle through columns for (size_t x = 0; x < width; ++x) { changeColumnPin(x); readRowPins(state, x); } }