Gitakichi Tokyo / Mbed 2 deprecated IR-remote

Dependencies:   mbed

Committer:
gitakichi
Date:
Wed Feb 12 04:54:34 2020 +0000
Revision:
5:5bf6cd9dffb7
Parent:
4:ab83633679f4
Child:
6:9a905505f955
can study remote

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 4:ab83633679f4 9 //maybe 0000100011110111 is customer code
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 5:5bf6cd9dffb7 27 int IR_transmitte(char tx_data[64])
gitakichi 5:5bf6cd9dffb7 28 {
gitakichi 5:5bf6cd9dffb7 29 //flame
gitakichi 5:5bf6cd9dffb7 30 //H
gitakichi 5:5bf6cd9dffb7 31 int t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 32 ir_out = 1;
gitakichi 5:5bf6cd9dffb7 33 while( timer.read_us() - t_start < 625*16 );//16T
gitakichi 5:5bf6cd9dffb7 34 //L
gitakichi 5:5bf6cd9dffb7 35 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 36 ir_out = 0;
gitakichi 5:5bf6cd9dffb7 37 while( timer.read_us() - t_start < 625*8 );//8T
gitakichi 5:5bf6cd9dffb7 38
gitakichi 5:5bf6cd9dffb7 39 //data
gitakichi 5:5bf6cd9dffb7 40 for(int i=0; tx_data[i] != '\0'; i++ ) {
gitakichi 5:5bf6cd9dffb7 41 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 42 while( timer.read_us() - t_start < 625 ) ir_out = 1;
gitakichi 5:5bf6cd9dffb7 43 t_start = timer.read_us();
gitakichi 5:5bf6cd9dffb7 44 ir_out = 0;
gitakichi 5:5bf6cd9dffb7 45 if( tx_data[i] == '1') {
gitakichi 5:5bf6cd9dffb7 46 while( timer.read_us() - t_start < 625 );//1T
gitakichi 5:5bf6cd9dffb7 47 } else {
gitakichi 5:5bf6cd9dffb7 48 while( timer.read_us() - t_start < 625*3 );//3T
gitakichi 5:5bf6cd9dffb7 49 }
gitakichi 5:5bf6cd9dffb7 50 }
gitakichi 5:5bf6cd9dffb7 51 return 0;
gitakichi 5:5bf6cd9dffb7 52 }
gitakichi 0:a3131d121a8f 53
gitakichi 0:a3131d121a8f 54 int main()
gitakichi 0:a3131d121a8f 55 {
gitakichi 4:ab83633679f4 56 int iState_prev = 1;
gitakichi 4:ab83633679f4 57 int t_negedge,t_posedge,t_delta,tx_delay;
gitakichi 4:ab83633679f4 58 int data_en = 0;
gitakichi 4:ab83633679f4 59 char rx_data[64] = "";
gitakichi 5:5bf6cd9dffb7 60 char tx_data[64] = "";
gitakichi 4:ab83633679f4 61 int busy = 0;
gitakichi 4:ab83633679f4 62
gitakichi 0:a3131d121a8f 63 g_serial.baud(115200);
gitakichi 0:a3131d121a8f 64 timer.start();
gitakichi 3:31c005437fa5 65
gitakichi 1:4847c54eed20 66 while(1) {
gitakichi 4:ab83633679f4 67 if(busy == 1) {
gitakichi 5:5bf6cd9dffb7 68 myled = 1;
gitakichi 5:5bf6cd9dffb7 69 for(int i=0; i<tx_delay; i++) {
gitakichi 4:ab83633679f4 70 wait_ms(1000);
gitakichi 4:ab83633679f4 71 }
gitakichi 4:ab83633679f4 72 //tx IR
gitakichi 5:5bf6cd9dffb7 73 IR_transmitte(tx_data);
gitakichi 4:ab83633679f4 74 myled = 0;
gitakichi 4:ab83633679f4 75 busy = 0;
gitakichi 4:ab83633679f4 76 } else {
gitakichi 4:ab83633679f4 77 int iState = g_dpinIrReceiver;
gitakichi 4:ab83633679f4 78 //detect H signal
gitakichi 4:ab83633679f4 79 if( iState != iState_prev ) {
gitakichi 4:ab83633679f4 80 if(iState == 0) {
gitakichi 4:ab83633679f4 81 //timer.start();//reset
gitakichi 4:ab83633679f4 82 t_negedge = timer.read_us();//start(detect negedge
gitakichi 2:eca0702650ca 83
gitakichi 4:ab83633679f4 84 if(data_en == 1) {
gitakichi 4:ab83633679f4 85 t_delta = t_negedge - t_posedge;
gitakichi 4:ab83633679f4 86 data_en = 0;
gitakichi 4:ab83633679f4 87 if(t_delta > 1523) strcat(rx_data, "1");//625*2.5
gitakichi 4:ab83633679f4 88 else strcat(rx_data, "0");
gitakichi 3:31c005437fa5 89
gitakichi 4:ab83633679f4 90 if(strlen(rx_data) == 33) {
gitakichi 4:ab83633679f4 91 busy = 1;
gitakichi 4:ab83633679f4 92 g_serial.printf("received=");
gitakichi 4:ab83633679f4 93 if (strcmp(rx_data,OPT_PWR) == 0) {
gitakichi 4:ab83633679f4 94 g_serial.printf("PWR");
gitakichi 5:5bf6cd9dffb7 95 tx_delay = 5;
gitakichi 4:ab83633679f4 96 //tx_data = CHANGHONG_23;
gitakichi 5:5bf6cd9dffb7 97 strcmp(tx_data,OPT_PWR);
gitakichi 4:ab83633679f4 98 } else if (strcmp(rx_data,OPT_A) == 0) g_serial.printf("A");
gitakichi 4:ab83633679f4 99 else if (strcmp(rx_data,OPT_B) == 0) g_serial.printf("B");
gitakichi 4:ab83633679f4 100 else if (strcmp(rx_data,OPT_C) == 0) g_serial.printf("C");
gitakichi 4:ab83633679f4 101 else if (strcmp(rx_data,OPT_CENTRE) == 0) g_serial.printf("CENTRE");
gitakichi 4:ab83633679f4 102 else if (strcmp(rx_data,OPT_TOP) == 0) g_serial.printf("TOP");
gitakichi 4:ab83633679f4 103 else if (strcmp(rx_data,OPT_UNDER) == 0) g_serial.printf("UNDER");
gitakichi 4:ab83633679f4 104 else if (strcmp(rx_data,OPT_LEFT) == 0) g_serial.printf("LEFT");
gitakichi 4:ab83633679f4 105 else if (strcmp(rx_data,OPT_RIGHT) == 0) g_serial.printf("RIGHT");
gitakichi 4:ab83633679f4 106 g_serial.printf("\r\n");
gitakichi 4:ab83633679f4 107 }
gitakichi 3:31c005437fa5 108 }
gitakichi 4:ab83633679f4 109 } else if(iState == 1) { //end (detect posedge
gitakichi 4:ab83633679f4 110 t_posedge = timer.read_us();
gitakichi 4:ab83633679f4 111 //compare and output
gitakichi 4:ab83633679f4 112 t_delta = t_posedge - t_negedge;
gitakichi 2:eca0702650ca 113
gitakichi 4:ab83633679f4 114 if(t_delta > 8430) {//625*15, flame
gitakichi 4:ab83633679f4 115 rx_data[0] = '\0';
gitakichi 4:ab83633679f4 116 } else data_en = 1;
gitakichi 2:eca0702650ca 117 }
gitakichi 1:4847c54eed20 118 }
gitakichi 4:ab83633679f4 119 iState_prev = iState;
gitakichi 2:eca0702650ca 120 }
gitakichi 0:a3131d121a8f 121 }
gitakichi 0:a3131d121a8f 122 }