目次
前
次
蛍の光
蛍の光は、ジワーっと輝度が増していき、ジワーっと
輝度が減って消灯するようにすればよいでしょう。
市販キットには、次のような基板があります。
フェードインとフェードアウトの処理には、PWM波形を
利用するのが、最も簡単。
メソッドにpwmが用意されているので、仕様を確認。
pwm(p,d) : output pwm signal on port p with duration d(usec)
pwmt(t) : set pwm cycle to t(usec).[DEFAULT:20,000]
IchigoLatteに使われているLPC1114では、GPIOに
INとOUTを割り当てています。
OUT_1からOUT_4、OUT_5、OUT_6は、もともと出力で使われるので
ポートpには、出力のOUT_2からOUT_4、OUT_5を利用できます。
DUTY比に相当する値を、0から20,000まで増やしていき
最大値に到達したならば、20,000から0まで減らせば
うまくいきそう。
変化量を10にして200回、pwmを呼び出します。
単純に値を変化させるので、次のコードでよいでしょう。
var duty ;
duty = 0 ;
for ( i = 0 ; i < 200 ; i = i + 1 ) {
// calculate duty ratio
duty = duty + 10 * i ;
// generate
pwm(2,duty);
// delay 100ms
sleep(100);
}
sleep(1000);
duty = 20000 ;
for ( i = 0 ; i < 200 ; i = i + 1 ) {
// calculate duty ratio
duty = duty + 10 * i ;
// generate
pwm(2,duty);
// delay 100ms
sleep(100);
}
フェードインとフェードアウトは、加算か減算かの
違いしかないので、ひとつの関数にまとめます。
function hotal(x)
{
duty = x ;
delta = -10 ;
if ( x == 0 ) { delta = 10 ; }
for ( i = 0 ; i < 200 ; i = i + 1 ) {
// calculate duty ratio
duty = duty + delta * i ;
// generate
pwm(2,duty);
// delay 100ms
sleep(100);
}
フェードインとフェードアウトの処理を指定して
無限ループを構成すると以下。
function gpout_set()
{
var ddra = 0x50018000;
// set lower 6 bits as OUTPUT
mem(ddra,mem(ddra) | 0x3f);
}
function hotal(x)
{
duty = x ;
delta = -10 ;
if ( x == 0 ) { delta = 10 ; }
for ( i = 0 ; i < 200 ; i = i + 1 ) {
// calculate duty ratio
duty = duty + delta * i ;
// generate
pwm(2,duty);
// delay 100ms
sleep(100);
}
}
gpout_set();
while (1) {
hotal(0);
sleep(1000);
hotal(20000);
sleep(1000);
}
LEDと抵抗をつけるので、回路は以下。
接続位置は、OUT_2にします。
目次
前
次