diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-02-08 21:18:18 -0500 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-02-08 21:18:18 -0500 |
commit | 506d463544825696386acf9aa4d572ff3301f7e4 (patch) | |
tree | ae4408d9289a94cce3c266e72bfca5fe6df46f4a | |
parent | 9250f5fa0cd3a52cf822c34a9d2b97103b71847f (diff) |
Add keyboard code.
-rw-r--r-- | keyboard-1/keyboard-1.ino | 50 | ||||
-rw-r--r-- | keyboard-2/keyboard-2.ino | 38 |
2 files changed, 88 insertions, 0 deletions
diff --git a/keyboard-1/keyboard-1.ino b/keyboard-1/keyboard-1.ino new file mode 100644 index 0000000..5b76bdd --- /dev/null +++ b/keyboard-1/keyboard-1.ino @@ -0,0 +1,50 @@ +const int rows[] = {4, 5}; +const int kRows = 2; + +const int columns[] = {6, 7}; +const int kColumns = 2; + +bool buttons[] = {false, false, false, false}; + +void setup() { + for (int i = 0; i < kRows; i++) { + pinMode(rows[i], INPUT_PULLUP); + } + for (int i = 0; i < kColumns; i++) { + pinMode(columns[i], INPUT); + } + Serial.begin(9600); +} + +bool scanKey(int row, int column) { + pinMode(columns[column], OUTPUT); + digitalWrite(columns[column], LOW); + bool pressed = digitalRead(rows[row]) == LOW; + pinMode(columns[column], INPUT); + return pressed; +} + +void loop() { +// pinMode(4, INPUT_PULLUP); +// if (digitalRead(4) == LOW) { +// Serial.print("pushed: "); +// Serial.println(columns[0]); +// } else { +// Serial.println("not pushed"); +// } + + for (int i = 0; i < kRows; i++) { + for (int j = 0; j < kColumns; j++) { + bool pressed = scanKey(i, j); + if (pressed != buttons[i * kColumns + j]) { + if (pressed) { + Serial.print("Button pressed: "); + } else { + Serial.print("Button released: "); + } + Serial.println(i * kColumns + j); + buttons[i * kColumns + j] = pressed; + } + } + } +} diff --git a/keyboard-2/keyboard-2.ino b/keyboard-2/keyboard-2.ino new file mode 100644 index 0000000..2e1a4ab --- /dev/null +++ b/keyboard-2/keyboard-2.ino @@ -0,0 +1,38 @@ +int rows[] = {0, 1}; +int columns[] = {2, 3, 4}; +int pins[] = {14, 15, 16, 17, 18, 19}; + +void setup() { + for (int i = 0; i < 2; i++) { + pinMode(i, INPUT_PULLUP); + } + + pinMode(13, OUTPUT); + + for (int i=0; i<6; i++) { + pinMode(pins[i], OUTPUT); + } +} + +bool key_pressed(const int key) { + const int row = key / 3; + const int column = key % 3; + + pinMode(columns[column], OUTPUT); + digitalWrite(columns[column], LOW); + bool pressed = digitalRead(rows[row]) == LOW; + pinMode(columns[column], INPUT); + + return pressed; +} + +void loop() { + digitalWrite(13, HIGH); + for (int i=0; i<6; i++) { + if (key_pressed(i)) { + digitalWrite(pins[i], HIGH); + } else { + digitalWrite(pins[i], LOW); + } + } +} |