It can learn and transmit signals of infrared communication.
IR_Communication.cpp@0:2d87ed532eff, 2019-03-11 (annotated)
- Committer:
- shimotoriharuki
- Date:
- Mon Mar 11 06:46:13 2019 +0000
- Revision:
- 0:2d87ed532eff
IR_Communication
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shimotoriharuki | 0:2d87ed532eff | 1 | #include "mbed.h" |
shimotoriharuki | 0:2d87ed532eff | 2 | #include "IR_Communication.h" |
shimotoriharuki | 0:2d87ed532eff | 3 | |
shimotoriharuki | 0:2d87ed532eff | 4 | IR_Comm::IR_Comm(PinName in, PinName out, const int data_size):IR_in(in), IR_LED(out) ,size(data_size) { |
shimotoriharuki | 0:2d87ed532eff | 5 | IR_LED.period(0.000026315); //38KHz |
shimotoriharuki | 0:2d87ed532eff | 6 | |
shimotoriharuki | 0:2d87ed532eff | 7 | //reference https://os.mbed.com/questions/75943/Deprecated-method-mbedInterruptInfall/ |
shimotoriharuki | 0:2d87ed532eff | 8 | IR_in.rise(callback (this, &IR_Comm::ir_rise)); |
shimotoriharuki | 0:2d87ed532eff | 9 | IR_in.fall(callback (this, &IR_Comm::ir_fall)); |
shimotoriharuki | 0:2d87ed532eff | 10 | timer.start(); |
shimotoriharuki | 0:2d87ed532eff | 11 | } |
shimotoriharuki | 0:2d87ed532eff | 12 | |
shimotoriharuki | 0:2d87ed532eff | 13 | void IR_Comm::receive_start(){ |
shimotoriharuki | 0:2d87ed532eff | 14 | receive_flag = 1; |
shimotoriharuki | 0:2d87ed532eff | 15 | timer.reset(); |
shimotoriharuki | 0:2d87ed532eff | 16 | i = 0; |
shimotoriharuki | 0:2d87ed532eff | 17 | } |
shimotoriharuki | 0:2d87ed532eff | 18 | |
shimotoriharuki | 0:2d87ed532eff | 19 | void IR_Comm::receive_stop(){ |
shimotoriharuki | 0:2d87ed532eff | 20 | receive_flag = 0; |
shimotoriharuki | 0:2d87ed532eff | 21 | i = 0; |
shimotoriharuki | 0:2d87ed532eff | 22 | } |
shimotoriharuki | 0:2d87ed532eff | 23 | |
shimotoriharuki | 0:2d87ed532eff | 24 | void IR_Comm::IR_send(int *data){ |
shimotoriharuki | 0:2d87ed532eff | 25 | for (i = 1; i < size; i++){ |
shimotoriharuki | 0:2d87ed532eff | 26 | timer.reset(); |
shimotoriharuki | 0:2d87ed532eff | 27 | if(i % 2 != 0){ //奇数番 |
shimotoriharuki | 0:2d87ed532eff | 28 | while(timer.read_us() <= data[i]) IR_LED = IR_ON; |
shimotoriharuki | 0:2d87ed532eff | 29 | } |
shimotoriharuki | 0:2d87ed532eff | 30 | else{ |
shimotoriharuki | 0:2d87ed532eff | 31 | while(timer.read_us() <= data[i]) IR_LED = IR_OFF; |
shimotoriharuki | 0:2d87ed532eff | 32 | } |
shimotoriharuki | 0:2d87ed532eff | 33 | |
shimotoriharuki | 0:2d87ed532eff | 34 | } |
shimotoriharuki | 0:2d87ed532eff | 35 | i = 0; |
shimotoriharuki | 0:2d87ed532eff | 36 | IR_LED = IR_OFF; |
shimotoriharuki | 0:2d87ed532eff | 37 | } |
shimotoriharuki | 0:2d87ed532eff | 38 | |
shimotoriharuki | 0:2d87ed532eff | 39 | void IR_Comm::ir_rise(void){ |
shimotoriharuki | 0:2d87ed532eff | 40 | if(receive_flag == 1){ |
shimotoriharuki | 0:2d87ed532eff | 41 | temp_data[i] = timer.read_us(); |
shimotoriharuki | 0:2d87ed532eff | 42 | timer.reset(); |
shimotoriharuki | 0:2d87ed532eff | 43 | i++; |
shimotoriharuki | 0:2d87ed532eff | 44 | if(i > size) i = size; |
shimotoriharuki | 0:2d87ed532eff | 45 | } |
shimotoriharuki | 0:2d87ed532eff | 46 | } |
shimotoriharuki | 0:2d87ed532eff | 47 | |
shimotoriharuki | 0:2d87ed532eff | 48 | void IR_Comm::ir_fall(void){ |
shimotoriharuki | 0:2d87ed532eff | 49 | if(receive_flag == 1){ |
shimotoriharuki | 0:2d87ed532eff | 50 | temp_data[i] = timer.read_us(); |
shimotoriharuki | 0:2d87ed532eff | 51 | timer.reset(); |
shimotoriharuki | 0:2d87ed532eff | 52 | i++; |
shimotoriharuki | 0:2d87ed532eff | 53 | if(i > size) i = size; |
shimotoriharuki | 0:2d87ed532eff | 54 | } |
shimotoriharuki | 0:2d87ed532eff | 55 | } |
shimotoriharuki | 0:2d87ed532eff | 56 | |
shimotoriharuki | 0:2d87ed532eff | 57 | void IR_Comm::IR_data_reset(int *data){ |
shimotoriharuki | 0:2d87ed532eff | 58 | for (i = 0; i < size; i++){ |
shimotoriharuki | 0:2d87ed532eff | 59 | data[i] = 0; |
shimotoriharuki | 0:2d87ed532eff | 60 | temp_data[i] = 0; |
shimotoriharuki | 0:2d87ed532eff | 61 | } |
shimotoriharuki | 0:2d87ed532eff | 62 | i = 0; |
shimotoriharuki | 0:2d87ed532eff | 63 | } |
shimotoriharuki | 0:2d87ed532eff | 64 | |
shimotoriharuki | 0:2d87ed532eff | 65 | void IR_Comm::get_data(int *data){ |
shimotoriharuki | 0:2d87ed532eff | 66 | for (i = 0; i < size; i++){ |
shimotoriharuki | 0:2d87ed532eff | 67 | data[i] = temp_data[i]; |
shimotoriharuki | 0:2d87ed532eff | 68 | } |
shimotoriharuki | 0:2d87ed532eff | 69 | i = 0; |
shimotoriharuki | 0:2d87ed532eff | 70 | } |