Adithya Murali / Mbed 2 deprecated chiller_usbkb_test

Dependencies:   DebounceIn PinDetect_KL25Z USBDevice mbed

Fork of idd_fall15_hw2_chiller_morse by IDD Fall 2015

Revision:
0:4b4ae443bf49
Child:
1:11e89d389dd4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Sep 13 21:47:15 2015 +0000
@@ -0,0 +1,221 @@
+#include "mbed.h"
+#include "USBKeyboard.h"
+#include "DebounceIn.h"
+#include "PinDetect.h"
+
+DigitalOut redled(LED1);
+DigitalOut greenled(LED2);
+DigitalOut blueled(LED3);
+
+
+DebounceIn dit(D2);
+DebounceIn dah(D3);
+DebounceIn space(D4);
+PinDetect enter(D5);
+PinDetect backspace(D6);
+PinDetect capsLock(D7);
+
+DigitalOut capsled(D8);
+
+Serial pc(USBTX, USBRX); // tx, rx
+
+USBKeyboard keyboard;
+Timer t;
+struct Node {
+    char character;
+    char modifier;
+    bool display;
+    Node *left, *right;
+    Node(char nodeChar, char nodeMod, bool disp, Node *leftN, Node *rightN):
+        character(nodeChar), modifier(nodeMod), display(disp), left(leftN), right(rightN) {}
+};
+
+Node *head, *superHead;
+double timerTime;
+
+int main() {
+    dit.mode(PullUp);
+    dah.mode(PullUp);
+    
+    space.mode(PullUp);
+    enter.mode(PullUp);
+    backspace.mode(PullUp);
+    capsLock.mode(PullUp);
+    
+    // Delay for initial pullup to take effect
+    wait(.001);
+    
+    bool ditActive=false;
+    bool dahActive=false;
+    bool spaceActive = false;
+    bool enterActive = false;
+    bool backspaceActive = false;
+    bool capsLockActive = false;
+    
+    
+
+    Node *head = new Node(' ',0, false,  
+    new Node('e',0,true, 
+        new Node('i',0, true, 
+            new Node('s',0, true, 
+                new Node('h',0, true, 
+                    new Node('5',0, true, NULL, NULL), 
+                    new Node('4',0, true, NULL, NULL)), 
+                new Node('v',0, true, 
+                    new Node(' ',0, false, 
+                        new Node(' ',0, false, 
+                            NULL, 
+                            new Node('4',KEY_SHIFT, true, NULL, NULL)), 
+                        NULL), 
+                    new Node('3',0, true, NULL, NULL))), 
+            new Node('u',0, true, 
+                new Node('f',0, true, NULL, NULL), 
+                new Node(' ',0, false, 
+                    new Node(' ',0, false, 
+                        new Node('?',KEY_SHIFT, true, NULL, NULL), 
+                        new Node('_',KEY_SHIFT, true, NULL, NULL)), 
+                    new Node('2',0, true, NULL, NULL)))), 
+        new Node('a',0, true, 
+            new Node('r',0, true, 
+                new Node('l',0, true, 
+                    new Node('7',KEY_SHIFT, true, NULL, NULL), /* & */ 
+                    new Node(' ',0, false, 
+                        new Node('\'',KEY_SHIFT, true, NULL, NULL), /* " */
+                        NULL)), 
+                new Node(' ',0, false, 
+                    new Node('+',KEY_SHIFT, true, 
+                        NULL, 
+                        new Node('.',0, true, NULL, NULL)),   
+                    NULL)), 
+            new Node('w',0, true, 
+                new Node('p',0, true, 
+                    NULL, 
+                    new Node(' ',0, false, 
+                        new Node(34,KEY_SHIFT, true, NULL, NULL), /*@*/
+                        NULL)), 
+                new Node('j',0, true, 
+                    NULL, 
+                    new Node('1',0, true, 
+                        new Node('\'',0, true, NULL, NULL), 
+                        NULL))))), 
+    new Node('t',0, true,  
+        new Node('n',0, true, 
+            new Node('d',0, true, 
+                new Node('b',0, true, 
+                    new Node('6',0, true, 
+                        NULL, 
+                        new Node('-',0, true, NULL, NULL)), 
+                    new Node('=',0, true, NULL, NULL)), 
+                new Node('x',0, true, 
+                    new Node('/',0, true, NULL, NULL), 
+                    NULL)), 
+            new Node('k',0, true, 
+                new Node('c',0, true, 
+                    NULL, 
+                    new Node(' ',0, false, 
+                        new Node(';',0, true, NULL, NULL), 
+                        new Node('1',KEY_SHIFT, true, NULL, NULL))), 
+                new Node('y',0, true, 
+                    new Node('9',KEY_SHIFT, true, 
+                        NULL, 
+                        new Node('0',KEY_SHIFT, true, NULL, NULL)), 
+                    NULL))), 
+        new Node('m',0, true, 
+            new Node('g',0, true, 
+                new Node('z',0, true, 
+                    new Node('7',0, true, NULL, NULL), 
+                    new Node(' ',0, false, 
+                        NULL, 
+                        new Node(',',0, true, NULL, NULL))), 
+                new Node('q',0, true, NULL, NULL)), 
+            new Node('o',0, true, 
+                new Node(' ',0, false, 
+                    new Node('8',0, true, 
+                        new Node(';',KEY_SHIFT, true, NULL, NULL), 
+                        NULL), 
+                    NULL), 
+                new Node(' ',0, false, 
+                    new Node('9',0, true, NULL, NULL), 
+                    new Node('0',0, true, NULL, NULL))))));
+
+    
+    superHead = head;
+    redled = 0;
+    greenled = 1;
+    blueled = 1;
+    t.start(); 
+    timerTime = t.read();
+    float tempTime;
+    while(1) {
+        // Non-character buttons, tried with interrupts but would send multiple keys, not sure why
+        if (space == 1) {
+            spaceActive = false;
+        } else if ((space == 0) && !spaceActive) {
+            spaceActive = true;
+            keyboard.keyCode(' ');
+            head = superHead;
+            timerTime = t.read();
+            continue;
+        }
+        
+        if (enter == 1) {
+            enterActive = false;
+        } else if ((enter == 0) && !enterActive) {
+            enterActive = true;
+            keyboard.printf("\r\n");
+            head = superHead;
+            timerTime = t.read();
+            continue;
+        }
+        if (backspace == 1) {
+            backspaceActive = false;
+        } else if ((backspace == 0) && !backspaceActive) {
+            backspaceActive = true;
+            keyboard.keyCode(8);
+            head = superHead;
+            timerTime = t.read();
+            continue;
+        }
+        if (capsLock == 1) {
+            capsLockActive = false;
+        } else if ((capsLock == 0) && !capsLockActive) {
+            capsLockActive = true;
+            keyboard.keyCode(KEY_CAPS_LOCK);
+            head = superHead;
+            timerTime = t.read();
+            blueled = 1 - blueled;
+            capsled = 1- capsled;
+            continue;
+        }
+
+
+        // press a button, advance the tree state
+        if ((dit == 0) && !ditActive){
+            ditActive = true;
+            head = head->left;
+            timerTime = t.read();
+        } else if ((dah == 0) && !dahActive) {
+            dahActive = true;
+            head = head->right;
+            timerTime = t.read();
+        } else {
+            if (dit == 1) {
+                ditActive = false;
+            }
+            if (dah == 1) {
+                dahActive = false;
+            }
+        }
+        // after a certain delay, send the key, reset the tree
+        tempTime = t.read();
+        if ((tempTime - timerTime) > 0.3f) {
+            if (head->display) {
+                keyboard.keyCode(head->character, head->modifier);
+                redled = 1-redled;
+                greenled = 1-greenled;
+            }
+            timerTime = t.read();
+            head = superHead;    
+        }
+    }
+}