Gitakichi Tokyo / Mbed 2 deprecated IR-remote

Dependencies:   mbed

Committer:
gitakichi
Date:
Wed Feb 12 10:33:39 2020 +0000
Revision:
6:9a905505f955
Parent:
5:5bf6cd9dffb7
Child:
7:47e8eccc7a01
look error in mbed os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gitakichi 0:a3131d121a8f 1 //reference from
gitakichi 0:a3131d121a8f 2 //https://www.hiramine.com/physicalcomputing/mbed/irreceiver.html
gitakichi 4:ab83633679f4 3 //http://elm-chan.org/docs/ir_format.html
gitakichi 0:a3131d121a8f 4 #include "mbed.h"
gitakichi 0:a3131d121a8f 5
gitakichi 4:ab83633679f4 6 //compatible
gitakichi 4:ab83633679f4 7 //http://akizukidenshi.com/catalog/g/gM-07245/
gitakichi 3:31c005437fa5 8
gitakichi 6:9a905505f955 9 //{customer code 16bit,data 8bit data_n 8bit,none 1bit}
gitakichi 3:31c005437fa5 10 #define OPT_PWR "000010001111011100011011111001001"
gitakichi 3:31c005437fa5 11 #define OPT_A "000010001111011100011111111000001"
gitakichi 3:31c005437fa5 12 #define OPT_B "000010001111011100011110111000011"
gitakichi 3:31c005437fa5 13 #define OPT_C "000010001111011100011010111001011"
gitakichi 3:31c005437fa5 14 #define OPT_CENTRE "000010001111011100000100111110111"
gitakichi 3:31c005437fa5 15 #define OPT_TOP "000010001111011100000101111110101"
gitakichi 3:31c005437fa5 16 #define OPT_UNDER "000010001111011100000000111111111"
gitakichi 3:31c005437fa5 17 #define OPT_LEFT "000010001111011100001000111101111"
gitakichi 3:31c005437fa5 18 #define OPT_RIGHT "000010001111011100000001111111101"
gitakichi 3:31c005437fa5 19
gitakichi 0:a3131d121a8f 20 DigitalIn g_dpinIrReceiver(D2);
gitakichi 0:a3131d121a8f 21 Serial g_serial(USBTX, USBRX);
gitakichi 4:ab83633679f4 22 DigitalOut myled(LED1);
gitakichi 5:5bf6cd9dffb7 23 DigitalOut ir_out(D3);
gitakichi 5:5bf6cd9dffb7 24
gitakichi 5:5bf6cd9dffb7 25 Timer timer;
gitakichi 5:5bf6cd9dffb7 26
gitakichi 6:9a905505f955 27 int IR_transmitte(char tx_data[])
gitakichi 5:5bf6cd9dffb7 28 {
gitakichi 5:5bf6cd9dffb7 29 //flame
gitakichi 5:5bf6cd9dffb7 30 int t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 31 ir_out = 1;
gitakichi 5:5bf6cd9dffb7 32 while( timer.read_us() - t_start < 625*16 );//16T
gitakichi 5:5bf6cd9dffb7 33 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 34 ir_out = 0;
gitakichi 5:5bf6cd9dffb7 35 while( timer.read_us() - t_start < 625*8 );//8T
gitakichi 5:5bf6cd9dffb7 36
gitakichi 5:5bf6cd9dffb7 37 //data
gitakichi 5:5bf6cd9dffb7 38 for(int i=0; tx_data[i] != '\0'; i++ ) {
gitakichi 5:5bf6cd9dffb7 39 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 40 while( timer.read_us() - t_start < 625 ) ir_out = 1;
gitakichi 5:5bf6cd9dffb7 41 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 42 ir_out = 0;
gitakichi 5:5bf6cd9dffb7 43 if( tx_data[i] == '1') {
gitakichi 5:5bf6cd9dffb7 44 while( timer.read_us() - t_start < 625 );//1T
gitakichi 5:5bf6cd9dffb7 45 } else {
gitakichi 5:5bf6cd9dffb7 46 while( timer.read_us() - t_start < 625*3 );//3T
gitakichi 5:5bf6cd9dffb7 47 }
gitakichi 5:5bf6cd9dffb7 48 }
gitakichi 5:5bf6cd9dffb7 49 return 0;
gitakichi 5:5bf6cd9dffb7 50 }
gitakichi 0:a3131d121a8f 51
gitakichi 6:9a905505f955 52 int IR_receive(char rx_data[])
gitakichi 0:a3131d121a8f 53 {
gitakichi 4:ab83633679f4 54 int iState_prev = 1;
gitakichi 6:9a905505f955 55 int data_en,t_negedge,t_posedge,t_delta;
gitakichi 6:9a905505f955 56 int busy = 0;
gitakichi 6:9a905505f955 57
gitakichi 6:9a905505f955 58 while(busy == 0) {
gitakichi 6:9a905505f955 59 int iState = g_dpinIrReceiver;
gitakichi 6:9a905505f955 60
gitakichi 6:9a905505f955 61 if(iState_prev == 1 && iState == 0) {//detect negedge
gitakichi 6:9a905505f955 62 t_negedge = timer.read_us();//start(detect negedge
gitakichi 6:9a905505f955 63
gitakichi 6:9a905505f955 64 if(data_en == 1) {
gitakichi 6:9a905505f955 65 t_delta = t_negedge - t_posedge;
gitakichi 6:9a905505f955 66 data_en = 0;
gitakichi 6:9a905505f955 67 if(t_delta > 1750) strcat(rx_data, "1");//625*2.8
gitakichi 6:9a905505f955 68 else strcat(rx_data, "0");
gitakichi 6:9a905505f955 69
gitakichi 6:9a905505f955 70 if(strlen(rx_data) == 33) busy = 1;
gitakichi 6:9a905505f955 71 }
gitakichi 6:9a905505f955 72 } else if(iState_prev == 0 && iState == 1) {//detect posedge
gitakichi 6:9a905505f955 73 t_posedge = timer.read_us();
gitakichi 6:9a905505f955 74 t_delta = t_posedge - t_negedge;//compare and output
gitakichi 6:9a905505f955 75 if(t_delta > 9875) rx_data[0] = '0';//625*15.8, flame
gitakichi 6:9a905505f955 76 else data_en = 1;
gitakichi 6:9a905505f955 77 }
gitakichi 6:9a905505f955 78 iState_prev = iState;
gitakichi 6:9a905505f955 79 }
gitakichi 6:9a905505f955 80 return busy;
gitakichi 6:9a905505f955 81 }
gitakichi 6:9a905505f955 82
gitakichi 6:9a905505f955 83 int main()
gitakichi 6:9a905505f955 84 {
gitakichi 4:ab83633679f4 85 char rx_data[64] = "";
gitakichi 5:5bf6cd9dffb7 86 char tx_data[64] = "";
gitakichi 4:ab83633679f4 87 int busy = 0;
gitakichi 6:9a905505f955 88 int tx_delay;
gitakichi 4:ab83633679f4 89
gitakichi 0:a3131d121a8f 90 g_serial.baud(115200);
gitakichi 0:a3131d121a8f 91 timer.start();
gitakichi 3:31c005437fa5 92
gitakichi 1:4847c54eed20 93 while(1) {
gitakichi 4:ab83633679f4 94 if(busy == 1) {
gitakichi 5:5bf6cd9dffb7 95 myled = 1;
gitakichi 5:5bf6cd9dffb7 96 for(int i=0; i<tx_delay; i++) {
gitakichi 4:ab83633679f4 97 wait_ms(1000);
gitakichi 4:ab83633679f4 98 }
gitakichi 4:ab83633679f4 99 //tx IR
gitakichi 6:9a905505f955 100 if(tx_data[0] != '\0') IR_transmitte(tx_data);
gitakichi 4:ab83633679f4 101 myled = 0;
gitakichi 4:ab83633679f4 102 busy = 0;
gitakichi 4:ab83633679f4 103 } else {
gitakichi 6:9a905505f955 104 busy = IR_receive(rx_data);
gitakichi 6:9a905505f955 105 if(busy == 1) {
gitakichi 6:9a905505f955 106 if (strcmp(rx_data,OPT_PWR) == 0) {
gitakichi 6:9a905505f955 107 g_serial.printf("received=PWR\r\n");
gitakichi 6:9a905505f955 108 tx_delay = 5;
gitakichi 6:9a905505f955 109 tx_data[0] = '\0';
gitakichi 6:9a905505f955 110 strcmp(tx_data,OPT_PWR);
gitakichi 6:9a905505f955 111 } else {
gitakichi 6:9a905505f955 112 tx_delay = 0;
gitakichi 6:9a905505f955 113 tx_data[0] = '\0';
gitakichi 2:eca0702650ca 114 }
gitakichi 1:4847c54eed20 115 }
gitakichi 2:eca0702650ca 116 }
gitakichi 0:a3131d121a8f 117 }
gitakichi 0:a3131d121a8f 118 }