Gitakichi Tokyo / Mbed 2 deprecated IR-remote

Dependencies:   mbed

main.cpp

Committer:
gitakichi
Date:
2020-02-11
Revision:
3:31c005437fa5
Parent:
2:eca0702650ca
Child:
4:ab83633679f4

File content as of revision 3:31c005437fa5:

//reference from
//https://www.hiramine.com/physicalcomputing/mbed/irreceiver.html

#include "mbed.h"


#define OPT_PWR     "000010001111011100011011111001001"
#define OPT_A       "000010001111011100011111111000001"
#define OPT_B       "000010001111011100011110111000011"
#define OPT_C       "000010001111011100011010111001011"
#define OPT_CENTRE  "000010001111011100000100111110111"
#define OPT_TOP     "000010001111011100000101111110101"
#define OPT_UNDER   "000010001111011100000000111111111"
#define OPT_LEFT    "000010001111011100001000111101111"
#define OPT_RIGHT   "000010001111011100000001111111101"


DigitalIn g_dpinIrReceiver(D2);
Serial g_serial(USBTX, USBRX);

int main()
{
    g_serial.baud(115200);

    Timer timer;
    timer.start();

    int iState_prev = 1;
    int t_negedge,t_posedge,t_delta;
    int data_en = 0;
    char rx_data[64] = "";

    while(1) {
        int iState = g_dpinIrReceiver;

        //detect H signal
        if( iState != iState_prev ) {
            if(iState == 0) {
                //timer.start();//reset
                t_negedge = timer.read_us();//start(detect negedge

                if(data_en == 1) {
                    t_delta = t_negedge - t_posedge;
                    data_en = 0;
                    if(t_delta > 1523)    strcat(rx_data, "1");//g_serial.printf("1");//625*2.5
                    else                  strcat(rx_data, "0");//g_serial.printf("0");

                    if(strlen(rx_data) == 33){
                        //g_serial.printf("data=%s\r\n",rx_data);
                        if      (strcmp(rx_data,OPT_PWR) == 0)      g_serial.printf("received=PWR\r\n",rx_data);
                        else if (strcmp(rx_data,OPT_CENTRE) == 0)   g_serial.printf("received=CENTRE\r\n",rx_data);
                    }

                }
            } else if(iState == 1) { //end (detect posedge


                t_posedge = timer.read_us();//over flow?
                //compare and output
                t_delta = t_posedge - t_negedge;

                if(t_delta > 8430) {
                    //g_serial.printf("flame,");//625*15
                    rx_data[0] = '\0';
                } else {
                    data_en = 1;
                    //g_serial.printf("data,");
                    //g_serial.printf( "%d, ", t_negedge - t_posedge);
                }
            }
        }
        iState_prev = iState;

        //iState_prev = iState;
        //int iMicroSec = timer.read_us();
        //g_serial.printf( "%d, ", iMicroSec - iMicroSec_prev );
        //iMicroSec_prev = iMicroSec;
    }
}