IR Sender

Dependencies:   mbed

main.cpp

Committer:
nobuki
Date:
2012-12-02
Revision:
4:5d8c016ba841
Parent:
3:da80fe137d03

File content as of revision 4:5d8c016ba841:

#include "mbed.h"

#define DEBOUNCEDELAY 500

// Turn ON/OFF the power of TV
short ARRAY_HIGHLOW[] = { 2461, 543, 1290, 514, 692, 507, 1289, 514, 692, 507, 1290, 514,  691, 507, 690, 508, 1289, 516, 717, 481,
                           690, 508, 689,  508, 692, 25634, 2487, 517, 1289, 516, 688, 510, 1289, 515, 689, 509, 1289, 518, 686, 510,
                           664, 534, 1288, 516, 691, 507, 690, 509, 689, 508, 690, 25635, 2490, 515, 1289, 515, 691, 508, 1288, 516,
                           691, 508, 1288, 515, 691, 508, 690, 507, 1291, 513, 693, 507, 689, 506, 692, 509, 689, 25635, 2490, 515,
                          1288, 516, 692, 506, 1289, 516, 691, 507, 1289, 516, 691, 506, 690, 508, 1291, 514, 691, 507, 690, 508,
                           690, 509, 689, 25616, 2508, 515, 1290, 515, 690, 508, 1289, 516, 690, 508, 1288, 516, 690, 509, 688, 509,
                          1289, 515, 689, 509, 690, 508, 690, 508, 690, 25636, 2489, 515, 1290, 517, 688, 508, 1289, 517, 689, 507,
                          1290, 516, 690, 507, 692, 506, 1289, 515, 691, 507, 692, 507, 690, 506, 692,};
                           
DigitalIn g_dpinButton(p30);
PwmOut g_pwmout(p21);

void sendSignal()
{
    g_pwmout.period_us( 26 );   // 38KHz => 1/38000[s] = 26.315 * 10 ^ -6 [s] = 26.315 [us]

    int iCountHighLow = sizeof( ARRAY_HIGHLOW ) / sizeof( ARRAY_HIGHLOW[0] );
    for( int iIndexHighLow = 0; iIndexHighLow < iCountHighLow; iIndexHighLow++ )
    {
        g_pwmout.write( 0.5 * (1 - (iIndexHighLow % 2)) );    // iIndexHighLow : even number -> 0.5, uneven number -> 0
        wait_us( ARRAY_HIGHLOW[iIndexHighLow] );
    }
}

int main()
{
    Timer timer;
    timer.start();
    int iMilliSec_prev = timer.read_ms();
    int iButtonState_prev = 0;
    
    while(1)
    {
        int iButtonState = g_dpinButton;
        
        if( 0 == iButtonState_prev
         && 1 == iButtonState )
        {
            int iMilliSec = timer.read_ms();
            if( DEBOUNCEDELAY < (iMilliSec - iMilliSec_prev) )
            {
                sendSignal();
            }

            iMilliSec_prev = iMilliSec;
        }

        iButtonState_prev = iButtonState;
    }
}