回答編集履歴

1

調査結果追記

2019/07/14 09:55

投稿

thkana
thkana

スコア7647

test CHANGED
@@ -7,3 +7,93 @@
7
7
 
8
8
 
9
9
  余談ですが、スマホとかのCMOSやCCDカメラは赤外線に感度があるので、スマホのカメラで赤外線リモコン等をみると赤外線LEDが「光って」みえる、なんてのは知ってますか?
10
+
11
+
12
+
13
+ ---
14
+
15
+ 追記
16
+
17
+ IRremoteライブラリの中身を覗いてみました。
18
+
19
+ sendNEC()関数の先頭 (ir_NEC.cpp)
20
+
21
+ ```Arduino
22
+
23
+ void IRsend::sendNEC (unsigned long data, int nbits)
24
+
25
+ {
26
+
27
+ // Set IR carrier frequency
28
+
29
+ enableIROut(38);
30
+
31
+ ```
32
+
33
+ enableIROut()関数 (irSend.cpp)
34
+
35
+ ```Arduino
36
+
37
+ void IRsend::enableIROut (int khz)
38
+
39
+ {
40
+
41
+ #ifdef USE_SOFT_CARRIER
42
+
43
+ periodTime = (1000U + khz/2) / khz; // = 1000/khz + 1/2 = round(1000.0/khz)
44
+
45
+ periodOnTime = periodTime * DUTY_CYCLE / 100U - PULSE_CORRECTION;
46
+
47
+ #endif
48
+
49
+
50
+
51
+ // Disable the Timer2 Interrupt (which is used for receiving IR)
52
+
53
+ TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt
54
+
55
+ ```
56
+
57
+ enableIRIn()関数 (irRecv.cpp)
58
+
59
+ ```
60
+
61
+ void IRrecv::enableIRIn ( )
62
+
63
+ {
64
+
65
+ // Interrupt Service Routine - Fires every 50uS
66
+
67
+ cli();
68
+
69
+ // Setup pulse clock timer interrupt
70
+
71
+ // Prescale /8 (16M/8 = 0.5 microseconds per tick)
72
+
73
+ // Therefore, the timer interval can range from 0.5 to 128 microseconds
74
+
75
+ // Depending on the reset value (255 to 0)
76
+
77
+ TIMER_CONFIG_NORMAL();
78
+
79
+
80
+
81
+ // Timer2 Overflow Interrupt Enable
82
+
83
+ TIMER_ENABLE_INTR;
84
+
85
+ ```
86
+
87
+
88
+
89
+ 送信開始時にはタイマー割り込みを止めていて、
90
+
91
+ 受信許可時にはタイマー割り込みを開始しています。
92
+
93
+ これより、
94
+
95
+ IRremoteライブラリをそのまま使っている限り、自分が送信した信号を自分で拾うことは出来ない、と言ってよさそうです。
96
+
97
+
98
+
99
+ ただし、この場合出来ないのは「受信」のはずであって、「送信できない」というのが観測できる事実だとすれば一致しないですね。