赤外線リモコン

Dependencies:   mbed TextLCD RemoteIR

Fork of ir_LCD by toshio masuda

Committer:
MasudaToshio
Date:
Thu May 23 10:12:05 2013 +0000
Revision:
6:ce137a1bd5a2
Parent:
5:40750d5779ca
ir

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 2:9e3081533f70 1 #include <mbed.h>
shintamainjp 2:9e3081533f70 2
shintamainjp 2:9e3081533f70 3 #include "ReceiverIR.h"
shintamainjp 2:9e3081533f70 4 #include "TextLCD.h"
shintamainjp 2:9e3081533f70 5
MasudaToshio 6:ce137a1bd5a2 6 ReceiverIR ir_rx(p17);
shintamainjp 2:9e3081533f70 7 TextLCD lcd(p24, p26, p27, p28, p29, p30);
shintamainjp 2:9e3081533f70 8 BusOut led(LED4, LED3, LED2, LED1);
shintamainjp 2:9e3081533f70 9 Ticker ledTicker;
shintamainjp 2:9e3081533f70 10
shintamainjp 2:9e3081533f70 11 int receive(RemoteIR::Format *format, uint8_t *buf, int bufsiz, int timeout = 100) {
shintamainjp 2:9e3081533f70 12 int cnt = 0;
shintamainjp 2:9e3081533f70 13 while (ir_rx.getState() != ReceiverIR::Received) {
shintamainjp 2:9e3081533f70 14 cnt++;
shintamainjp 2:9e3081533f70 15 if (timeout < cnt) {
shintamainjp 2:9e3081533f70 16 return -1;
shintamainjp 2:9e3081533f70 17 }
shintamainjp 2:9e3081533f70 18 }
shintamainjp 2:9e3081533f70 19 return ir_rx.getData(format, buf, bufsiz * 8);
shintamainjp 2:9e3081533f70 20 }
shintamainjp 2:9e3081533f70 21
shintamainjp 2:9e3081533f70 22 void display_status(char *status, int bitlength) {
shintamainjp 2:9e3081533f70 23 lcd.locate(8, 0);
shintamainjp 2:9e3081533f70 24 lcd.printf("%-5.5s:%02d", status, bitlength);
shintamainjp 2:9e3081533f70 25 }
shintamainjp 2:9e3081533f70 26
shintamainjp 2:9e3081533f70 27 void display_format(RemoteIR::Format format) {
shintamainjp 2:9e3081533f70 28 lcd.locate(0, 0);
shintamainjp 2:9e3081533f70 29 switch (format) {
shintamainjp 2:9e3081533f70 30 case RemoteIR::UNKNOWN:
shintamainjp 2:9e3081533f70 31 lcd.printf("????????");
shintamainjp 2:9e3081533f70 32 break;
shintamainjp 2:9e3081533f70 33 case RemoteIR::NEC:
shintamainjp 2:9e3081533f70 34 lcd.printf("NEC ");
shintamainjp 2:9e3081533f70 35 break;
shintamainjp 2:9e3081533f70 36 case RemoteIR::NEC_REPEAT:
shintamainjp 2:9e3081533f70 37 lcd.printf("NEC (R)");
shintamainjp 2:9e3081533f70 38 break;
shintamainjp 2:9e3081533f70 39 case RemoteIR::AEHA:
shintamainjp 2:9e3081533f70 40 lcd.printf("AEHA ");
shintamainjp 2:9e3081533f70 41 break;
shintamainjp 2:9e3081533f70 42 case RemoteIR::AEHA_REPEAT:
shintamainjp 2:9e3081533f70 43 lcd.printf("AEHA (R)");
shintamainjp 2:9e3081533f70 44 break;
shintamainjp 2:9e3081533f70 45 case RemoteIR::SONY:
shintamainjp 2:9e3081533f70 46 lcd.printf("SONY ");
shintamainjp 2:9e3081533f70 47 break;
shintamainjp 2:9e3081533f70 48 }
shintamainjp 2:9e3081533f70 49 }
shintamainjp 2:9e3081533f70 50
shintamainjp 2:9e3081533f70 51 void display_data(uint8_t *buf, int bitlength) {
shintamainjp 2:9e3081533f70 52 lcd.locate(0, 1);
shintamainjp 2:9e3081533f70 53 const int n = bitlength / 8 + (((bitlength % 8) != 0) ? 1 : 0);
shintamainjp 2:9e3081533f70 54 for (int i = 0; i < n; i++) {
shintamainjp 2:9e3081533f70 55 lcd.printf("%02X", buf[i]);
shintamainjp 2:9e3081533f70 56 }
shintamainjp 2:9e3081533f70 57 for (int i = 0; i < 8 - n; i++) {
shintamainjp 2:9e3081533f70 58 lcd.printf("--");
shintamainjp 2:9e3081533f70 59 }
shintamainjp 2:9e3081533f70 60 }
shintamainjp 2:9e3081533f70 61
shintamainjp 2:9e3081533f70 62 void ledfunc(void) {
shintamainjp 2:9e3081533f70 63 led = led + 1;
shintamainjp 2:9e3081533f70 64 }
shintamainjp 2:9e3081533f70 65
shintamainjp 2:9e3081533f70 66 int main(void) {
shintamainjp 2:9e3081533f70 67 ledTicker.attach(&ledfunc, 0.5);
shintamainjp 2:9e3081533f70 68
shintamainjp 2:9e3081533f70 69 led = 0;
shintamainjp 2:9e3081533f70 70 lcd.cls();
shintamainjp 2:9e3081533f70 71 lcd.locate(0, 0);
shintamainjp 2:9e3081533f70 72 lcd.printf("Press a button ");
shintamainjp 2:9e3081533f70 73 lcd.locate(0, 1);
shintamainjp 2:9e3081533f70 74 lcd.printf("on a controller.");
shintamainjp 2:9e3081533f70 75
shintamainjp 2:9e3081533f70 76 while (1) {
shintamainjp 2:9e3081533f70 77 uint8_t buf1[32];
shintamainjp 2:9e3081533f70 78 uint8_t buf2[32];
shintamainjp 2:9e3081533f70 79 int bitlength1;
shintamainjp 2:9e3081533f70 80 int bitlength2;
shintamainjp 2:9e3081533f70 81 RemoteIR::Format format;
shintamainjp 2:9e3081533f70 82
shintamainjp 2:9e3081533f70 83 memset(buf1, 0x00, sizeof(buf1));
shintamainjp 2:9e3081533f70 84 memset(buf2, 0x00, sizeof(buf2));
shintamainjp 2:9e3081533f70 85
shintamainjp 2:9e3081533f70 86 {
shintamainjp 2:9e3081533f70 87 bitlength1 = receive(&format, buf1, sizeof(buf1));
shintamainjp 2:9e3081533f70 88 if (bitlength1 < 0) {
shintamainjp 2:9e3081533f70 89 continue;
shintamainjp 2:9e3081533f70 90 }
shintamainjp 2:9e3081533f70 91 display_status("RECV", bitlength1);
shintamainjp 2:9e3081533f70 92 display_data(buf1, bitlength1);
shintamainjp 2:9e3081533f70 93 display_format(format);
shintamainjp 2:9e3081533f70 94 }
shintamainjp 2:9e3081533f70 95
shintamainjp 2:9e3081533f70 96 }
shintamainjp 0:d081f6c767da 97 }