2017年08月16日

Alchemusica をビルドし直した

 ラズパイで音を出す実験をしていて、音サンプルの作成に Alchemusica を立ち上げたら、なんかめちゃくちゃだった。一応動くのだが、画面が乱れたり、メニューがおかしくなったり。10.8 では大丈夫だったので、10.10 あたりからおかしくなったのかな。

 とりあえず、10.11 対応の Xcode 8.2.1 でビルドし直したところ、不具合は減ったみたい(なくなったかどうかはわからん)。10.5 はもう手元に動かせる環境がないので、10.6 で試したところ、こちらも動いている様子。ビルド時に 100 個以上警告が出ているので、じっくり見直した方がいいのだけど、時間がないな…。そもそもニーズがあるのかどうかもよくわからないし。

タグ:Mac
posted by toshinagata at 01:30| 日記

2017年08月14日

ラズパイ+AVR:自動水やり器完成

 自動水やり器、一応完成しました。別記事を書きました。→「自動水やり器の製作

20170814-1.jpg

 2日間ほど試験運用してみたところ、ちゃんと1日2回水やりができている模様。お盆の帰省中も、ちゃんと動いていてくれた。

 作ってから気がついたのだけど、水をやる設定時間がプログラム中にハードコーディングされているので、変更ができない。これは変更できるようにすべきだったな。小さいタクトスイッチ1個ぐらいなら追加できそうだから、「スイッチを長押ししたら時間設定モード」という仕様にはできるはず。まあ、今シーズンは今のままいけると思うので、来シーズンに向けての課題ということで。

posted by toshinagata at 19:06| 日記

2017年08月12日

さくらブログのスマホ対応(改良)

 以前にこのブログをスマホ対応にしたのだけど、いつの間にか、うまく見えなくなっていた。スマホで見ると、自動転送が無限ループしたような状態になってしまう。仕様が変わったんかなあ?

 少し試行錯誤して、一応見られるようにはなった。前と同様に、スマホサイトの「コンテンツ」は「自由形式」のみとして、その中身を下のように変更。

<SCRIPT LANGUAGE="JavaScript">
<!--
var url = location.pathname + "?from_sp";
if (document.referrer) {
  var ref = "referrer=" + encodeURIComponent(document.referrer);
  url = url + "&" + ref;
}
location.href = url;
// -->
</SCRIPT>

 ブログのパス名 (http://blog.d-alchemy.xyz/) に "?from_sp" をつけると PC 向けのサイトに誘導されるらしい。詳しくはよくわからないのだが、以前はクッキーでスマホ向けと PC 向けを区別していたのを、"?" 以下の文字列で区別するようになったのかな? とにかく、一応動くようになったので、しばらくこれで運用してみる。

 08/13 追記:やっぱりうまくいかない。これが正解か?

<SCRIPT LANGUAGE="JavaScript">
<!--
var url = location.pathname;
url = url.replace(/\/s\//, "/");
url = url + "?from_sp";
if (document.referrer) {
  var ref = "referrer=" + encodeURIComponent(document.referrer);
  url = url + "&" + ref;
}
location.href = url;
// -->
</SCRIPT>
タグ:ブログ
posted by toshinagata at 16:46| 日記

2017年08月09日

ラズパイ: Luajit で OpenVG を使う

 ラズパイ上のスクリプト言語の一つとして、Jun Mizutani さんに倣って、luajit を試してみた。これはいいですね。C のインターフェイスを内蔵していて、OS の共有ライブラリを直接呼べるのがいい。

 低レベル入出力関数の open() なんかも、こんな風に直接呼び出せるわけです。

local ffi = require "ffi"
ffi.cdef[[
  int open(const char* filename, int flags);
  int close(int fd);
]]
local O_RDONLY = 0
fd = ffi.C.open("/dev/input/event0", O_RDONLY)

 前にやった OpenVG のグラフィック描画 を、luajit で試してみた。Jun Mizutani さんの LjES を参考にした(一部コードを使わせていただいた)。

20170809-1.jpg

 昔の 8 ビットマイコンゲーム風動画。まだキャラクタが動いているだけだけど。

 コードはこちらに置いておきます。ラズパイ上でダウンロードして、tar xvfz ljsc_sample.tar.gz で展開して、cd ljsc_sample; luajit fish.lua で実行できます。

posted by toshinagata at 17:49| 日記

2017年08月06日

ラズパイのタッチパネル液晶:tslib を使う

 「ラズパイの液晶タッチパネルを使う」の続き。自前でキャリブレーションのプログラムを書いていたのだが、tslib を使えばいいじゃない、と今さらながら気がついた。ということで、再トライしてみた。液晶は前と同じで、Waveshare 3.2inch RPi LCD (B), 320×240

 まず、tslib のインストール。

pi@raspberrypi:~ $ sudo apt-get install evtest tslib libts-bin

 evtest でデバイス番号を確認。/dev/input/event0 だった。

pi@raspberrypi:~ $ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:	ADS7846 Touchscreen
Select the device event number [0-0]: 0

 ts_calibrate でキャリブレート。+印が5箇所に順に表示されるので、スタイラスでタッチする。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate
20170805-1.jpg

 ts_test でテスト。やっぱりX方向はノイジーで、ときどきポインタが飛んでしまう。

pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/event0 ts_test
20170805-2.jpg

 C で使おうとすると、もう一手間かかる。tslib のライブラリは /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0 なのだが、これをフルパスで指定する必要があるみたい。また、tslib.h がどこにもインストールされていないので、必要な宣言をソースに埋め込む。

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
struct tsdev;
struct ts_sample {
  int x, y;
  unsigned int pressure;
  struct timeval tv;
};
extern struct tsdev *ts_open(const char *dev_name, int nonblock);
extern int ts_config(struct tsdev *);
extern int ts_read(struct tsdev *, struct ts_sample *, int);
extern int ts_close(struct tsdev *);

int main(int argc, const char **argv)
{
  struct tsdev *ts;
  ts = ts_open("/dev/input/event0", 1);
  if (ts == NULL) {
    printf("Failed to open /dev/input/event0.\n");
    exit(1);
  }
  if (ts_config(ts) != 0) {
    printf("Failed to configure touchscreen.\n");
    exit(1);
  }
  while (1) {
    struct ts_sample samp;
    if (ts_read(ts, &samp, 1) == 1) {
      printf("%d %d %d\n", samp.x, samp.y, samp.pressure);
    }
  }
  return 0;
}

 コンパイルして実行してみた。

pi@raspberrypi:~ pi@raspberrypi:~$ gcc -o tstest tstest.c /usr/lib/arm-linux-gnueabihf/libts-0.0.so.0
pi@raspberrypi:~$ ./tstest
133 180 65063
132 180 65104
131 180 65116
132 180 65114
135 186 0
^C
pi@raspberrypi:~$ 

 ここまで来れば簡単に使えるのだが、道のりが妙に長いな。Raspbian のパッケージで tslib をもう少しちゃんとサポートしてくれたら、楽に使えるんだけどな。

タグ:Raspberry Pi
posted by toshinagata at 11:01| 日記