68 lines
1.4 KiB
C++
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);
|
|
}
|
|
}
|