68 lines
1.4 KiB
C++

#include "keyboardmap.h"
#include "keyboardstate.h"
#include <array>
namespace {
const char *keyConfig1 = "§12345"
"\tQWERT"
"\177ASDFG"
"\129<ZXCV"
"\128\131\130 ";
constexpr size_t width = 6;
constexpr size_t height = 5;
const std::array<char, width> xPins = {};
const std::array<char, height> yPins = {};
typedef KeyboardState<width, height> keyboard_state_t;
keyboard_state_t state;
KeyboardMap keyboardMap(width, height, keyConfig1);
} // namespace
void writeKeyRelease(char key) {
// Implement this
}
void writeKeyPress(char key) {
// Implement this
}
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) {
keyboardMap.publishEvent(x, y, keyState);
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);
}
}