miniBLIP - paint on matrix

Dependencies:   USBDevice mbed

Fork of blip_dado by Alberto Piganti

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?

UserRevisionLine numberNew 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 }