PWM制御を試してみました。
PWMのサンプルプログラムというと、以下のページにサンプルがあります。このサンプルでは、アノードコモンLEDを使っています。
http://kinoma.com/create/samples/pwm-tri-color-led/
手元にあったのが、カソードコモンLEDだったので、ちょっと変更が必要になりました。
動作としては、スライダーのつまみが左にあるときに光らない、右にあるときに光るようにしたいのです。
アノードコモンの場合、アノードは HIGH(=1) なので 光らない時 HIGH(=1)である必要があり、
つまみが右に行くにつれ、LOW(=0)に近づいていく設定にします。
スライダーのつまみが左から右にいくにつれ、スライダーの値が 0 から 1 まで変化するので、ちょうど逆向きになります。
カソードコモンの場合には、この逆でスライダーの値をそのまま LED の出力に入れればいいことになります。楽チン。
まず、初期値を変更します。anode については丸無視です。これについては後ほど。
exports.pins = {
red: { type: "PWM", value: 1 },
green: { type: "PWM", value: 1 },
blue: { type: "PWM", value: 1 },
anode: { type: "Digital", direction: "output", value: 1 }
};
// 初期値を全て0にする --->
exports.pins = {
red: { type: "PWM", value: 0 },
green: { type: "PWM", value: 0 },
blue: { type: "PWM", value: 0 },
anode: { type: "Digital", direction: "output", value: 1 }
};
そして、スライダーで値が変化した時に呼ばれるであろうところの挙動を変えます。
exports.write = function( parameters ) {
switch( parameters.color ){
case( "red" ):
this.red.write( 1 - parameters.value );
return;
case( "green" ):
this.green.write( 1 - parameters.value );
return;
case( "blue" ):
this.blue.write( 1 - parameters.value );
return;
}
}
// スライダーのつまみの値をそのまま入れる --->
exports.write = function( parameters ) {
switch( parameters.color ){
case( "red" ):
this.red.write( parameters.value );
return;
case( "green" ):
this.green.write( parameters.value );
return;
case( "blue" ):
this.blue.write( parameters.value );
return;
}
}
(simulator/led.xmlのところにも、同じような式があるのですが、こちらは名前の通り simulatorを動作させた時に動くコードのようです)
配線ですが、KinomaCreateの後ろのピンのPin28 を赤、Pin30を緑、Pin34を青につなぎます。
前のピンでは、PWM 制御はできないようなのね。ちょっと残念。
そして、カソードをPin1 の GND につなぎます。
ですので、プログラム中の anode 設定は全く意味をなさなくなります。
(そもそも直接 3.3Vなり5Vなりにつないでおけばいいのだと思いますが。。。)
application.invoke( new MessageWithObject( "pins:configure", {
led: {
require: "led",
pins: {
red: { pin: 28 },
green: { pin: 30 },
blue: { pin: 34 },
anode: { pin: 24 }
}
}
}));
こうすると、ちゃんと http://kinoma.com/create/samples/pwm-tri-color-led/ のサンプルの動画と同じように動くようになりました。
そろそろ、それらしいところを変更するだけじゃなく、ちゃんと Kinoma Create のフレームワーク?(KPR:Kinoma Platform Runtime)を理解したいところです。
'exports' とかいうあたりは、ここだな。
http://www.kinoma.com/develop/create/pins/