目次
前
次
クリスマスツリー
クリスマスツリーは、次のように木にLEDをつけると
実現できます。
木につけられたLEDをランダムに点灯すれば
クリスマスツリーは実現できるでしょう。
IchigoLatteでは、乱数をrndで発生させられます。
6段を用意し、その格段にLEDを2つずつ接続して
おくとすれば、実現できそうです。
乱数で、どこの段のLEDを点灯するかを決めます。
図で示すと以下。
出力のOUT_1からOUT_6に、LEDを抵抗を介して
接続しておきます。
OUT_1からOUT_6に割り当てられたピンを出力に設定し
論理値を印加できるように、関数を定義。
function gpout_set()
{
var ddra = 0x50018000;
// set lower 6 bits as OUTPUT
mem(ddra,mem(ddra) | 0x3f);
}
function gpout(x,v)
{
var xadr = 0x50010000;
var xdat ;
// generate logical value
xdat = 0xfff ;
if ( v == 0 ) { xdat = xdat & v ; }
// calculate address
bl = (1 << (x-1)) << 2;
if ( x == 5 ) { bl = (1 << 11); }
if ( x == 6 ) { bl = (1 << 10); }
xadr = xadr + bl ;
// set logical value
mem(xadr,xdat);
}
すべてのLEDを消灯できるようにしておきます。
function clr_led()
{
var xadr = 0x50010000 ;
// OUT_1 - OUT_4
xadr = xadr + (15 << 2);
// OUT_5 , OUT_6
xadr = xadr + (3 << 10);
// store
mem(xadr,0);
}
OUT_1からOUT_4は、ビット0から3で対応し
OUT_5、OUT_6はビット8、9になっている
ため、ピン配置との相関で対象となるGPIOの
アドレスを確定させています。
OUTにアサインされているビットは、下図で
確認できます。
呼び出して利用する関数を定義したので
乱数で点灯するLEDを決めて点滅させます。
var r ;
//
gpout_set();
while (1) {
// turn off all LEDs
clr_led();
// select LED number
r = rnd(6) + 1;
// turn on target LED
gpout(r,1);
// delay
sleep(1000);
}
まとめると、以下。
function gpout_set()
{
var ddra = 0x50018000;
// set lower 6 bits as OUTPUT
mem(ddra,mem(ddra) | 0x3f);
}
function gpout(x,v)
{
var xadr = 0x50010000;
var xdat ;
// generate logical value
xdat = 0xfff ;
if ( v == 0 ) { xdat = xdat & v ; }
// calculate address
bl = (1 << (x-1)) << 2;
if ( x == 5 ) { bl = (1 << 11); }
if ( x == 6 ) { bl = (1 << 10); }
xadr = xadr + bl ;
// set logical value
mem(xadr,xdat);
}
function clr_led()
{
var xadr = 0x50010000 ;
// OUT_1 - OUT_4
xadr = xadr + (15 << 2);
// OUT_5 , OUT_6
xadr = xadr + (3 << 10);
// store
mem(xadr,0);
}
var r ;
//
gpout_set();
while (1) {
// turn off all LEDs
clr_led();
// select LED number
r = rnd(6) + 1;
// turn on target LED
gpout(r,1);
// delay
sleep(1000);
}
目次
前
次