Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #define C 0
- #define D 1
- #define E 2
- #define Db 3
- #define Eb 4
- // Mux control pins
- const int MUX0_S0 = 0;
- const int MUX0_S1 = 1;
- const int MUX0_S2 = 2;
- const int MUX0_S3 = 3;
- const int MUX_CHN[16][4] = {
- {0, 0, 0, 0}, // channel 0
- {1, 0, 0, 0}, // channel 1
- {0, 1, 0, 0}, // channel 2
- {1, 1, 0, 0}, // channel 3
- {0, 0, 1, 0}, // channel 4
- {1, 0, 1, 0}, // channel 5
- {0, 1, 1, 0}, // channel 6
- {1, 1, 1, 0}, // channel 7
- {0, 0, 0, 1}, // channel 8
- {1, 0, 0, 1}, // channel 9
- {0, 1, 0, 1}, // channel 10
- {1, 1, 0, 1}, // channel 11
- {0, 0, 1, 1}, // channel 12
- {1, 0, 1, 1}, // channel 13
- {0, 1, 1, 1}, // channel 14
- {1, 1, 1, 1} // channel 15
- };
- // Keyboard
- const int KEY_R0 = 15;
- const int KEY_R1 = 16;
- // key #, pressed?
- int keys[5][2] = {{C, 0}, {D, 0}, {E, 0}, {Db, 0}, {Eb, 0}};
- String keyNames[5] = {
- "C",
- "D",
- "E",
- "Db",
- "Eb"
- };
- void setup() {
- pinMode(MUX0_S0, OUTPUT);
- pinMode(MUX0_S1, OUTPUT);
- pinMode(MUX0_S2, OUTPUT);
- pinMode(MUX0_S3, OUTPUT);
- digitalWrite(MUX0_S0, LOW);
- digitalWrite(MUX0_S1, LOW);
- digitalWrite(MUX0_S2, LOW);
- digitalWrite(MUX0_S3, LOW);
- pinMode(KEY_R0, INPUT_PULLDOWN);
- pinMode(KEY_R1, INPUT_PULLDOWN);
- Serial.begin(115200);
- }
- // in the future, Mux should be turned into a class,
- // where, say, Mux1.readMux() would call this method
- void setMux(int channel) {
- int controlPin[] = {MUX0_S0, MUX0_S1, MUX0_S2, MUX0_S3};
- // loop through the 4 sig
- for (int i = 0; i < 4; i++) {
- digitalWrite(controlPin[i], MUX_CHN[channel][i]);
- }
- }
- void toggleKey(int key, int state) {
- if (keys[key][1] != state) {
- keys[key][1] = state;
- if (state == 1) {
- Serial.print("Key ");
- Serial.print(keyNames[key]);
- Serial.println(" pressed.");
- } else {
- Serial.print("Key ");
- Serial.print(keyNames[key]);
- Serial.println(" released.");
- }
- }
- }
- void loop() {
- // select each mux line so far connected
- for (int i = 0; i < 3; i++) {
- delay(10);
- setMux(i); // set the current line (col), 0-2
- // read pins connected to uC
- int row0 = digitalRead(KEY_R0); // read row_0
- int row1 = digitalRead(KEY_R1); // read row_1
- // picture the first five-note cluster of a keyboard.
- if (i == 0) {
- toggleKey(E, row1);
- } else if (i == 1) {
- toggleKey(Eb, row0);
- toggleKey(D, row1);
- } else if (i == 2) {
- toggleKey(Db, row0);
- toggleKey(C, row1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement