Interactive Device Design
/
idd_hw2_jn80842_fingertips
Text input via five fingertip switches and three controls keys mounted on rubber band ball.
main.cpp@0:a04f3049f206, 2014-09-22 (annotated)
- Committer:
- jn80842
- Date:
- Mon Sep 22 06:07:54 2014 +0000
- Revision:
- 0:a04f3049f206
hw2 text input project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jn80842 | 0:a04f3049f206 | 1 | #include "mbed.h" |
jn80842 | 0:a04f3049f206 | 2 | #include "PinDetect.h" |
jn80842 | 0:a04f3049f206 | 3 | |
jn80842 | 0:a04f3049f206 | 4 | Serial pc(USBTX, USBRX); // tx, rx |
jn80842 | 0:a04f3049f206 | 5 | |
jn80842 | 0:a04f3049f206 | 6 | PinDetect button1(D7); |
jn80842 | 0:a04f3049f206 | 7 | PinDetect button2(D6); |
jn80842 | 0:a04f3049f206 | 8 | PinDetect button3(D5); |
jn80842 | 0:a04f3049f206 | 9 | PinDetect button4(D4); |
jn80842 | 0:a04f3049f206 | 10 | PinDetect button5(D3); |
jn80842 | 0:a04f3049f206 | 11 | |
jn80842 | 0:a04f3049f206 | 12 | PinDetect buttonBottom(PTC0); |
jn80842 | 0:a04f3049f206 | 13 | PinDetect buttonLeft(PTC7); |
jn80842 | 0:a04f3049f206 | 14 | PinDetect buttonMid(PTC5); |
jn80842 | 0:a04f3049f206 | 15 | |
jn80842 | 0:a04f3049f206 | 16 | int buttonSide = 0; //initialize to left |
jn80842 | 0:a04f3049f206 | 17 | int buttonLevel = 0; //initialize to top |
jn80842 | 0:a04f3049f206 | 18 | |
jn80842 | 0:a04f3049f206 | 19 | char key1[2][3] = {{'Q','A','Z'}, {'Y','H','N'}}; |
jn80842 | 0:a04f3049f206 | 20 | char key2[2][3] = {{'W','S','X'}, {'U','J','M'}}; |
jn80842 | 0:a04f3049f206 | 21 | char key3[2][3] = {{'E','D','C'}, {'I','K',' '}}; |
jn80842 | 0:a04f3049f206 | 22 | char key4[2][3] = {{'R','F','V'}, {'O','L','.'}}; |
jn80842 | 0:a04f3049f206 | 23 | char key5[2][3] = {{'T','G','B'}, {'P','!','?'}}; |
jn80842 | 0:a04f3049f206 | 24 | |
jn80842 | 0:a04f3049f206 | 25 | void key1Pressed(void) { |
jn80842 | 0:a04f3049f206 | 26 | pc.printf("%c",key1[buttonSide][buttonLevel]); |
jn80842 | 0:a04f3049f206 | 27 | } |
jn80842 | 0:a04f3049f206 | 28 | void key2Pressed(void) { |
jn80842 | 0:a04f3049f206 | 29 | pc.printf("%c",key2[buttonSide][buttonLevel]); |
jn80842 | 0:a04f3049f206 | 30 | } |
jn80842 | 0:a04f3049f206 | 31 | void key3Pressed(void) { |
jn80842 | 0:a04f3049f206 | 32 | pc.printf("%c",key3[buttonSide][buttonLevel]); |
jn80842 | 0:a04f3049f206 | 33 | } |
jn80842 | 0:a04f3049f206 | 34 | void key4Pressed(void) { |
jn80842 | 0:a04f3049f206 | 35 | pc.printf("%c",key4[buttonSide][buttonLevel]); |
jn80842 | 0:a04f3049f206 | 36 | } |
jn80842 | 0:a04f3049f206 | 37 | void key5Pressed(void) { |
jn80842 | 0:a04f3049f206 | 38 | pc.printf("%c",key5[buttonSide][buttonLevel]); |
jn80842 | 0:a04f3049f206 | 39 | } |
jn80842 | 0:a04f3049f206 | 40 | |
jn80842 | 0:a04f3049f206 | 41 | void keyLeftHeld(void) { |
jn80842 | 0:a04f3049f206 | 42 | //pc.printf("in left mode\r\n"); |
jn80842 | 0:a04f3049f206 | 43 | buttonSide = 0; |
jn80842 | 0:a04f3049f206 | 44 | pc.printf("%c",'0'); |
jn80842 | 0:a04f3049f206 | 45 | } |
jn80842 | 0:a04f3049f206 | 46 | void keyLeftReleased(void) { |
jn80842 | 0:a04f3049f206 | 47 | //pc.printf("in right mode\r\n"); |
jn80842 | 0:a04f3049f206 | 48 | buttonSide = 1; |
jn80842 | 0:a04f3049f206 | 49 | pc.printf("%c",'1'); |
jn80842 | 0:a04f3049f206 | 50 | } |
jn80842 | 0:a04f3049f206 | 51 | |
jn80842 | 0:a04f3049f206 | 52 | void keyLevelOff(void) { |
jn80842 | 0:a04f3049f206 | 53 | buttonLevel = 0; |
jn80842 | 0:a04f3049f206 | 54 | pc.printf("%c",'2'); |
jn80842 | 0:a04f3049f206 | 55 | } |
jn80842 | 0:a04f3049f206 | 56 | void keyMidOn(void) { |
jn80842 | 0:a04f3049f206 | 57 | buttonLevel = 1; |
jn80842 | 0:a04f3049f206 | 58 | pc.printf("%c",'4'); |
jn80842 | 0:a04f3049f206 | 59 | } |
jn80842 | 0:a04f3049f206 | 60 | void keyBottonOn(void) { |
jn80842 | 0:a04f3049f206 | 61 | buttonLevel = 2; |
jn80842 | 0:a04f3049f206 | 62 | pc.printf("%c",'6'); |
jn80842 | 0:a04f3049f206 | 63 | } |
jn80842 | 0:a04f3049f206 | 64 | |
jn80842 | 0:a04f3049f206 | 65 | int main() { |
jn80842 | 0:a04f3049f206 | 66 | button1.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 67 | button2.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 68 | button3.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 69 | button4.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 70 | button5.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 71 | buttonBottom.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 72 | buttonLeft.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 73 | buttonMid.mode(PullUp); |
jn80842 | 0:a04f3049f206 | 74 | |
jn80842 | 0:a04f3049f206 | 75 | |
jn80842 | 0:a04f3049f206 | 76 | button1.attach_asserted(&key1Pressed); |
jn80842 | 0:a04f3049f206 | 77 | button2.attach_asserted(&key2Pressed); |
jn80842 | 0:a04f3049f206 | 78 | button3.attach_asserted(&key3Pressed); |
jn80842 | 0:a04f3049f206 | 79 | button4.attach_asserted(&key4Pressed); |
jn80842 | 0:a04f3049f206 | 80 | button5.attach_asserted(&key5Pressed); |
jn80842 | 0:a04f3049f206 | 81 | |
jn80842 | 0:a04f3049f206 | 82 | //note that these are backwards from what you think they should be |
jn80842 | 0:a04f3049f206 | 83 | buttonLeft.attach_asserted_held(&keyLeftHeld); |
jn80842 | 0:a04f3049f206 | 84 | buttonLeft.attach_deasserted_held(&keyLeftReleased); |
jn80842 | 0:a04f3049f206 | 85 | //releasing either level button does the same thing |
jn80842 | 0:a04f3049f206 | 86 | buttonMid.attach_asserted_held(&keyLevelOff); |
jn80842 | 0:a04f3049f206 | 87 | buttonMid.attach_deasserted_held(&keyMidOn); |
jn80842 | 0:a04f3049f206 | 88 | buttonBottom.attach_asserted_held(&keyLevelOff); |
jn80842 | 0:a04f3049f206 | 89 | buttonBottom.attach_deasserted_held(&keyBottonOn); |
jn80842 | 0:a04f3049f206 | 90 | |
jn80842 | 0:a04f3049f206 | 91 | button1.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 92 | button2.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 93 | button3.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 94 | button4.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 95 | button5.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 96 | buttonLeft.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 97 | buttonLeft.setSamplesTillHeld(2); |
jn80842 | 0:a04f3049f206 | 98 | buttonMid.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 99 | buttonMid.setSamplesTillHeld(2); |
jn80842 | 0:a04f3049f206 | 100 | buttonBottom.setSampleFrequency(); |
jn80842 | 0:a04f3049f206 | 101 | buttonBottom.setSamplesTillHeld(2); |
jn80842 | 0:a04f3049f206 | 102 | |
jn80842 | 0:a04f3049f206 | 103 | //indicate we're ready |
jn80842 | 0:a04f3049f206 | 104 | pc.printf("%c",'5'); |
jn80842 | 0:a04f3049f206 | 105 | |
jn80842 | 0:a04f3049f206 | 106 | while(1) { |
jn80842 | 0:a04f3049f206 | 107 | //do nothing forever |
jn80842 | 0:a04f3049f206 | 108 | } |
jn80842 | 0:a04f3049f206 | 109 | } |