It can learn and transmit signals of infrared communication.

Committer:
shimotoriharuki
Date:
Mon Mar 11 06:52:42 2019 +0000
Revision:
1:ecde41301a4d
Parent:
0:2d87ed532eff
IR

Who changed what in which revision?

UserRevisionLine numberNew 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 }