ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

johnny-fiveでコンパスの生データを得る(get raw data of compass)

普通には得られなさそうだったので、ライブラリの方を書き換えました。
今本家にはissueしています。できたのに、自分の調べが甘いだけだったら申し訳ないのだけど…。

とりあえず、johhy-fiveとは
node.jsでArduinoを制御できるライブラリです。
github.com
これね。使い方は簡単なんだけどarduinoに慣れていると、けっこう使い方にとまどうかもしれません。普通にarduinoでやればいい内容だったんだけど、ちょっと試してみたくなったので。

で、使い方は他のところのほうが詳しいので省略します。
JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveを使ってみる〜 | 電子工作部
node.jsとjohnny-fiveを使って、JavaScriptでarduinoを操作してみる - 株式会社ネクスト エンジニアBlog
Johnny-Fiveでマイコン制御21 - コンパス・ジャイロ・GPS - 電子部
かなり簡単。

使い方は

npm install johnny-five

で使える。

どんなコードを書いたかというと

var five = require('johnny-five');
var board = new five.Board();

board.on("ready", function(){
   var magnetometer = new five.Magnetometer({
     controller: "HMC5883L",
   });
   magnetometer.on("data", function(){
     console.log('heading', Math.floor(this.heading));
     console.log(this.raw);
   });
});

Magnetometer使わなくてもCompassを使えるし、そっちの方がスッキリするかもしれない。
とにかく

console.log(this.raw)

はundefindedとなる。悲しい。公式には得られそうな感じに書いてあるのに。
で、かなり調べた挙句、結局得られなさそうだなと思ったので、ライブラリ(モジュール)を書き換える。
currentDirectory\node_modules\johnny-five\lib

compass.js
を開いて

    heading: {
      get: function() {
        return this.toScaledHeading(raw);
      }
    }

こんな感じのが真ん中より下の方に有る。
それの上くらいに

      raw: {
          get: function () {
              return raw;
          }
      },

これを挿入する。

そうすると得られるようになる。
やったー!