Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DebounceIn PinDetect_KL25Z USBDevice mbed
Fork of idd_fall15_hw2_chiller_morse by
Revision 1:11e89d389dd4, committed 2015-09-20
- Comitter:
- adithya_murali
- Date:
- Sun Sep 20 05:35:34 2015 +0000
- Parent:
- 0:4b4ae443bf49
- Commit message:
- Testing USBKeyboard with basic Pindetect buttons
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sun Sep 13 21:47:15 2015 +0000
+++ b/main.cpp Sun Sep 20 05:35:34 2015 +0000
@@ -1,221 +1,96 @@
#include "mbed.h"
#include "USBKeyboard.h"
-#include "DebounceIn.h"
#include "PinDetect.h"
-DigitalOut redled(LED1);
-DigitalOut greenled(LED2);
-DigitalOut blueled(LED3);
+USBKeyboard keyboard;
+PinDetect button1(D4); // Left
+PinDetect button2(D5); // Right
+PinDetect button3(D6); // Space
+PinDetect button4(D7); // Shift
+
+DigitalOut myled(LED1);
+
+int state[4];
-DebounceIn dit(D2);
-DebounceIn dah(D3);
-DebounceIn space(D4);
-PinDetect enter(D5);
-PinDetect backspace(D6);
-PinDetect capsLock(D7);
-
-DigitalOut capsled(D8);
+void button1_pressed() {
+ state[0] = 1;
+}
+void button2_pressed() {
+ state[1] = 1;
+}
+void button3_pressed() {
+ state[2] = 1;
+}
+void button4_pressed() {
+ state[3] = 1;
+}
-Serial pc(USBTX, USBRX); // tx, rx
+void button1_released() {
+ state[0] = 0;
+}
+void button2_released() {
+ state[1] = 0;
+}
+void button3_released() {
+ state[2] = 0;
+}
+void button4_released() {
+ state[3] = 0;
+}
-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;
+void exec_keycode(int state[], USBKeyboard keyboard) {
+ if (state[0] == 1) {
+ keyboard.keyCode('a');
+ }
+ if (state[1] == 1) {
+ keyboard.keyCode('d');
+ }
+ if (state[2] == 1) {
+ keyboard.keyCode(32);
+ }
+ if (state[3] == 1) {
+ keyboard.keyCode(16);
+ }
+}
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;
-
-
+
+ /*Add callback functions for events when buttons are pressed. */
+ button1.attach_asserted(&button1_pressed);
+ button2.attach_asserted(&button2_pressed);
+ button3.attach_asserted(&button3_pressed);
+ button4.attach_asserted(&button4_pressed);
+
+ /*Add callback functions for events when buttons are released. */
+ button1.attach_deasserted(&button1_released);
+ button2.attach_deasserted(&button2_released);
+ button3.attach_deasserted(&button3_released);
+ button4.attach_deasserted(&button4_released);
+
+ button1.setAssertValue(0);
+ button2.setAssertValue(0);
+ button3.setAssertValue(0);
+ button4.setAssertValue(0);
- 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))))));
-
+ button1.setSampleFrequency();
+ button2.setSampleFrequency();
+ button3.setSampleFrequency();
+ button4.setSampleFrequency();
- 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;
+ for (;;) {
+ if (state[0] == 1) {
+ keyboard.keyCode('a');
}
-
- 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 (state[1] == 1) {
+ keyboard.keyCode('d');
}
- 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;
+ if (state[2] == 1) {
+ keyboard.keyCode(32);
}
-
-
- // 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;
- }
+ if (state[3] == 1) {
+ keyboard.keyCode(16);
}
- // 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;
- }
+ wait(0.1);
}
-}
+}
\ No newline at end of file
