Daisen Remote library
DAISEN リモコン用ライブラリ
- ダイセン電子工業 製
Sample
リモコンの受信機(受信モジュール)とはシリアル(UART)で接続します。
#include "mbed.h" #include "daisenRemote.h" Serial pc(USBTX, USBRX); DigitalOut myled(LED1); daisenRemote remote(p10, daisenRemote::RF); // rx, type void isrRemote () { pc.printf("Recv: %d\r\n", remote.read()); } int main() { pc.baud(115200); pc.printf("*** REMOTE\r\n"); remote.attach(isrRemote); for (;;) { led1 = ! led1; wait(0.2); } }
daisenRemote.cpp@0:9edcf415fe92, 2015-04-21 (annotated)
- Committer:
- okini3939
- Date:
- Tue Apr 21 02:07:53 2015 +0000
- Revision:
- 0:9edcf415fe92
1st build
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:9edcf415fe92 | 1 | /* |
okini3939 | 0:9edcf415fe92 | 2 | * Daisen Remote library |
okini3939 | 0:9edcf415fe92 | 3 | * Copyright (c) 2015 Hiroshi Suga |
okini3939 | 0:9edcf415fe92 | 4 | * Released under the MIT License: http://mbed.org/license/mit |
okini3939 | 0:9edcf415fe92 | 5 | * |
okini3939 | 0:9edcf415fe92 | 6 | * 2.4GHz: http://www.daisendenshi.com/category_list.php?master_categories_id=102&categories_id=141&categories_name=2.4GHz%91%D1%96%B3%90%FC%83%8A%83%82%83R%83%93%91%97%90M%8A%ED |
okini3939 | 0:9edcf415fe92 | 7 | * Infrared: http://www.daisendenshi.com/category_list.php?master_categories_id=102&categories_id=106&categories_name=%90%D4%8AO%83%8A%83%82%83R%83%93%91%97%90M%8A%ED |
okini3939 | 0:9edcf415fe92 | 8 | */ |
okini3939 | 0:9edcf415fe92 | 9 | |
okini3939 | 0:9edcf415fe92 | 10 | #include "daisenRemote.h" |
okini3939 | 0:9edcf415fe92 | 11 | |
okini3939 | 0:9edcf415fe92 | 12 | daisenRemote::daisenRemote (PinName rx, enum remoteType type) : _ir(NC, rx) { |
okini3939 | 0:9edcf415fe92 | 13 | _recv = 0; |
okini3939 | 0:9edcf415fe92 | 14 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 15 | _type = type; |
okini3939 | 0:9edcf415fe92 | 16 | if (_type == RF) { |
okini3939 | 0:9edcf415fe92 | 17 | _ir.baud(38400); |
okini3939 | 0:9edcf415fe92 | 18 | } else |
okini3939 | 0:9edcf415fe92 | 19 | if (_type == IR) { |
okini3939 | 0:9edcf415fe92 | 20 | _ir.baud(19200); |
okini3939 | 0:9edcf415fe92 | 21 | } |
okini3939 | 0:9edcf415fe92 | 22 | _ir.attach(this, &daisenRemote::isrRemote, Serial::RxIrq); |
okini3939 | 0:9edcf415fe92 | 23 | } |
okini3939 | 0:9edcf415fe92 | 24 | |
okini3939 | 0:9edcf415fe92 | 25 | int daisenRemote::read () { |
okini3939 | 0:9edcf415fe92 | 26 | int r = _recv; |
okini3939 | 0:9edcf415fe92 | 27 | _recv = 0; |
okini3939 | 0:9edcf415fe92 | 28 | return r; |
okini3939 | 0:9edcf415fe92 | 29 | } |
okini3939 | 0:9edcf415fe92 | 30 | |
okini3939 | 0:9edcf415fe92 | 31 | void daisenRemote::isrRemote () { |
okini3939 | 0:9edcf415fe92 | 32 | char c = _ir.getc(); |
okini3939 | 0:9edcf415fe92 | 33 | |
okini3939 | 0:9edcf415fe92 | 34 | if (_type == RF) { |
okini3939 | 0:9edcf415fe92 | 35 | // 2.4GHz Radio |
okini3939 | 0:9edcf415fe92 | 36 | if (_count == 0 && c == 0x0f) { |
okini3939 | 0:9edcf415fe92 | 37 | _buf[_count] = c; |
okini3939 | 0:9edcf415fe92 | 38 | _count ++; |
okini3939 | 0:9edcf415fe92 | 39 | } else |
okini3939 | 0:9edcf415fe92 | 40 | if (_count == 1) { |
okini3939 | 0:9edcf415fe92 | 41 | if (c == 0x5a) { |
okini3939 | 0:9edcf415fe92 | 42 | _buf[_count] = c; |
okini3939 | 0:9edcf415fe92 | 43 | _count ++; |
okini3939 | 0:9edcf415fe92 | 44 | } else { |
okini3939 | 0:9edcf415fe92 | 45 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 46 | } |
okini3939 | 0:9edcf415fe92 | 47 | } else |
okini3939 | 0:9edcf415fe92 | 48 | if (_count >= 2 && _count < 19) { |
okini3939 | 0:9edcf415fe92 | 49 | _buf[_count] = c; |
okini3939 | 0:9edcf415fe92 | 50 | _count ++; |
okini3939 | 0:9edcf415fe92 | 51 | if (_count == 19) { |
okini3939 | 0:9edcf415fe92 | 52 | if (_buf[13] == 0x83 && _buf[14] == 0x41 && |
okini3939 | 0:9edcf415fe92 | 53 | _buf[17] != 0xff && _buf[17] == (~_buf[18] & 0xff)) { |
okini3939 | 0:9edcf415fe92 | 54 | _recv = _buf[17]; |
okini3939 | 0:9edcf415fe92 | 55 | _func.call(); |
okini3939 | 0:9edcf415fe92 | 56 | } |
okini3939 | 0:9edcf415fe92 | 57 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 58 | } |
okini3939 | 0:9edcf415fe92 | 59 | } else { |
okini3939 | 0:9edcf415fe92 | 60 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 61 | } |
okini3939 | 0:9edcf415fe92 | 62 | } else |
okini3939 | 0:9edcf415fe92 | 63 | if (_type == IR) { |
okini3939 | 0:9edcf415fe92 | 64 | // Infrared |
okini3939 | 0:9edcf415fe92 | 65 | if (c == 0x0a || c == 0x0d) { |
okini3939 | 0:9edcf415fe92 | 66 | if (_count == 2) { |
okini3939 | 0:9edcf415fe92 | 67 | _buf[_count] = 0; |
okini3939 | 0:9edcf415fe92 | 68 | _recv = atoi(_buf); |
okini3939 | 0:9edcf415fe92 | 69 | _func.call(); |
okini3939 | 0:9edcf415fe92 | 70 | } |
okini3939 | 0:9edcf415fe92 | 71 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 72 | } else |
okini3939 | 0:9edcf415fe92 | 73 | if (_count < 2) { |
okini3939 | 0:9edcf415fe92 | 74 | if (c >= '0' && c <= '9') { |
okini3939 | 0:9edcf415fe92 | 75 | _buf[_count] = c; |
okini3939 | 0:9edcf415fe92 | 76 | _count ++; |
okini3939 | 0:9edcf415fe92 | 77 | } else { |
okini3939 | 0:9edcf415fe92 | 78 | _count = 0; |
okini3939 | 0:9edcf415fe92 | 79 | } |
okini3939 | 0:9edcf415fe92 | 80 | } |
okini3939 | 0:9edcf415fe92 | 81 | } |
okini3939 | 0:9edcf415fe92 | 82 | } |