電子工作 21 - 赤外線リモートコントロール事始2 –
調光器をコントロール
概要
前の電子工作 20で作製した送・受信装置やプログラムを、ずっと以前に作成した電子工作
1の“調光器を赤外線リモコンでモータ駆動する回路”と組合わせてみることにした。はたして、実用になるのか、試してみようというものである。
回路
送信側:
入力スイッチは、SW1 と SW2 の2個にし、SW1を押すと、調光器のAC出力が低下し、SW2を押すと、調光器のAC出力が上昇するという単純なものである。電源はパワーが出る4.5Vにした。右側の写真は製作した送信装置である。下の白いのが電源スイッチ、その上方にSW1とSW2が見える。左手の透明な2ピンのLED風のものが、赤外線LEDである。そして、基板全体が電池ボックスの上に乗っている。
受信側:
図から分かる様に、調光器を制御するために、12F629から出ている2本のI/Oピン(GP0とGP1)を使っている。ノイズの影響を考えて、フォトリレー2個を使って、モーター駆動の電源を別にした(単三2本)。モーターの回転方向の変換は、2連のメカニカルリレーを使って行っている。このモーターは、調光器の外に取り出した250KWのボリュームを機械的に正転・逆転させ、調光器のAC出力を変える。右手の写真が受信側の全体図である。2個の白いものがフォトリレー、その脇にあるのがメカニカルリレー、5V電源もここで作り出している。右手の穴あきアルミ板に乗っているのが、モーターの回転を落とし、模型自動車用のゴムタイヤ(直径25mm)を回転させるためのギアーボックス(タミヤUniversal Gearbox No.103)である。このゴムタイヤがボリュームに装着されたアルミ製の溝付きノブを回す。ゴムタイヤとノブ間の接触は簡単にスリップするように調節した。
プログラム
送信プログラム
SW1を押すと、100ms の中に変調された8−9本のパルスが入った信号を送り続け、SW2を押すと、100ms の中に変調された12−13本のパルスが入った信号を送り続ける。これが送信側の基本動作である。
'FanTrpr.bas 2007.6.20 This works together with FanRcpr.bas.
'************** Pin connection **********************
'12F629, 4MHz Internal Clock used
'Pin 1: Vdd (5.0V)
'Pin 8: Vss (GND)
'Pin 6: GPIO.1: input - connected to SW1 lowering brightness (brtness)
'Pin 5: GPIO.2: input - connected to SW2 Increasing brightness
'Pin 3: GPIO.4: output - connected to IR LED via 100 ohm resistor
'*********** Main body of program ******************
CMCON=7 'Comparator not used
TRISIO=%000110 'GPIO.1 and GPIO.2 = Input, others = Output
GPIO=0 'ALL LOW
OPTION_REG.7=0 'Pull-up for GPIO.1 and GPIO.2
WPU=%000111
DEFINE OSCCAL_1K 1 'Set OSCCAL for 1K device
X var byte
SW1 var GPIO.1
SW2 var GPIO.2
X = 0
START:
SWFIND: 'Key search routine
If SW1=0 Then CHANNEL1 'lowering brtness
If SW2=0 Then CHANNEL2 'increasing brtness
Goto SWFIND
CHANNEL1:
High GPIO.4
High GPIO.4
Low GPIO.4
X=X+1
IF X > 66 Then SPACE1 '66 = 1.8 ms-long modulated-wave length
Goto START
SPACE1:
X=0
Pause 10 '10 ms
Goto START
CHANNEL2:
High GPIO.4
@Nop
Low GPIO.4
X=X+1
IF X > 45 Then SPACE2 '45 = 1.2 ms-long modulated-wave length
Goto START
SPACE2:
X=0
Pause 7 '7 ms as space
Goto START
'********** End of program ***************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Internal ; BODEN - Enable; CD - Disable; CDP - Disable
受信プログラム
送信側から送られてくるSW1とSW2の信号を区別し、SW1ならGP0をHighにして、モーターを調光器からのAC出力が低下する方向に回転させ、SW2ならGP1をHighにして、モーターを逆転させ調光器からのAC出力が増加する方向に回転させる。いずれかのSWを押している間は、断続的に約200ms(Pause 200)間モーターに電流が供給される。SWを放せば、モーターは停止し、ボリュームの回転も停止して、その時のAC出力が維持される。
'FanRcpr.bas 2007.6.19 Receiver side for fan control program
'IF X = 12 OR X = 13 Then XXX newly added - worked OK! 6.20
'************** Pin connection **********************
'12F629, 4MHz Internal Clock used
'Pin 1: Vdd (5.0V)
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: output - connected to P.Relay1 via 100 ohm R
'Pin 6: GPIO.1: output - connected to P.Relay2 via 100 ohm R
'Pin 4: GPIO.3: output - connected to MCLR via 4.7 K R
'Pin 3: GPIO.4: input - connected to IR rec. module's output
'*********** Main body of program *****************
CMCON = 7 'Comparator not used
TRISIO = %011000 'GPIO.3/4 INPUTs FROM MCLR and IR RCVR
DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
X VAR BYTE
START:
Low GPIO.0
Low GPIO.1
MEASURE:
Count GPIO.4, 100, X 'demodulated pulses read into GPIO.4: counts/100ms
IF X = 8 OR X = 9 Then ONCEMORE1 'Lowering brtness (=brightness)
IF X = 12 OR X = 13 Then ONCEMORE2 'Increasing brtness
Goto START
'2nd count routines to eliminate false triggering important
ONCEMORE1:
Pause 10
Count GPIO.4, 100, X
IF X = 8 OR X = 9 Then
Pause 10
Else
GoTo MEASURE
Endif
Count GPIO.4, 100, X
IF X = 8 OR X = 9 Then LowerBrtness
GoTo MEASURE
ONCEMORE2:
Pause 10
Count GPIO.4, 100, X
IF X = 12 OR X = 13 Then
Pause 10
Else
GoTo MEASURE
Endif
Count GPIO.4, 100, X
IF X = 12 OR X = 13 Then IncreaseBrtness
GoTo MEASURE
LowerBrtness:
X=0
High GPIO.0 'Lower brightness
Pause 200
Low GPIO.0
GoTo START
IncreaseBrtness:
X=0
High GPIO.1 'Increase brightness
Pause 200
Low GPIO.1
GoTo START
'********** End of program **************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Enable ; BODEN - Enable; CD - Disable; CDP Disable
分かった事など
* AC100Vのファンをつなげてテストしたところ、その回転を軽快にコントロールすることが分かった。
* 但し、回転の増減は、プログラムの性質上断続的である。
* IF X = 12 OR X = 13 Then ONCEMORE2 の部分は、最初 X = 12のみであった。SW2に反応しないことがあったので、オシロで見たらパルスが13本に増えていた。そこで OR X = 13を加え、問題を解決した。
* 遠隔コントロール出来る距離は、10メートル以上。
余談
ノイズの影響など、しばらく使ってみないと分からないとは言え、PICBasic Proコンパイラの”COUNT”というパルスをカウントするコマンドを使って、赤外線コントロールが出来ることは興味深い。
暑さが予想されるこの夏、長屋の2台目換気用ファンのコントロールに活躍しそう。
<後で分かったこと−やっぱり電球型蛍光灯からノイズを拾う> 2007.6.27
そこで、SW1を押した時の変調されたパルス数8−9本(in 100ms)を20−21本に、また、SW2を押した時の変調されたパルス数12−13本を30−31本に増やした。つまり、ノイズパルスのパターンが、より一致し難くした訳である。これで、大分ノイズに強くなったような気がするが使い続けてみないと分からない。当然だが反応時間が多少長くなった。
また、送信側で38KHz変調波を発生させるルーチンも少し変えて、より精度を高めた(注:周波数とDuty比が送信プログラム中に示してある)。
以下に、改良した送・受信プログラムを示す。
送信プログラム
'FanTrpr2.bas 2007.6.27 Increase pulse numbers to avoid errors
'*********** Main program ******************
CMCON=7 'Comparator not used
TRISIO=%000110 'GPIO.1 and GPIO.2 = Input, others = Output
GPIO=0 'ALL LOW
OPTION_REG.7=0 'Pull-up for GPIO.1 and GPIO.2
WPU=%000111
DEFINE OSCCAL_1K 1 'Set OSCCAL for 1K device
X var byte
SW1 var GPIO.1
SW2 var GPIO.2
X = 0
START:
SWFIND: 'Key search routine
If SW1=0 Then CHANNEL1 'lowering brtness
If SW2=0 Then CHANNEL2 'increasing brtness
Goto SWFIND
CHANNEL1:
High GPIO.4 'revised 2007.6.26 - Freq=38.59 kHz, Duty Ratio=30.85
High GPIO.4
Low GPIO.4
@Nop
@Nop
X=X+1
IF X > 66 Then SPACE1 '66 = 1.8 ms-long modulated-wave length
Goto START
SPACE1:
X=0
Pause 3 '3 ms 2007.6.27 shortened from 5 ms
Goto START
CHANNEL2:
High GPIO.4 'revised 2007.6.26 - Freq=38.62 kHz, Duty Ratio=26.97
@Nop
@Nop
@Nop
Low GPIO.4
X=X+1
IF X > 45 Then SPACE2 '45 = 1.2 ms-long modulated-wave length
Goto START
SPACE2:
X=0
Pause 2 '2 ms 2007.6.27 shortened from 3 ms
Goto START
'********** End of program ***************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Internal ; BODEN - Enable; CD - Disable; CDP – Disable
受信プログラム
'FanRcpr2.bas 2007.6.27 Increase pulse numbers to avoid errors.
'*********** Main program *****************
CMCON = 7 'Comparator not used
TRISIO = %011000 'GPIO.3/4 INPUTs FROM MCLR and IR RCVR
DEFINE OSCCAL_1K 1 ' Set OSCCAL for 1K device
X VAR byte
START:
'X=0 'added 2007.6.27
Low GPIO.0
Low GPIO.1
MEASURE:
Count GPIO.4, 100, X 'demodulated pulses read into GPIO.4: counts/100ms
IF X=20 OR X=21 Then ONCEMORE1 'Lowering brtness (=brightness)
IF X=30 OR X=31 Then ONCEMORE2 'Increasing brtness
Goto START
'2nd count routines to eliminate false triggering important
ONCEMORE1:
Pause 10
Count GPIO.4, 100, X
IF X=20 OR X=21 Then
Pause 10
Else
GoTo MEASURE
Endif
Count GPIO.4, 100, X
IF X=20 OR X=21 Then LowerBrtness
GoTo MEASURE
ONCEMORE2:
Pause 10
Count GPIO.4, 100, X
IF X=30 OR X=31 Then
Pause 10
Else
GoTo MEASURE
Endif
Count GPIO.4, 100, X
IF X=30 OR X=31 Then IncreaseBrtness
GoTo MEASURE
LowerBrtness:
X=0
High GPIO.0 'Lower brightness
Pause 200
Low GPIO.0
GoTo START
IncreaseBrtness:
X=0
High GPIO.1 'Increase brightness
Pause 200
Low GPIO.1
GoTo START
'********** End of program **************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Enable ; BODEN - Enable; CD - Disable; CDP Disable
<追加 – 上記の調光器にAC100Vライン用ON/OFFスイッチを追加し、電子工作22のプログラムでコントロールする> 2007.7.11
Pulsinを使う電子工作22のプログラムが、干渉により強いようなので、このプロジェクトの送信器と調光器のドライブ回路の一部を改造して、これまでの調光器モーターの正転、逆転の制御の外に、外部のAC100VラインのON/OFF(コマンドToggle
を使ったラッチ動作)出来るように改造した。具体的には、
送信側:
a) 送信ボードの12F629のGPIO.0(ピン7)にSW3を追加した。
受信側:
a) 受信ボードの12F629のGPIO.2(ピン5)にトランジスタを介して、SSR (Solid State Relay)を加え、AC100Vを直接ON/OFF出来るようにした(送信ボードのSW3を押すとON、次に押すとOFF、という動作を繰返す)
プログラム
実際に電子工作22のプログラムをそのまま調光器の送信、受信ボードの12F629に載せて動かしたところ、100円ショップで購入した電球型蛍光灯から、ひどくノイズを拾って誤動作することが分かった。そこで、パルスのビット数を5から8に増やし、しかも、“H”と“L”の組合せをより複雑にした。 しかし、やはり時折、受信ボードの上方約1メートルの電球型蛍光灯からノイズを拾い誤動作することが分かった。 問題解決のため、パルスのビット数を8から12に増やしてみた。その結果、かなり安定して動作するようになった。操作感やレスポンスもあまり変わらない。これから使ってみて、動作状態を観察したい。うまく行けば、アッセンブラのコマンドを使わない、PICBasic Proのコマンドだけによるリモコンソフトの作成が可能になる。なにしろ、ロジックが簡単なのが良い。
送信側: PulsinT1.bas
'PulsinT1.bas 2007.7.11 Increase the bit number to 12 from 8 to avoid
'noise interference
'PulsinTp.bas 2007.7.10 Increased the number of bits to 8 from 5 and made
'the bit-combination more complex to avoid noise interference - Works Better!
'PulsinTm.bas 2007.7.8 modified in use for Proj21
'PulsinT.bas 2007.7.1 2007.6.30 Pulsin proj.
'************** Pin connection **********************
'12F629, 4MHz Internal Clock used
'Pin 1: Vdd (5.0V)
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: input - connected to SW3 2007.7.8
'Pin 6: GPIO.1: input - connected to SW1 2007.7.8
'Pin 5: GPIO.2: input - connected to SW2 2007.7.8
'Pin 3: GPIO.4: output - connected to IR LED via 100 ohm resistor
'*********** Main program ******************
CMCON=7 'Comparator not used
TRISIO=%000111 'GPIO.0, GPIO.1 and GPIO.2 = Input, others = Output
OPTION_REG.7=0 'Use of weak pull-up
WPU=%000111 'Pull-up for GPIO.0, GPIO.1 and GPIO.2
DEFINE OSCCAL_1K 1 'Set OSCCAL for 1K device
X var byte
SW1 var GPIO.1
SW2 var GPIO.2
SW3 var GPIO.0
GPIO.0=0
GPIO.1=0
GPIO.2=0
GPIO.4=0
SWINR: 'SW search routine キー入力待ちルーチン
IF SW1=0 THEN SW1R 'SW1
IF SW2=0 THEN SW2R 'SW2
IF SW3=0 THEN SW3R 'SSR drive newly added
GOTO SWINR
SW1R: 'Code HLHL HHHH LHLH =%1010 1111 0101=2805 (dec) 12ビットのコード作成 SW1用、 HとLの組合せは適当に決めた
X=0
GOSUB Startbit '3 ms
GOSUB Sepbit 'Separate bit=2 ms
GOSUB Hbit '"H" '2 ms
GOSUB Sepbit
GOSUB Lbit '"L" '1 ms
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Hbit '"H" 'following 3 bits newly added
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L" 'following 4 bits newly added 7.11
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
Goto SWINR
SW2R: 'Code HLHL HLHL HLHH =%1010 1010 1011=2731 (dec) SW2用
X=0
GOSUB Startbit '3 ms
GOSUB Sepbit 'Separate bit=2 ms
GOSUB Hbit '"H" '2 ms
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H" 'following 3 bits newly added
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L" 'following 4 bits newly added 7.11
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
Goto SWINR
SW3R: 'Code HLHH HLHL LHHH =%1011 1010 0111=2983 (dec) SW3用
X=0
GOSUB Startbit '3 ms
GOSUB Sepbit 'Separate bit=2 ms
GOSUB Hbit '"H" '2 ms
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Lbit '"L" '1 ms
GOSUB Sepbit
GOSUB Hbit '"H" 'following 3 bits newly added
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Hbit '"H" 'following 4 bits newly added 7.11
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
GOSUB Lbit '"L"
GOSUB Sepbit
GOSUB Hbit '"H"
GOSUB Sepbit
Goto SWINR
Startbit: ‘Startbitの作成
High GPIO.4 'GETTING 38KHZ WITH THIS SUBROUTINE 実際は43KHz位
High GPIO.4
Low GPIO.4
Low GPIO.4
X = X + 1
IF X < 99 Then STARTBIT '99 GIVES 3MS START PULSE 3msは実際には2.2-2.4ms
Return
Sepbit: ‘Separatebitの作成
Pause 2 '2 ms この値はオシロ実測値とほぼ一致
X=0
Return
Hbit: ‘Hビットの作成
High GPIO.4
High GPIO.4
Low GPIO.4
Low GPIO.4
X= X + 1
IF X < 66 Then Hbit '2MS CODEBIT 2msは実際には1.4-1.6ms
Return
Lbit: ‘Lビットの作成
High GPIO.4
High GPIO.4
Low GPIO.4
Low GPIO.4
LET X= X + 1
IF X < 33 Then Lbit '1MS CODEBIT 1msは実際には0.65-0.75ms
Return
'********** End of program ***************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Internal ; BODEN - Enable; CD - Disable; CDP – Disable
受信側: PulsinR1.bas
'PulsinR1.bas 2007.7.11 Increase the bit number to 12 from 8 to avoid
'noise interference
'PulsinRp.bas 2007.7.10 Increased the number of bits to 8 from 5 made
'the bit-combination more complex to avoid noise interference - Works Better!
'PulsinRm.bas 2007.7.10 2007.7.9 Found to pick up noises (fluo lamp) and
'initial erroneous functioning when power plug inserted
'PulsinRm.bas 2007.7.8 (Paired with PulsinTm.bas) Works well.
''PulsinRt.bas 2007.7.5 "Toggle" introduced, which repeatedly turns ON/OFF when
'SW1 is pressed (every 0.5 sec). Succeeded!
'PulsinR.bas 2007.7.2 Worked at last. Pulsin proj.
'Frequency of Moduleted pulses - Designed 38KHz/Measured 43KHz
'Length of pulses:
'Startbit - Desined 3ms/Measured 2.3ms
'Separatelength - Desined 2ms/Measured 1.95ms
'Codes - "H" Desined 2ms/Measured 1.57ms; "L" Desined 1ms/Measured 0.83ms
'************** Pin connection **********************
'12F629, 4MHz Internal Clock used
'Pin 1: Vdd (5.0V)
'Pin 8: Vss (GND)
'Pin 7: GPIO.0: output - connected to P.Relay1 via 100 ohm R
'Pin 6: GPIO.1: output - connected to P.Relay2 via 100 ohm R
'Pin 5: GPIO.2: output - connected to SSR (solid State Relay) via Tr1815
'Pin 4: GPIO.3: input - connected to MCLR via 4.7 K R
'Pin 3: GPIO.4: input - connected to IR rec. module's output
'*************** Main program ***********************
CMCON=7 'Comparator off
TRISIO=%011000 'all others except GP3&4 are outputs.
DEFINE OSCCAL_1K 1
Codelength var Byte
Code var word 'for 12 code bits byte -> word 2007.7.11 12ビットなのでWord
X var Byte
Clear 'Content of all variables -> 0
Pause 500 'Settle down PIC & IR receiver module
GPIO.0=0
GPIO.1=0
GPIO.2=0
Pause 500
Startpulse:
GPIO.0=0
GPIO.1=0
Pulsin GPIO.4,0,Codelength 'Measure low pulse (IR LED On time) パルス幅の測定
IF Codelength < 200 Then Startpulse 'Searching 3 ms pulse Startbitの到着待ち
IF Codelength > 300 Then Startpulse ‘300は3000ms(3ms)に相当
'Checkpulse 12-bit code 2007.7.11 パルスを測定して12ビットのコード作成
'Checking Bit0
Pulsin GPIO.4,0,Codelength ‘最下位ビットの作成
IF Codelength > 100 Then Code.bit0=1 '2 ms pulse is 1 initial 150->100 changed
IF Codelength < 100 Then Code.bit0=0 '1 ms pulse is 0
'Checking Bit1
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit1=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit1=0 '1 ms pulse is 0
'Checking Bit2
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit2=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit2=0 '1 ms pulse is 0
'Checking Bit3
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit3=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit3=0 '1 ms pulse is 0
'Checking Bit4
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit4=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit4=0 '1 ms pulse is 0
'Checking Bit5
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit5=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit5=0 '1 ms pulse is 0
'Checking Bit6
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit6=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit6=0 '1 ms pulse is 0
'Checking Bit7
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit7=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit7=0 '1 ms pulse is 0
'Checking Bit8
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit8=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit8=0 '1 ms pulse is 0
'Checking Bit9
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit9=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit9=0 '1 ms pulse is 0
'Checking Bit10
Pulsin GPIO.4,0,Codelength
IF Codelength > 100 Then Code.bit10=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit10=0 '1 ms pulse is 0
'Checking Bit11
Pulsin GPIO.4,0,Codelength ‘最上位ビットの作成
IF Codelength > 100 Then Code.bit11=1 '2 ms pulse is 1
IF Codelength < 100 Then Code.bit11=0 '1 ms pulse is 0
Pause 20 ‘作成されたCode の送信値とのマッチング、分岐
IF Code=2805 Then RELAY1 '=%1010 1111 0101 Lower brightness
IF Code=2731 Then RELAY2 '=%1010 1010 1011 Increase brightness
IF Code=2983 Then SWONOFF '=%1011 1010 0111 External power switch NO/OFF
CLEAR
Goto Startpulse
RELAY1: ‘明るさが低下する方向にVR軸を回す
High GPIO.0 'P.Relay1 ON (momentary operation)
Pause 100
Low GPIO.0
Goto Startpulse
RELAY2: ‘明るさが増す方向にVR軸を回す
High GPIO.1 'P.Relay2 ON (momentary operation)
Pause 100
Low GPIO.1
Goto Startpulse
SWONOFF: 'External SW ON/OFF (latch operation) ACラインをON/OFFする
Toggle GPIO.2 ‘Toggleによって、SW3を押す毎に、GPIO.2のH/L状態が反転する
Pause 500
Goto Startpulse
'********** End of program ***************
'Note:
'AKI Programmer's configurations:
'FOSC INTOSC (GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Enable ; BODEN - Enable; CD - Disable; CDP - Disable