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
- Committer:
- okini3939
- Date:
- 2015-04-21
- Revision:
- 0:9edcf415fe92
File content as of revision 0:9edcf415fe92:
/* * Daisen Remote library * Copyright (c) 2015 Hiroshi Suga * Released under the MIT License: http://mbed.org/license/mit * * 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 * 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 */ #include "daisenRemote.h" daisenRemote::daisenRemote (PinName rx, enum remoteType type) : _ir(NC, rx) { _recv = 0; _count = 0; _type = type; if (_type == RF) { _ir.baud(38400); } else if (_type == IR) { _ir.baud(19200); } _ir.attach(this, &daisenRemote::isrRemote, Serial::RxIrq); } int daisenRemote::read () { int r = _recv; _recv = 0; return r; } void daisenRemote::isrRemote () { char c = _ir.getc(); if (_type == RF) { // 2.4GHz Radio if (_count == 0 && c == 0x0f) { _buf[_count] = c; _count ++; } else if (_count == 1) { if (c == 0x5a) { _buf[_count] = c; _count ++; } else { _count = 0; } } else if (_count >= 2 && _count < 19) { _buf[_count] = c; _count ++; if (_count == 19) { if (_buf[13] == 0x83 && _buf[14] == 0x41 && _buf[17] != 0xff && _buf[17] == (~_buf[18] & 0xff)) { _recv = _buf[17]; _func.call(); } _count = 0; } } else { _count = 0; } } else if (_type == IR) { // Infrared if (c == 0x0a || c == 0x0d) { if (_count == 2) { _buf[_count] = 0; _recv = atoi(_buf); _func.call(); } _count = 0; } else if (_count < 2) { if (c >= '0' && c <= '9') { _buf[_count] = c; _count ++; } else { _count = 0; } } } }