Chording keyboard implemented with a ukulele.

Dependencies:   DebounceIn mbed

Committer:
echiou
Date:
Mon Sep 14 07:56:54 2015 +0000
Revision:
1:a60ed70f6612
Parent:
0:24ee2b6c1754
Formatting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
echiou 0:24ee2b6c1754 1 #include "mbed.h"
echiou 0:24ee2b6c1754 2 #include "DebounceIn.h"
echiou 0:24ee2b6c1754 3 #include <string>
echiou 0:24ee2b6c1754 4 #include <sstream>
echiou 0:24ee2b6c1754 5
echiou 0:24ee2b6c1754 6
echiou 0:24ee2b6c1754 7
echiou 0:24ee2b6c1754 8 DigitalOut myled(LED2);
echiou 0:24ee2b6c1754 9
echiou 0:24ee2b6c1754 10 DigitalIn buttonDot1(D11);
echiou 0:24ee2b6c1754 11 DigitalIn buttonDot2(D10);
echiou 0:24ee2b6c1754 12 DigitalIn buttonDot3(D9);
echiou 0:24ee2b6c1754 13 DigitalIn buttonDot4(D8);
echiou 0:24ee2b6c1754 14 DigitalIn buttonDash1(D7);
echiou 0:24ee2b6c1754 15 DigitalIn buttonDash2(D6);
echiou 0:24ee2b6c1754 16 DigitalIn buttonDash3(D5);
echiou 0:24ee2b6c1754 17 DigitalIn buttonDash4(D4);
echiou 0:24ee2b6c1754 18 DebounceIn buttonEnter(D2);
echiou 0:24ee2b6c1754 19
echiou 0:24ee2b6c1754 20 Serial pc(USBTX, USBRX);
echiou 0:24ee2b6c1754 21
echiou 0:24ee2b6c1754 22 // SPST Pushbutton demo using internal PullUp function
echiou 0:24ee2b6c1754 23
echiou 0:24ee2b6c1754 24 // no external PullUp resistor needed
echiou 0:24ee2b6c1754 25
echiou 0:24ee2b6c1754 26 // Pushbutton from D2 to GND.
echiou 0:24ee2b6c1754 27
echiou 0:24ee2b6c1754 28 int main() {
echiou 0:24ee2b6c1754 29
echiou 0:24ee2b6c1754 30 int oldButtonEnter=0;
echiou 0:24ee2b6c1754 31 int newButtonEnter;
echiou 0:24ee2b6c1754 32 wait(.001);
echiou 0:24ee2b6c1754 33
echiou 0:24ee2b6c1754 34 buttonEnter.mode(PullUp);
echiou 0:24ee2b6c1754 35 buttonDot1.mode(PullUp);
echiou 0:24ee2b6c1754 36 buttonDot2.mode(PullUp);
echiou 0:24ee2b6c1754 37 buttonDot3.mode(PullUp);
echiou 0:24ee2b6c1754 38 buttonDot4.mode(PullUp);
echiou 0:24ee2b6c1754 39 buttonDash1.mode(PullUp);
echiou 0:24ee2b6c1754 40 buttonDash2.mode(PullUp);
echiou 0:24ee2b6c1754 41 buttonDash3.mode(PullUp);
echiou 0:24ee2b6c1754 42 buttonDash4.mode(PullUp);
echiou 0:24ee2b6c1754 43
echiou 0:24ee2b6c1754 44 while(1) {
echiou 0:24ee2b6c1754 45 newButtonEnter = buttonEnter;
echiou 0:24ee2b6c1754 46
echiou 0:24ee2b6c1754 47 int letter = 0;
echiou 0:24ee2b6c1754 48
echiou 0:24ee2b6c1754 49 if (!buttonDot1 && buttonDash1) {
echiou 0:24ee2b6c1754 50 letter += 1;
echiou 0:24ee2b6c1754 51 } else if (buttonDot1 && !buttonDash1) {
echiou 0:24ee2b6c1754 52 letter += 2;
echiou 0:24ee2b6c1754 53 }
echiou 0:24ee2b6c1754 54
echiou 0:24ee2b6c1754 55 if (!buttonDot2 && buttonDash2) {
echiou 0:24ee2b6c1754 56 letter += 10;
echiou 0:24ee2b6c1754 57 } else if (buttonDot2 && !buttonDash2) {
echiou 0:24ee2b6c1754 58 letter += 20;
echiou 0:24ee2b6c1754 59 }
echiou 0:24ee2b6c1754 60
echiou 0:24ee2b6c1754 61 if (!buttonDot3 && buttonDash3) {
echiou 0:24ee2b6c1754 62 letter += 100;
echiou 0:24ee2b6c1754 63 } else if (buttonDot3 && !buttonDash3) {
echiou 0:24ee2b6c1754 64 letter += 200;
echiou 0:24ee2b6c1754 65 }
echiou 0:24ee2b6c1754 66
echiou 0:24ee2b6c1754 67 if (!buttonDot4 && buttonDash4) {
echiou 0:24ee2b6c1754 68 letter += 1000;
echiou 0:24ee2b6c1754 69 } else if (buttonDot4 && !buttonDash4) {
echiou 0:24ee2b6c1754 70 letter += 2000;
echiou 0:24ee2b6c1754 71 }
echiou 0:24ee2b6c1754 72 if ((newButtonEnter==0) && (oldButtonEnter==1)) {
echiou 0:24ee2b6c1754 73 std::string letterToPrint = "";
echiou 0:24ee2b6c1754 74
echiou 0:24ee2b6c1754 75 switch(letter) {
echiou 0:24ee2b6c1754 76 case(0): letterToPrint = " "; break;
echiou 0:24ee2b6c1754 77 case(21): letterToPrint = "a"; break; //.-
echiou 0:24ee2b6c1754 78 case(1112): letterToPrint = "b"; break; //-...
echiou 0:24ee2b6c1754 79 case(1212): letterToPrint = "c"; break; //-.-.
echiou 0:24ee2b6c1754 80 case(112): letterToPrint = "d"; break; //-..
echiou 0:24ee2b6c1754 81 case(1): letterToPrint = "e"; break; //.
echiou 0:24ee2b6c1754 82 case(1211): letterToPrint = "f"; break; //..-.
echiou 0:24ee2b6c1754 83 case(122): letterToPrint = "g"; break; //--.
echiou 0:24ee2b6c1754 84 case(1111): letterToPrint = "h"; break; //....
echiou 0:24ee2b6c1754 85 case(11): letterToPrint = "i"; break; //..
echiou 0:24ee2b6c1754 86 case(2221): letterToPrint = "j"; break; //.---
echiou 0:24ee2b6c1754 87 case(212): letterToPrint = "k"; break; //-.-
echiou 0:24ee2b6c1754 88 case(1121): letterToPrint = "l"; break; //.-..
echiou 0:24ee2b6c1754 89 case(22): letterToPrint = "m"; break; //--
echiou 0:24ee2b6c1754 90 case(12): letterToPrint = "n"; break; //-.
echiou 0:24ee2b6c1754 91 case(222): letterToPrint = "o"; break; //---
echiou 0:24ee2b6c1754 92 case(1221): letterToPrint = "p"; break; //.--.
echiou 0:24ee2b6c1754 93 case(2122): letterToPrint = "q"; break; //--.-
echiou 0:24ee2b6c1754 94 case(121): letterToPrint = "r"; break; //.-.
echiou 0:24ee2b6c1754 95 case(111): letterToPrint = "s"; break; //...
echiou 0:24ee2b6c1754 96 case(2): letterToPrint = "t"; break; //-
echiou 0:24ee2b6c1754 97 case(211): letterToPrint = "u"; break; //..-
echiou 0:24ee2b6c1754 98 case(2111): letterToPrint = "v"; break; //...-
echiou 0:24ee2b6c1754 99 case(221): letterToPrint = "w"; break; //.--
echiou 0:24ee2b6c1754 100 case(2112): letterToPrint = "x"; break; //-..-
echiou 0:24ee2b6c1754 101 case(2212): letterToPrint = "y"; break; //-.--
echiou 0:24ee2b6c1754 102 case(1122): letterToPrint = "z"; break; //--..
echiou 0:24ee2b6c1754 103 }
echiou 0:24ee2b6c1754 104 pc.printf(letterToPrint.c_str());
echiou 0:24ee2b6c1754 105 }
echiou 0:24ee2b6c1754 106 myled = buttonEnter;
echiou 0:24ee2b6c1754 107 oldButtonEnter = newButtonEnter;
echiou 0:24ee2b6c1754 108 }
echiou 0:24ee2b6c1754 109 }