Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:31c005437fa5, 2020-02-11 (annotated)
- Committer:
- gitakichi
- Date:
- Tue Feb 11 08:26:57 2020 +0000
- Revision:
- 3:31c005437fa5
- Parent:
- 2:eca0702650ca
- Child:
- 4:ab83633679f4
compared,
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gitakichi | 0:a3131d121a8f | 1 | //reference from |
gitakichi | 0:a3131d121a8f | 2 | //https://www.hiramine.com/physicalcomputing/mbed/irreceiver.html |
gitakichi | 0:a3131d121a8f | 3 | |
gitakichi | 0:a3131d121a8f | 4 | #include "mbed.h" |
gitakichi | 0:a3131d121a8f | 5 | |
gitakichi | 3:31c005437fa5 | 6 | |
gitakichi | 3:31c005437fa5 | 7 | #define OPT_PWR "000010001111011100011011111001001" |
gitakichi | 3:31c005437fa5 | 8 | #define OPT_A "000010001111011100011111111000001" |
gitakichi | 3:31c005437fa5 | 9 | #define OPT_B "000010001111011100011110111000011" |
gitakichi | 3:31c005437fa5 | 10 | #define OPT_C "000010001111011100011010111001011" |
gitakichi | 3:31c005437fa5 | 11 | #define OPT_CENTRE "000010001111011100000100111110111" |
gitakichi | 3:31c005437fa5 | 12 | #define OPT_TOP "000010001111011100000101111110101" |
gitakichi | 3:31c005437fa5 | 13 | #define OPT_UNDER "000010001111011100000000111111111" |
gitakichi | 3:31c005437fa5 | 14 | #define OPT_LEFT "000010001111011100001000111101111" |
gitakichi | 3:31c005437fa5 | 15 | #define OPT_RIGHT "000010001111011100000001111111101" |
gitakichi | 3:31c005437fa5 | 16 | |
gitakichi | 3:31c005437fa5 | 17 | |
gitakichi | 0:a3131d121a8f | 18 | DigitalIn g_dpinIrReceiver(D2); |
gitakichi | 0:a3131d121a8f | 19 | Serial g_serial(USBTX, USBRX); |
gitakichi | 0:a3131d121a8f | 20 | |
gitakichi | 0:a3131d121a8f | 21 | int main() |
gitakichi | 0:a3131d121a8f | 22 | { |
gitakichi | 0:a3131d121a8f | 23 | g_serial.baud(115200); |
gitakichi | 0:a3131d121a8f | 24 | |
gitakichi | 0:a3131d121a8f | 25 | Timer timer; |
gitakichi | 0:a3131d121a8f | 26 | timer.start(); |
gitakichi | 3:31c005437fa5 | 27 | |
gitakichi | 0:a3131d121a8f | 28 | int iState_prev = 1; |
gitakichi | 3:31c005437fa5 | 29 | int t_negedge,t_posedge,t_delta; |
gitakichi | 2:eca0702650ca | 30 | int data_en = 0; |
gitakichi | 3:31c005437fa5 | 31 | char rx_data[64] = ""; |
gitakichi | 2:eca0702650ca | 32 | |
gitakichi | 1:4847c54eed20 | 33 | while(1) { |
gitakichi | 0:a3131d121a8f | 34 | int iState = g_dpinIrReceiver; |
gitakichi | 2:eca0702650ca | 35 | |
gitakichi | 1:4847c54eed20 | 36 | //detect H signal |
gitakichi | 1:4847c54eed20 | 37 | if( iState != iState_prev ) { |
gitakichi | 1:4847c54eed20 | 38 | if(iState == 0) { |
gitakichi | 1:4847c54eed20 | 39 | //timer.start();//reset |
gitakichi | 3:31c005437fa5 | 40 | t_negedge = timer.read_us();//start(detect negedge |
gitakichi | 2:eca0702650ca | 41 | |
gitakichi | 2:eca0702650ca | 42 | if(data_en == 1) { |
gitakichi | 3:31c005437fa5 | 43 | t_delta = t_negedge - t_posedge; |
gitakichi | 2:eca0702650ca | 44 | data_en = 0; |
gitakichi | 3:31c005437fa5 | 45 | if(t_delta > 1523) strcat(rx_data, "1");//g_serial.printf("1");//625*2.5 |
gitakichi | 3:31c005437fa5 | 46 | else strcat(rx_data, "0");//g_serial.printf("0"); |
gitakichi | 3:31c005437fa5 | 47 | |
gitakichi | 3:31c005437fa5 | 48 | if(strlen(rx_data) == 33){ |
gitakichi | 3:31c005437fa5 | 49 | //g_serial.printf("data=%s\r\n",rx_data); |
gitakichi | 3:31c005437fa5 | 50 | if (strcmp(rx_data,OPT_PWR) == 0) g_serial.printf("received=PWR\r\n",rx_data); |
gitakichi | 3:31c005437fa5 | 51 | else if (strcmp(rx_data,OPT_CENTRE) == 0) g_serial.printf("received=CENTRE\r\n",rx_data); |
gitakichi | 3:31c005437fa5 | 52 | } |
gitakichi | 3:31c005437fa5 | 53 | |
gitakichi | 2:eca0702650ca | 54 | } |
gitakichi | 2:eca0702650ca | 55 | } else if(iState == 1) { //end (detect posedge |
gitakichi | 2:eca0702650ca | 56 | |
gitakichi | 2:eca0702650ca | 57 | |
gitakichi | 3:31c005437fa5 | 58 | t_posedge = timer.read_us();//over flow? |
gitakichi | 1:4847c54eed20 | 59 | //compare and output |
gitakichi | 3:31c005437fa5 | 60 | t_delta = t_posedge - t_negedge; |
gitakichi | 2:eca0702650ca | 61 | |
gitakichi | 3:31c005437fa5 | 62 | if(t_delta > 8430) { |
gitakichi | 3:31c005437fa5 | 63 | //g_serial.printf("flame,");//625*15 |
gitakichi | 3:31c005437fa5 | 64 | rx_data[0] = '\0'; |
gitakichi | 3:31c005437fa5 | 65 | } else { |
gitakichi | 2:eca0702650ca | 66 | data_en = 1; |
gitakichi | 2:eca0702650ca | 67 | //g_serial.printf("data,"); |
gitakichi | 3:31c005437fa5 | 68 | //g_serial.printf( "%d, ", t_negedge - t_posedge); |
gitakichi | 2:eca0702650ca | 69 | } |
gitakichi | 1:4847c54eed20 | 70 | } |
gitakichi | 2:eca0702650ca | 71 | } |
gitakichi | 1:4847c54eed20 | 72 | iState_prev = iState; |
gitakichi | 2:eca0702650ca | 73 | |
gitakichi | 1:4847c54eed20 | 74 | //iState_prev = iState; |
gitakichi | 1:4847c54eed20 | 75 | //int iMicroSec = timer.read_us(); |
gitakichi | 1:4847c54eed20 | 76 | //g_serial.printf( "%d, ", iMicroSec - iMicroSec_prev ); |
gitakichi | 1:4847c54eed20 | 77 | //iMicroSec_prev = iMicroSec; |
gitakichi | 0:a3131d121a8f | 78 | } |
gitakichi | 0:a3131d121a8f | 79 | } |