if (divider !== 0 && (divider & (divider – 1)) !== 0)
nodeはnpmで提供されているパッケージが豊富なのが魅力ですが、メンテされていなくて現状では使えないものも多いです。GPIO割り込みとハードウェアPWMも対応を謳っているパッケージがそれぞれいくつかあります。が、いろいろ試して見ていずれも事実上一択状態でした。GPIO割り込みが使えそうなのは、pidriver、onoff、rpi-gpioです。試して見たところ、pidriverはコンパイル失敗、rpi-gpioは動くには動くけれどもドキュメントが意味不明でした。onoffはちゃんと動作するし、ドキュメントもわかりやすいです。APIも使いやすそうなのでこれで行こうと思います。onoffハードウェアPWMが使えそうなパッケージは沢山ありましたが、インストールできた、サンプルコードで動いたのがrpioのみでした。WiringPiの設定を踏襲しているので、CでWiringPiを使った経験があるのであれば、移行もスムーズだと思います。rpioちなみにClockDividerの設定で2の累乗以外を設定すると怒られるのですが、WiringPiで使用していた時に2の累乗以外でもちゃんと動いていて、正確な周波数になっていました。圧電ブザーの発振に使いたいので、正確な音程を出すためには中途半端な数を設定したいです。そこでrpioのコードを修正して、引数のチェックを外しました。node_modules/rpio/lib/rpio.jsの516行目あたりです。 ``` rpio.prototype.pwmSetClockDivider = function (divider){/*” 本文は当時のrpioを対象とする実験です。分周値を制限する条件式で使う減算記号はASCIIの-です。整数が2の累乗かを調べる基本式は、正の整数nに対して(n & (n - 1)) === 0となります。分周器が許す値かどうかは別の問題なので、この条件を外せばすべての値がハードウェア上で有効になるわけではありません。
Continue reading...