Arch + Grove - Infrared Receiver + Infrared Remote Control = Wireless Keyboard
Dependencies: DigitDisplay RemoteIR USBDevice mbed
main.cpp@0:9d5cfc5edee0, 2014-08-26 (annotated)
- Committer:
- yihui
- Date:
- Tue Aug 26 14:22:26 2014 +0000
- Revision:
- 0:9d5cfc5edee0
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yihui | 0:9d5cfc5edee0 | 1 | |
yihui | 0:9d5cfc5edee0 | 2 | #include <string.h> |
yihui | 0:9d5cfc5edee0 | 3 | #include "mbed.h" |
yihui | 0:9d5cfc5edee0 | 4 | #include "ReceiverIR.h" |
yihui | 0:9d5cfc5edee0 | 5 | #include "DigitDisplay.h" |
yihui | 0:9d5cfc5edee0 | 6 | #include "USBKeyboard.h" |
yihui | 0:9d5cfc5edee0 | 7 | |
yihui | 0:9d5cfc5edee0 | 8 | |
yihui | 0:9d5cfc5edee0 | 9 | ReceiverIR ir_rx(P0_4); |
yihui | 0:9d5cfc5edee0 | 10 | DigitDisplay display(P1_14, P1_13); |
yihui | 0:9d5cfc5edee0 | 11 | USBKeyboard keyboard; |
yihui | 0:9d5cfc5edee0 | 12 | BusOut led(LED1); |
yihui | 0:9d5cfc5edee0 | 13 | Ticker ledTicker; |
yihui | 0:9d5cfc5edee0 | 14 | |
yihui | 0:9d5cfc5edee0 | 15 | const uint8_t INFRARED_CODE[][4] = { |
yihui | 0:9d5cfc5edee0 | 16 | {0x00, 0xFF, 0x45, 0xBA}, // Power |
yihui | 0:9d5cfc5edee0 | 17 | {0x00, 0xFF, 0x46, 0xB9}, // Mode |
yihui | 0:9d5cfc5edee0 | 18 | {0x00, 0xFF, 0x47, 0xB8}, // Mute |
yihui | 0:9d5cfc5edee0 | 19 | {0x00, 0xFF, 0x44, 0xBB}, // Play |
yihui | 0:9d5cfc5edee0 | 20 | {0x00, 0xFF, 0x40, 0xBF}, // Prev |
yihui | 0:9d5cfc5edee0 | 21 | {0x00, 0xFF, 0x43, 0xBC}, // Next |
yihui | 0:9d5cfc5edee0 | 22 | {0x00, 0xFF, 0x07, 0xF8}, // EQ |
yihui | 0:9d5cfc5edee0 | 23 | {0x00, 0xFF, 0x15, 0xEA}, // - |
yihui | 0:9d5cfc5edee0 | 24 | {0x00, 0xFF, 0x09, 0xF6}, // + |
yihui | 0:9d5cfc5edee0 | 25 | {0x00, 0xFF, 0x16, 0xE9}, // 0 |
yihui | 0:9d5cfc5edee0 | 26 | {0x00, 0xFF, 0x19, 0xE6}, // |
yihui | 0:9d5cfc5edee0 | 27 | {0x00, 0xFF, 0x0D, 0xF2}, // U/SD |
yihui | 0:9d5cfc5edee0 | 28 | {0x00, 0xFF, 0x0C, 0xF3}, // 1 |
yihui | 0:9d5cfc5edee0 | 29 | {0x00, 0xFF, 0x18, 0xE7}, // 2 |
yihui | 0:9d5cfc5edee0 | 30 | {0x00, 0xFF, 0x5E, 0xA1}, // 3 |
yihui | 0:9d5cfc5edee0 | 31 | {0x00, 0xFF, 0x08, 0xF7}, // 4 |
yihui | 0:9d5cfc5edee0 | 32 | {0x00, 0xFF, 0x1C, 0xE3}, // 5 |
yihui | 0:9d5cfc5edee0 | 33 | {0x00, 0xFF, 0x5A, 0xA5}, // 6 |
yihui | 0:9d5cfc5edee0 | 34 | {0x00, 0xFF, 0x42, 0xBD}, // 7 |
yihui | 0:9d5cfc5edee0 | 35 | {0x00, 0xFF, 0x52, 0xAD}, // 8 |
yihui | 0:9d5cfc5edee0 | 36 | {0x00, 0xFF, 0x4A, 0xB5} // 9 |
yihui | 0:9d5cfc5edee0 | 37 | }; |
yihui | 0:9d5cfc5edee0 | 38 | |
yihui | 0:9d5cfc5edee0 | 39 | |
yihui | 0:9d5cfc5edee0 | 40 | void blink(void) { |
yihui | 0:9d5cfc5edee0 | 41 | led = !led; |
yihui | 0:9d5cfc5edee0 | 42 | } |
yihui | 0:9d5cfc5edee0 | 43 | |
yihui | 0:9d5cfc5edee0 | 44 | int main(void) { |
yihui | 0:9d5cfc5edee0 | 45 | ledTicker.attach(&blink, 0.5); |
yihui | 0:9d5cfc5edee0 | 46 | |
yihui | 0:9d5cfc5edee0 | 47 | while (1) { |
yihui | 0:9d5cfc5edee0 | 48 | uint8_t rbuffer[32] = {0, }; |
yihui | 0:9d5cfc5edee0 | 49 | int bitlength; |
yihui | 0:9d5cfc5edee0 | 50 | RemoteIR::Format format; |
yihui | 0:9d5cfc5edee0 | 51 | |
yihui | 0:9d5cfc5edee0 | 52 | memset(rbuffer, 0x00, sizeof(rbuffer)); |
yihui | 0:9d5cfc5edee0 | 53 | |
yihui | 0:9d5cfc5edee0 | 54 | while (ir_rx.getState() != ReceiverIR::Received) { |
yihui | 0:9d5cfc5edee0 | 55 | } |
yihui | 0:9d5cfc5edee0 | 56 | bitlength = ir_rx.getData(&format, rbuffer, sizeof(rbuffer) * 8); |
yihui | 0:9d5cfc5edee0 | 57 | if ((RemoteIR::NEC == format) && (32 == bitlength)) { |
yihui | 0:9d5cfc5edee0 | 58 | for (int i = 0; i < (sizeof(INFRARED_CODE) / sizeof(INFRARED_CODE[0])); i++) { |
yihui | 0:9d5cfc5edee0 | 59 | if (0 == memcmp(rbuffer, INFRARED_CODE[i], 4)) { |
yihui | 0:9d5cfc5edee0 | 60 | // No i infrared code is matched |
yihui | 0:9d5cfc5edee0 | 61 | display.write(i); |
yihui | 0:9d5cfc5edee0 | 62 | if (2 == i) { |
yihui | 0:9d5cfc5edee0 | 63 | keyboard.mediaControl(KEY_MUTE); |
yihui | 0:9d5cfc5edee0 | 64 | } else if (3 == i) { |
yihui | 0:9d5cfc5edee0 | 65 | keyboard.mediaControl(KEY_PLAY_PAUSE); |
yihui | 0:9d5cfc5edee0 | 66 | } else if (4 == i) { |
yihui | 0:9d5cfc5edee0 | 67 | keyboard.mediaControl(KEY_PREVIOUS_TRACK); |
yihui | 0:9d5cfc5edee0 | 68 | } else if (5 == i) { |
yihui | 0:9d5cfc5edee0 | 69 | keyboard.mediaControl(KEY_NEXT_TRACK); |
yihui | 0:9d5cfc5edee0 | 70 | } else if (7 == i) { |
yihui | 0:9d5cfc5edee0 | 71 | keyboard.mediaControl(KEY_VOLUME_DOWN); |
yihui | 0:9d5cfc5edee0 | 72 | } else if (8 == i) { |
yihui | 0:9d5cfc5edee0 | 73 | keyboard.mediaControl(KEY_VOLUME_UP); |
yihui | 0:9d5cfc5edee0 | 74 | } else if (12 <= i) { |
yihui | 0:9d5cfc5edee0 | 75 | keyboard.putc('1' + i - 12); |
yihui | 0:9d5cfc5edee0 | 76 | } |
yihui | 0:9d5cfc5edee0 | 77 | break; |
yihui | 0:9d5cfc5edee0 | 78 | } |
yihui | 0:9d5cfc5edee0 | 79 | } |
yihui | 0:9d5cfc5edee0 | 80 | } |
yihui | 0:9d5cfc5edee0 | 81 | } |
yihui | 0:9d5cfc5edee0 | 82 | } |