はじめに
Seeed 社の 『Grove Beginner Kit for Arduino』 のセンサーのうち、MSX0 の IoT BASIC のサンプルがないものを『Turbo Pascal』で動作させてみます。
BUZZER
パッシブブザー [D5] を鳴らします。パッシブブザーはアクティブブザーとは異なり、電圧を掛ければ鳴るものではなく、矩形波を出力しないと鳴りません。要はスピーカーです。
See also:
MSX0 Stack での挙動
まず事前にモジュールをつないでおきます。MSX0 側は Port B (黒) に接続します。
センサー | 接続方法 | Grove ポート |
---|---|---|
[D5] BUZZER | Digital | Port B (黒色) |
上段左から 2 つ目のモジュールがパッシブブザーです。シルク印刷は裏にあります。
GROVE ケーブルの修正 (クロスケーブルの作成)
MSX0 でパッシブブザーを鳴らすためには、GROVE ケーブルの黄色と白の線を入れ替える必要があります。
マイナスの精密ドライバー (100 均で買えます) でコネクタのツメを持ち上げながら線を引っ張ると、ピンを抜く事ができます。
Grove ケーブルの片方のコネクタの黄色と白の線を入れ替えてください。奥までカチっと差し込んで、線を軽く引っ張って抜けなければ OK です。ツメを持ち上げすぎるとコネクタが破損しますので注意してください。
ピン | ケーブル | モジュール | Port B |
---|---|---|---|
1 | 黄 | SIG | I |
2 | 白 | NC | O |
3 | 赤 | VCC | V |
4 | 黒 | GND | G |
モジュールのパッシブブザーは Pin1 (外側: 黄色) に接続されていますが、MSX0 Stack Port B の出力ピンは Pin2 (内側: 白色) となっているため、線を入れ替える必要があります。
付属の Grove ケーブルを 1, 2 本、クロス接続にしておくとよいでしょう。コネクタを任意の色のマーカーペンで着色しておくと誤接続防止になります。
See also:
MSX-BASIC のコード
MSX-BASIC でブザーを鳴らすコードについては HRA! さんの資料 (6.3. ブザー) を参考にしてください。
Turbo Pascal のコード
別途、SYSUTILS.LIB
、IOT.LIB
が必要です。
program BUZZER;
type
LibStr = string[80];
{$I SYSUTILS.LIB}
{$I IOT.LIB}
begin
while not KeyPressed do
begin
IoTPutInt('device/analog/out', 4000);
Delay(1789);
IoTPutInt('device/analog/out', 0);
Delay(894);
end;
end.
実行して耳を澄ますと微かにブザーが繰り返し 2 秒間鳴っているのを確認できます。
任意のキーで中断できます。
解説
本来、パッシブブザーはもっと大きな音で鳴るのですが、MSX0 では PWM がサポートされていないので、この程度の音を出すのが精一杯です。PWM がサポートされていないのに何故音が鳴るのかと言うと、MSX0 の device/analog/out
が本物の (?) アナログ出力ではなく PWM だからです (恐らく ESP32 の ledc が使われている)。
矛盾しているようですが、要は PWM を細かくコントロールしてパッシブブザーを鳴らせるような機能が (現状の) MSX0 には実装されていないという事です。
See also:
おわりに
まぁ、音を鳴らすだけなら MSX 側の音を鳴らせばいいんですけどね。
See also: