Infrared keybaord
Infrared remote control is widely used in home devices. In this program, we use Arch board and Grove - Infrared Receiver as a USB keyboard to detect Infrared signal from Infrared remote control.
Hardware¶
- Arch Board
- Grove - Infrared Receiver
- Infrared Remote Control
- Grove - 4 Digit Display (optional)
Software¶
Import the following code to mbed online compiler
#include <string.h> #include "mbed.h" #include "ReceiverIR.h" #include "DigitDisplay.h" #include "USBKeyboard.h" ReceiverIR ir_rx(P0_4); DigitDisplay display(P1_14, P1_13); USBKeyboard keyboard; BusOut led(LED1); Ticker ledTicker; const uint8_t INFRARED_CODE[][4] = { {0x00, 0xFF, 0x45, 0xBA}, // Power {0x00, 0xFF, 0x46, 0xB9}, // Mode {0x00, 0xFF, 0x47, 0xB8}, // Mute {0x00, 0xFF, 0x44, 0xBB}, // Play {0x00, 0xFF, 0x40, 0xBF}, // Prev {0x00, 0xFF, 0x43, 0xBC}, // Next {0x00, 0xFF, 0x07, 0xF8}, // EQ {0x00, 0xFF, 0x15, 0xEA}, // - {0x00, 0xFF, 0x09, 0xF6}, // + {0x00, 0xFF, 0x16, 0xE9}, // 0 {0x00, 0xFF, 0x19, 0xE6}, // {0x00, 0xFF, 0x0D, 0xF2}, // U/SD {0x00, 0xFF, 0x0C, 0xF3}, // 1 {0x00, 0xFF, 0x18, 0xE7}, // 2 {0x00, 0xFF, 0x5E, 0xA1}, // 3 {0x00, 0xFF, 0x08, 0xF7}, // 4 {0x00, 0xFF, 0x1C, 0xE3}, // 5 {0x00, 0xFF, 0x5A, 0xA5}, // 6 {0x00, 0xFF, 0x42, 0xBD}, // 7 {0x00, 0xFF, 0x52, 0xAD}, // 8 {0x00, 0xFF, 0x4A, 0xB5} // 9 }; void blink(void) { led = !led; } int main(void) { ledTicker.attach(&blink, 0.5); while (1) { uint8_t rbuffer[32] = {0, }; int bitlength; RemoteIR::Format format; memset(rbuffer, 0x00, sizeof(rbuffer)); while (ir_rx.getState() != ReceiverIR::Received) { } bitlength = ir_rx.getData(&format, rbuffer, sizeof(rbuffer) * 8); if ((RemoteIR::NEC == format) && (32 == bitlength)) { for (int i = 0; i < (sizeof(INFRARED_CODE) / sizeof(INFRARED_CODE[0])); i++) { if (0 == memcmp(rbuffer, INFRARED_CODE[i], 4)) { // No i infrared code is matched display.write(i); if (2 == i) { keyboard.mediaControl(KEY_MUTE); } else if (3 == i) { keyboard.mediaControl(KEY_PLAY_PAUSE); } else if (4 == i) { keyboard.mediaControl(KEY_PREVIOUS_TRACK); } else if (5 == i) { keyboard.mediaControl(KEY_NEXT_TRACK); } else if (7 == i) { keyboard.mediaControl(KEY_VOLUME_DOWN); } else if (8 == i) { keyboard.mediaControl(KEY_VOLUME_UP); } else if (12 <= i) { keyboard.putc('1' + i - 12); } break; } } } } }