From 506d463544825696386acf9aa4d572ff3301f7e4 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Mon, 8 Feb 2016 21:18:18 -0500 Subject: Add keyboard code. --- keyboard-1/keyboard-1.ino | 50 +++++++++++++++++++++++++++++++++++++++++++++++ keyboard-2/keyboard-2.ino | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 keyboard-1/keyboard-1.ino create mode 100644 keyboard-2/keyboard-2.ino 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); + } + } +} -- cgit v1.2.3