目次

蛍の光

 蛍の光は、ジワーっと輝度が増していき、ジワーっと
 輝度が減って消灯するようにすればよいでしょう。

 市販キットには、次のような基板があります。




 フェードインとフェードアウトの処理には、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にします。




目次

inserted by FC2 system