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);
    }
}
Committer:
okini3939
Date:
Tue Apr 21 02:07:53 2015 +0000
Revision:
0:9edcf415fe92
1st build

Who changed what in which revision?

UserRevisionLine numberNew 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 }