summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-02-08 21:18:18 -0500
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-02-08 21:18:18 -0500
commit506d463544825696386acf9aa4d572ff3301f7e4 (patch)
treeae4408d9289a94cce3c266e72bfca5fe6df46f4a
parent9250f5fa0cd3a52cf822c34a9d2b97103b71847f (diff)
Add keyboard code.
-rw-r--r--keyboard-1/keyboard-1.ino50
-rw-r--r--keyboard-2/keyboard-2.ino38
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);
+ }
+ }
+}