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 int ARRAY_HIGHLOW[] = { 
00007  3507, 1686, 493, 400, 469, 1242, 494, 375, 493, 375, 494, 375, 493, 399, 469, 400, 469, 399, 469, 375,
00008  494, 399, 469, 375, 493, 373, 496, 373, 495, 1268, 468, 377, 492, 399, 469, 400, 469, 373, 495, 399,
00009  469, 400, 469, 399, 469, 373, 495, 400, 469, 1268, 468, 400, 469, 399, 469, 400, 468, 374, 495, 399,
00010  469, 400, 468, 374, 495, 400, 468, 1268, 469, 400, 468, 1268, 469, 1243, 494, 1268, 468, 1268, 469, 400,
00011  468, 375, 494, 1268, 468, 400, 469, 1243, 493, 1245, 492, 1268, 469, 1268, 468, 400, 469, 1243, 493, 74551,
00012  3533, 1685, 494, 375, 493, 1268, 469, 374, 494, 400, 469, 399, 469, 399, 469, 376, 493, 372, 496, 399,
00013  469, 400, 469, 376, 492, 399, 469, 400, 469, 1267, 469, 400, 469, 399, 469, 373, 495, 400, 469, 399,
00014  469, 400, 468, 400, 469, 399, 469, 400, 468, 1268, 469, 400, 468, 376, 493, 374, 494, 400, 468, 400,
00015  468, 377, 492, 400, 468, 400, 469, 1245, 492, 399, 469, 1243, 494, 1268, 468, 1269, 468, 1268, 421, 447,
00016  469, 376, 492, 1245, 444, 425, 491, 1269, 420, 1316, 421, 1293, 491, 1269, 468, 377, 491, 1244, 445, 74608,
00017  3508, 1710, 469, 399, 469, 1268, 469, 399, 469, 399, 469, 400, 469, 399, 469, 399, 469, 400, 469, 375,
00018  493, 399, 469, 400, 469, 373, 495, 373, 495, 1268, 469, 399, 469, 400, 469, 399, 469, 400, 468, 373,
00019  496, 399, 469, 400, 468, 375, 494, 399, 469, 1268, 469, 400, 468, 400, 468, 400, 469, 400, 468, 400,
00020  468, 400, 469, 400, 468, 374, 494, 1269, 468, 400, 469, 1268, 468, 1243, 494, 1268, 469, 1268, 468, 400,
00021  469, 400, 468, 1268, 469, 376, 492, 1269, 468, 1268, 469, 1268, 468, 1244, 493, 400, 468, 1242, 495, };
00022 
00023                             
00024 DigitalIn g_digitalinButton(p20);
00025 PwmOut g_pwmoutLed(p21);
00026 
00027 void sendSignal()
00028 {
00029     g_pwmoutLed.period_us( 26 );   // 38KHz => 1/38000[s] = 26.315 * 10 ^ -6 [s] = 26.315 [us]
00030 
00031     int iCountHighLow = sizeof( ARRAY_HIGHLOW ) / sizeof( ARRAY_HIGHLOW[0] );
00032     for( int iIndexHighLow = 0; iIndexHighLow < iCountHighLow; iIndexHighLow++ )
00033     {
00034         g_pwmoutLed.write( 0.5 * (1 - (iIndexHighLow % 2)) );    // iIndexHighLow : even number -> 0.5, uneven number -> 0
00035         wait_us( ARRAY_HIGHLOW[iIndexHighLow] );
00036     }
00037 }
00038 
00039 int main()
00040 {
00041     Timer timer;
00042     timer.start();
00043     int iMilliSec_prev = timer.read_ms();
00044     int iButtonState_prev = 0;
00045     
00046     while(1)
00047     {
00048         int iButtonState = g_digitalinButton;
00049         
00050         if( 0 == iButtonState_prev
00051          && 1 == iButtonState )
00052         {
00053             int iMilliSec = timer.read_ms();
00054             if( DEBOUNCEDELAY < (iMilliSec - iMilliSec_prev) )
00055             {
00056                 sendSignal();
00057             }
00058 
00059             iMilliSec_prev = iMilliSec;
00060         }
00061 
00062         iButtonState_prev = iButtonState;
00063     }
00064 }