Alberto Piganti
/
blip_sketch
miniBLIP - paint on matrix
Fork of blip_dado by
main.cpp@8:ab4a9bc09839, 2016-01-18 (annotated)
- Committer:
- pighixxx
- Date:
- Mon Jan 18 09:02:05 2016 +0000
- Revision:
- 8:ab4a9bc09839
- Parent:
- 7:5b8708227c46
1st revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pighixxx | 3:2d84c8262139 | 1 | |
JacobBramley | 0:60499ad28ea9 | 2 | #include "mbed.h" |
pighixxx | 8:ab4a9bc09839 | 3 | #include "USBKeyboard.h" |
JacobBramley | 0:60499ad28ea9 | 4 | |
pighixxx | 3:2d84c8262139 | 5 | #define DATA_PIN P0_9 |
pighixxx | 7:5b8708227c46 | 6 | #define TOUCH_N 2 |
pighixxx | 4:55d1628dd2e5 | 7 | #define ANALOG_PHOTO P0_16 |
pighixxx | 4:55d1628dd2e5 | 8 | #define ANALOG_POTENTIOMETER P0_22 |
pighixxx | 4:55d1628dd2e5 | 9 | #define ANALOG_BUZZER P0_8 |
pighixxx | 4:55d1628dd2e5 | 10 | #define DIGITAL_CIRCLE P0_12 |
pighixxx | 7:5b8708227c46 | 11 | #define THRESHOLD 2 |
pighixxx | 7:5b8708227c46 | 12 | |
pighixxx | 7:5b8708227c46 | 13 | PinName touch_pin[] = {P0_14, P0_12}; |
pighixxx | 7:5b8708227c46 | 14 | DigitalInOut *p_touch_io[TOUCH_N]; |
pighixxx | 4:55d1628dd2e5 | 15 | |
pighixxx | 4:55d1628dd2e5 | 16 | AnalogIn ain(ANALOG_POTENTIOMETER); |
pighixxx | 7:5b8708227c46 | 17 | Ticker tick; |
pighixxx | 4:55d1628dd2e5 | 18 | |
pighixxx | 8:ab4a9bc09839 | 19 | uint8_t key_map[] = {'1', '2', '3', '4', '5', '6', '7', '8', '8','\n'}; |
pighixxx | 8:ab4a9bc09839 | 20 | uint16_t touch_data[TOUCH_N] = {0, }; |
pighixxx | 5:03859160e3a9 | 21 | |
pighixxx | 8:ab4a9bc09839 | 22 | // Virtual serial port over USB |
pighixxx | 8:ab4a9bc09839 | 23 | USBKeyboard keyboard; |
pighixxx | 7:5b8708227c46 | 24 | |
pighixxx | 7:5b8708227c46 | 25 | // Pushbutton |
pighixxx | 7:5b8708227c46 | 26 | DigitalIn pushbutton(P0_23); |
pighixxx | 7:5b8708227c46 | 27 | |
pighixxx | 7:5b8708227c46 | 28 | void detect(void) |
pighixxx | 7:5b8708227c46 | 29 | { |
pighixxx | 7:5b8708227c46 | 30 | for (int i = 0; i < TOUCH_N; i++) { |
pighixxx | 7:5b8708227c46 | 31 | uint8_t count = 0; |
pighixxx | 7:5b8708227c46 | 32 | DigitalInOut *touch_io = p_touch_io[i]; |
pighixxx | 7:5b8708227c46 | 33 | |
pighixxx | 7:5b8708227c46 | 34 | touch_io->input(); |
pighixxx | 7:5b8708227c46 | 35 | touch_data[i] <<= 1; |
pighixxx | 7:5b8708227c46 | 36 | while (touch_io->read()) { |
pighixxx | 7:5b8708227c46 | 37 | count++; |
pighixxx | 7:5b8708227c46 | 38 | if (count > THRESHOLD) { |
pighixxx | 7:5b8708227c46 | 39 | touch_data[i] |= 0x01; |
pighixxx | 7:5b8708227c46 | 40 | break; |
pighixxx | 7:5b8708227c46 | 41 | } |
pighixxx | 7:5b8708227c46 | 42 | } |
pighixxx | 7:5b8708227c46 | 43 | touch_io->output(); |
pighixxx | 7:5b8708227c46 | 44 | touch_io->write(1); |
pighixxx | 7:5b8708227c46 | 45 | |
pighixxx | 7:5b8708227c46 | 46 | if (0x01 == touch_data[i]) { // Threshold, get a touch |
pighixxx | 8:ab4a9bc09839 | 47 | keyboard.putc(key_map[i]); |
pighixxx | 7:5b8708227c46 | 48 | } else if (0x80 == touch_data[i]) { // Last 7 measurement is under the threshold, touch is released |
pighixxx | 7:5b8708227c46 | 49 | } |
pighixxx | 7:5b8708227c46 | 50 | } |
pighixxx | 7:5b8708227c46 | 51 | } |
pighixxx | 4:55d1628dd2e5 | 52 | |
JacobBramley | 1:ca76237d2965 | 53 | int main() |
JacobBramley | 1:ca76237d2965 | 54 | { |
pighixxx | 3:2d84c8262139 | 55 | // Turn off miniblip buzzer |
pighixxx | 3:2d84c8262139 | 56 | PwmOut speaker(P0_8); |
pighixxx | 3:2d84c8262139 | 57 | speaker=0.0; |
pighixxx | 7:5b8708227c46 | 58 | |
pighixxx | 7:5b8708227c46 | 59 | for (int i = 0; i < TOUCH_N; i++) { |
pighixxx | 7:5b8708227c46 | 60 | p_touch_io[i] = new DigitalInOut(touch_pin[i]); |
pighixxx | 7:5b8708227c46 | 61 | p_touch_io[i]->mode(PullDown); |
pighixxx | 7:5b8708227c46 | 62 | p_touch_io[i]->output(); |
pighixxx | 7:5b8708227c46 | 63 | p_touch_io[i]->write(1); |
pighixxx | 7:5b8708227c46 | 64 | } |
pighixxx | 7:5b8708227c46 | 65 | |
pighixxx | 7:5b8708227c46 | 66 | tick.attach(detect, 1.0 / 40.0); |
pighixxx | 7:5b8708227c46 | 67 | |
JacobBramley | 1:ca76237d2965 | 68 | // Create a temporary DigitalIn so we can configure the pull-down resistor. |
JacobBramley | 1:ca76237d2965 | 69 | DigitalIn(DATA_PIN, PullDown); |
pighixxx | 4:55d1628dd2e5 | 70 | |
pighixxx | 8:ab4a9bc09839 | 71 | int OldPos = ain.read() * 15.0f; |
pighixxx | 7:5b8708227c46 | 72 | |
JacobBramley | 1:ca76237d2965 | 73 | while (1) { |
pighixxx | 5:03859160e3a9 | 74 | // Read Pot |
pighixxx | 8:ab4a9bc09839 | 75 | int posJoy = ain.read() * 15.0f; |
pighixxx | 8:ab4a9bc09839 | 76 | if (posJoy!=OldPos) { |
pighixxx | 8:ab4a9bc09839 | 77 | OldPos=posJoy; |
pighixxx | 8:ab4a9bc09839 | 78 | keyboard.putc(posJoy+65); |
pighixxx | 5:03859160e3a9 | 79 | } |
pighixxx | 8:ab4a9bc09839 | 80 | if(pushbutton) { |
pighixxx | 8:ab4a9bc09839 | 81 | keyboard.printf("!"); |
pighixxx | 6:cacc8514502c | 82 | while (pushbutton) {wait_ms(10);} |
pighixxx | 4:55d1628dd2e5 | 83 | } |
pighixxx | 8:ab4a9bc09839 | 84 | |
pighixxx | 8:ab4a9bc09839 | 85 | |
JacobBramley | 0:60499ad28ea9 | 86 | } |
pighixxx | 4:55d1628dd2e5 | 87 | } |