IR Sender

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 #define DEBOUNCEDELAY 500
00004 
00005 // Turn ON/OFF the power of TV
00006 short ARRAY_HIGHLOW[] = { 2461, 543, 1290, 514, 692, 507, 1289, 514, 692, 507, 1290, 514,  691, 507, 690, 508, 1289, 516, 717, 481,
00007                            690, 508, 689,  508, 692, 25634, 2487, 517, 1289, 516, 688, 510, 1289, 515, 689, 509, 1289, 518, 686, 510,
00008                            664, 534, 1288, 516, 691, 507, 690, 509, 689, 508, 690, 25635, 2490, 515, 1289, 515, 691, 508, 1288, 516,
00009                            691, 508, 1288, 515, 691, 508, 690, 507, 1291, 513, 693, 507, 689, 506, 692, 509, 689, 25635, 2490, 515,
00010                           1288, 516, 692, 506, 1289, 516, 691, 507, 1289, 516, 691, 506, 690, 508, 1291, 514, 691, 507, 690, 508,
00011                            690, 509, 689, 25616, 2508, 515, 1290, 515, 690, 508, 1289, 516, 690, 508, 1288, 516, 690, 509, 688, 509,
00012                           1289, 515, 689, 509, 690, 508, 690, 508, 690, 25636, 2489, 515, 1290, 517, 688, 508, 1289, 517, 689, 507,
00013                           1290, 516, 690, 507, 692, 506, 1289, 515, 691, 507, 692, 507, 690, 506, 692,};
00014                            
00015 DigitalIn g_dpinButton(p30);
00016 PwmOut g_pwmout(p21);
00017 
00018 void sendSignal()
00019 {
00020     g_pwmout.period_us( 26 );   // 38KHz => 1/38000[s] = 26.315 * 10 ^ -6 [s] = 26.315 [us]
00021 
00022     int iCountHighLow = sizeof( ARRAY_HIGHLOW ) / sizeof( ARRAY_HIGHLOW[0] );
00023     for( int iIndexHighLow = 0; iIndexHighLow < iCountHighLow; iIndexHighLow++ )
00024     {
00025         g_pwmout.write( 0.5 * (1 - (iIndexHighLow % 2)) );    // iIndexHighLow : even number -> 0.5, uneven number -> 0
00026         wait_us( ARRAY_HIGHLOW[iIndexHighLow] );
00027     }
00028 }
00029 
00030 int main()
00031 {
00032     Timer timer;
00033     timer.start();
00034     int iMilliSec_prev = timer.read_ms();
00035     int iButtonState_prev = 0;
00036     
00037     while(1)
00038     {
00039         int iButtonState = g_dpinButton;
00040         
00041         if( 0 == iButtonState_prev
00042          && 1 == iButtonState )
00043         {
00044             int iMilliSec = timer.read_ms();
00045             if( DEBOUNCEDELAY < (iMilliSec - iMilliSec_prev) )
00046             {
00047                 sendSignal();
00048             }
00049 
00050             iMilliSec_prev = iMilliSec;
00051         }
00052 
00053         iButtonState_prev = iButtonState;
00054     }
00055 }