bo-tech

heart and tech with love.

intel Edisonで何か作ってみよう その4

さてこれまでで、割といい感じにLチカまで持ってこれたかと。

ということで、何かしらセンサーやらボタンやらを組み込んでLチカとか何かをハックしたりとかwebサービスと連携したりとか遊んでみたいと思う。

pushボタンで点灯

hello worldの少し上のレベルかな。

制御すべきハードウェアを二つ増やし、io部分の実装も必要かな。

購入したキットにあるチュートリアルを参考に。

www.dfrobot.com

jsに書き換えた

/*jslint node:true, vars:true, bitwise:true, unparam:true */
/*jshint unused:true */
// Leave the above lines for propper jshinting
//Type Node.js Here :)

var mraa = require('mraa');
console.log('MRAA Version: ' + mraa.getVersion());

var buttonPin = new mraa.Gpio(2),
    ledPin = new mraa.Gpio(13);

var ledState = 0,
    prev = 0;

// setup
buttonPin.dir(mraa.DIR_IN);
ledPin.dir(mraa.DIR_OUT);

// start
loop();

function loop() {
    prev = ledState;
    ledState = buttonPin.read();
    if (prev !== ledState) console.log('current led state ' + (ledState === 1 ? 'HIGH' : 'LOW'));
    ledPin.write(ledState);
    
    setInterval(loop, 1000);
}

若干気になったのは、

  • consoleの文字列連結に()が必要だったっけ?
  • 標準出力に出しすぎるとXDKが無反応になる。
  • DIR_OUT_HIGHの値が2である (最初HIGHとLOWの判定に使ったら違った)
  • DIR_INにwriteしたり、DIR_OUTにreadしたらどうなるんだろー。

学習メモ

  • INPUTとOUTPUTの方向がある。
  • GPIOはGeneral purpose ioの略で、一般的なIO目的で利用されるらしい。
  • readの返り値は0 or 1
  • Arduinoにはloopとかsetupの関数が用意されているっぽいがjsでは自分で実装
  • readでその時の状態を読んで、writeで書き出す。