目次

Go/Stop装置

 ミニ4駆やMCRで使う、スタートの合図を光と音で
 出力するのが、Go/Stop装置。



 装置は、つぎの部品で構成されています。

 IchigoJamの互換基板には、プッシュボタンと
 LEDは1個用意されています。



 LEDは、4個必要なので、3個のLEDをOUT_1からOUT_3に
 接続して、対応することに。



 プッシュボタンを押してから、スタートまでの状態遷移は
 次のようにすればOK。



 基板上のプッシュボタンとLEDは、関数btnとledで対応し
 音の出力は beep を利用。

 プッシュボタンを押してからの処理を定義。

function execute()
{
  // LED_3
  gpout(3,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_2
  gpout(2,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_1
  gpout(1,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_0
  led(1);
  // sound
  beep(880,800);
  // turn off LED
  led(0);
}

 OUT_1からOUT_4を出力に設定することと
 指定ビットに論理値を出力する関数は
 以前に作成してあるので、再利用。

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 b ;

while (1) {
  // get button state
  b = btn();
  // execute
  if ( b == 1 ) { execute(); }
  // 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);
}

function execute()
{
  // LED_3
  gpout(3,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_2
  gpout(2,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_1
  gpout(1,1);
  // sound
  beep(440,800);
  // turn off all LEDs
  clr_led();
  // LED_0
  led(1);
  // sound
  beep(880,800);
  // turn off LED
  led(0);
}

var b ;

gpout_set();
clr_led();
while (1) {
  // get button state
  b = btn();
  // execute
  if ( b == 1 ) { execute(); }
  // delay
  sleep(1000);
}


目次

inserted by FC2 system