Arduinoから赤外線を送信し、送信した信号を自身で受信しモニタに表示したいです。
最終的にリモコンの変換器にしたいと考えています。
しかしながら変換できる信号とそうでない信号がありました。
LEDが点灯したことから受信はできているので、送信ができていなかったです。
原因をとりあえず赤外線LEDと仮定し、実際に送信した信号をモニタしようとしましたが、うまくいきませんでした。
IR receiverモジュールは赤く点滅するので受信しているはずなのに赤外線を受信できていなかったです。
どうすればいいでしょうか?
赤外線送信検証ソースコード
Arduino
1#include <IRremote.h> 2 3int Recvpin = 11; 4int Ledpin = 12; 5 6IRrecv irrecv(Recvpin); // create instance of 'irrecv' 7IRsend irsend; 8decode_results results; // create instance of 'decode_results' 9 10void setup() 11{ 12 Serial.begin(9600); 13 Serial.println("IR Receiver Button Decode"); 14 irrecv.enableIRIn(); // Start the receiver 15 pinMode(Ledpin, OUTPUT); 16} 17 18void loop() 19{ 20 int result = 0; 21 static unsigned long data = 0xff10ef; 22 static bool flg = 0; 23 24// digitalWrite(Ledpin, HIGH); 25 irsend.sendNEC(data, 32); //D3pin only PWM 26// digitalWrite(Ledpin, LOW); 27 delay(10); 28 29 if(irrecv.decode(&results)) 30 { 31 Serial.println("Read"); 32 result = translateIR(); 33 Serial_print(); 34 35 irrecv.resume(); 36 37 if(result == 1) 38 { 39 Serial.print('\t'); 40 Serial.println(data, HEX); 41 data++; 42 } 43 else if(result == 0) 44 { 45 Serial.println(); 46 data++; 47 } 48 else 49 { 50 Serial.println("Not NEC"); 51 } 52 flg = 0; 53 } 54 else 55 { 56 if(flg == 0) 57 { 58 Serial.println("Not Read"); 59 flg = 1; 60 } 61 } 62 if(data == 0xffea16) 63 { 64 Serial.println("\nIR_END"); 65 while(1) 66 { 67 68 } 69 } 70 71 irrecv.enableIRIn(); 72 delay(100); 73} 74 75int translateIR() 76{ 77 int data = 0; 78 79 switch(results.value) 80 { 81 case 0xFF728D: //TV電源 82 { 83 data = 1; 84 break; 85 } 86 case 0xFFEA15: //TV入力切替 87 { 88 data = 1; 89 break; 90 } 91 case 0xFFC837: //決定 92 { 93 data = 1; 94 break; 95 } 96 case 0xFFB04F: //消音 97 { 98 data = 1; 99 break; 100 } 101 case 0xFF12ED: //音量+ 102 { 103 data = 1; 104 break; 105 } 106 case 0xFF926D: //音量- 107 { 108 data = 1; 109 break; 110 } 111 case 0xFF32CD: //十字↑ 112 { 113 data = 1; 114 break; 115 } 116//変換できなかった 117///////////////////////////////////////////////////////// 118 case 0xFF8A75: //十字↓ 119 { 120 data = 1; 121 break; 122 } 123 case 0xFFBA45: //戻る 124 { 125 data = 1; 126 break; 127 } 128 case 0xFF22DD: //番組表 129 { 130 data = 1; 131 break; 132 } 133 case 0xFFA25D: //番組情報 134 { 135 data = 1; 136 break; 137 } 138 case 0xFF38C7: //字幕 139 { 140 data = 1; 141 break; 142 } 143//////////////////////////////////////////////////////// 144 case 0xFF52AD: //1 145 { 146 data = 1; 147 break; 148 } 149 case 0xFFD02F: //2 150 { 151 data = 1; 152 break; 153 } 154 case 0xFF50AF: //3 155 { 156 data = 1; 157 break; 158 } 159 case 0xFF906F: //4 160 { 161 data = 1; 162 break; 163 } 164 case 0xFF629D: //5 165 { 166 data = 1; 167 break; 168 } 169 case 0xFFE01F: //6 170 { 171 data = 1; 172 break; 173 } 174 case 0xFF609F: //7 175 { 176 data = 1; 177 break; 178 } 179 case 0xFFA05F: //8 180 { 181 data = 1; 182 break; 183 } 184 default: 185 { 186 break; 187 } 188 } 189 190 if(results.decode_type != NEC) 191 { 192 data = -1; 193 } 194 195 return data; 196} 197 198void Serial_print() 199{ 200 Serial.print(results.decode_type); 201 Serial.print('\t'); 202 Serial.print(results.value, HEX); 203 Serial.print('\t'); 204 Serial.print(results.bits); 205 Serial.print('\t'); 206} 207
赤外線変換ソースコード
Arduino
1#include <IRremote.h> 2 3int Recvpin = 11; 4int Ledpin = 12; 5 6IRrecv irrecv(Recvpin); // create instance of 'irrecv' 7IRsend irsend; 8decode_results results; // create instance of 'decode_results' 9 10void setup() 11{ 12// Serial.begin(9600); 13// Serial.println("IR Receiver Button Decode"); 14 irrecv.enableIRIn(); // Start the receiver 15 pinMode(Ledpin, OUTPUT); 16} 17 18void loop() 19{ 20 unsigned long data = 0; 21 22 if(irrecv.decode(&results)) 23 { 24 data = translateIR(); 25 irrecv.resume(); 26 27 if(data != 0) 28 { 29 digitalWrite(Ledpin, HIGH); 30 irsend.sendNEC(data, 32); //D3pin only PWM 31 irrecv.enableIRIn(); 32 digitalWrite(Ledpin, LOW); 33 } 34 } 35} 36 37unsigned long translateIR() 38{ 39 unsigned long data = 0; 40 41 switch(results.value) 42 { 43 case 0xA90: //TV電源 44 { 45 data = 0xFF728D; 46 break; 47 } 48 case 0xA50: //TV入力切替 49 { 50 data = 0xFFEA15; 51 break; 52 } 53 case 0xA70: //決定 54 { 55 data = 0xFFC837; 56 break; 57 } 58 case 0x290: //消音 59 { 60 data = 0xFFB04F; 61 break; 62 } 63 case 0x490: //音量+ 64 { 65 data = 0xFF12ED; 66 break; 67 } 68 case 0xC90: //音量- 69 { 70 data = 0xFF926D; 71 break; 72 } 73 case 0x2F0: //十字↑ 74 { 75 data = 0xFF32CD; 76 break; 77 } 78//変換できなかった 79///////////////////////////////////////////////////////// 80 case 0xAF0: //十字↓ 81 { 82 data = 0xFF8A75; 83 break; 84 } 85 case 0x62E9: //戻る 86 { 87 data = 0xFFBA45; 88 break; 89 } 90 case 0x6D25: //番組表 91 { 92 data = 0xFF22DD; 93 break; 94 } 95 case 0x34E9: //番組情報 96 { 97 data = 0xFFA25D; 98 break; 99 } 100 case 0xAE9: //字幕 101 { 102 data = 0xFF38C7; 103 break; 104 } 105///////////////////////////////////////////////////////// 106 case 0x10: //1 107 { 108 data = 0xFF52AD; 109 break; 110 } 111 case 0x810: //2 112 { 113 data = 0xFFD02F; 114 break; 115 } 116 case 0x410: //3 117 { 118 data = 0xFF50AF; 119 break; 120 } 121 case 0xC10: //4 122 { 123 data = 0xFF906F; 124 break; 125 } 126 case 0x210: //5 127 { 128 data = 0xFF629D; 129 break; 130 } 131 case 0xA10: //6 132 { 133 data = 0xFFE01F; 134 break; 135 } 136 case 0x610: //7 137 { 138 data = 0xFF609F; 139 break; 140 } 141 case 0xE10: //8 142 { 143 data = 0xFFA05F; 144 break; 145 } 146 default: 147 { 148 // break; 149 return 0; 150 } 151 } 152 153 if((results.value != 0xFFFFFFFF) && (results.decode_type != -1)) 154 { 155// Serial_print(data); 156 } 157 158 return data; 159} 160 161void Serial_print(unsigned long data) 162{ 163 Serial.print(results.decode_type); 164 Serial.print('\t'); 165 Serial.print(results.value, HEX); 166 Serial.print('\t'); 167 Serial.print(results.bits); 168 Serial.print('\t'); 169 Serial.println(data, HEX); 170}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/14 06:19
2019/07/14 06:54
2019/07/14 10:06 編集