IR
Dependencies: mbed TextLCD RemoteIR
Fork of RemoteIR_TestProgram by
main.cpp@6:ce137a1bd5a2, 2013-05-23 (annotated)
- Committer:
- MasudaToshio
- Date:
- Thu May 23 10:12:05 2013 +0000
- Revision:
- 6:ce137a1bd5a2
- Parent:
- 5:40750d5779ca
ir
Who changed what in which revision?
User | Revision | Line number | New 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 | } |