Arch + Grove - Infrared Receiver + Infrared Remote Control = Wireless Keyboard

Dependencies:   DigitDisplay RemoteIR USBDevice mbed

Committer:
yihui
Date:
Tue Aug 26 14:22:26 2014 +0000
Revision:
0:9d5cfc5edee0
initial

Who changed what in which revision?

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