MMBasicでのディジタル入出力を人を検出したらLEDを点灯させ、検出できなかったらLEDを消灯する回路で確認した。
使用部品
入力として焦電型赤外線(人感)センサーモジュール SB412A、出力として赤色LED、LEDの電流制限抵抗として150Ωを使用した。
配線
次の図のように配線した。
実体配線図の人感センサーの外観が実物と異なるのはfritzingにSB412Aの部品がなかったため、類似の部品を代用している。中央のピンが出力で人を検出するとハイ、それ以外はローレベルの出力になる。このピンをRaspberry Pi PicoのGP1に接続している。
LEDのアノードは電流制限抵抗としてを通してGP0に接続している。
プログラム
プログラムは下記のとおりで、2秒間隔で人感センサーの状態を確認し、LEDの点灯を制御するものとした。
Dim din% ' Define variable
SetPin GP0,DOUT ' Set GP0 as a digital output pin
SetPin GP1,DIN ' Set GP1 as a digital input pin
Do
din% = Pin(GP1) ' Get GP1 pin value
If din% = 1 Then ' Is GP1 a 1? (Did the sensor detect a human?)
Pin(GP0) = 1 ' Turn on LED
Else
Pin(GP0) = 0 ' Turn off LED
End If
Pause 2000 ' Wait 2 Sec
Loop
MMBasicではSETPIN
コマンドで指定したピンの動作をピン番号に続けて指定する。ディジタル入力の場合はDIN
を、ディジタル出力の場合はDOUT
を指定する。
DINを指定した入力ピンの状態はPIN
関数で読み取り、DOUTを指定した出力ピンの場合はPIN
コマンドで値を設定する。
MMBasicの条件分岐の構文は下記のとおり。
IF 条件式 THEN
条件式が成立したときの処理
ELSE
条件式が不成立したときの処理
END IF
SETPINコマンド
SETPINコマンドについてPicoMiteユーザマニュアルの説明を以下に示します。
構文:SETPIN pin, cfg [, option]
SETPINコマンドは外部I/Oピンを設定します。pinは設定するI/Oピン、cfgはピンに設定するモード、optionはオプションのパラメータです。cfgはキーワードで、以下のいずれかになります。
cfg | ピンの動作 |
---|---|
OFF | 未設定または非アクティブ |
AIN | アナログ入力(入力電圧を測定します) |
ARAW | 0~1023の値を返す高速アナログ入力 |
DIN | ディジタル入力 optionを省略した場合、入力はハイインピーダンスになります。 optionがキーワードPULLUPまたはPULLDOWNの場合、約50µAの定電流を使用して入力ピンを3.3Vにプルアップまたはプルダウンします。RP2350チップのバグのため、8.2K以下の抵抗を使用してプルダウンを実装することをお勧めします。 |
FIN | 周波数入力 optionは、ゲート時間(入力サイクルをカウントする時間の長さ)を指定するために使用できます。10msから100000msまでの任意の数値を指定できます。PIN()関数は、使用されるゲート時間に関係なく、常にHz単位で正しくスケーリングされた周波数を返します。 optionを省略した場合、ゲート時間は1秒になります。 ピンはGP6、GP7、GP8、またはGP9のいずれかになります(OPTION COUNTで変更できます)。 |
PIN | 周期入力 optionは、周期測定を平均化する入力サイクル数を指定するために使用できます。1から10000までの任意の数値を指定できます。PIN()関数は、平均化に使用されるサイクル数に関係なく、常に1サイクルの平均周期をms単位で正しくスケーリングされた値で返します。optionを省略した場合、1サイクルの周期のみが使用されます。ピンはGP6、GP7、GP8、またはGP9のいずれかです(OPTION COUNTで変更できます)。 |
CIN | カウント入力 optionを使用して、カウントを開始するエッジを指定できます。プルアップまたはプルダウンが有効になっている場合、 2はプルアップありの立ち下がりエッジ、 3はプルアップなしで立ち下がりエッジと立ち上がりエッジの両方でカウントを開始するエッジ、 5はプルアップありの両エッジでカウントを開始するエッジを指定します。 optionを省略した場合、立ち上がりエッジでカウントを開始します。 RP2350チップのバグのため、プルダウンは推奨されません。 ピンはGP6、GP7、GP8、またはGP9のいずれかです(OPTION COUNTで変更できます)。 |
DOUT | デジタル出力 optionはこのモードでは使用されません。 |
関数PIN()
およびPORT()
を使用して、1つまたは複数の出力ピンの値を返すこともできます。
PIN関数
PIN
関数についてPicoMiteユーザマニュアルの説明を以下に示します。
構文:PIN(pin)
外部I/Oピンの値を返します。0はデジタルLow、1はデジタルHighを意味し、アナログ入力の場合は測定された電圧が浮動小数点数で返されます。
周波数入力は周波数をHz単位で返します。周期入力は周期をミリ秒で返し、カウント入力はリセット以降のカウントを返します(カウントは立ち上がりエッジで行われます)。カウント入力は、ピンをカウント入力にリセットすることでゼロにリセットできます(既にそのように設定されている場合でも)。
ピンが出力として設定されている場合、この関数は出力設定値(つまり、HighまたはLow)を返します。これは、特にピンがオープンコレクタ出力として設定されている場合は、実際の出力電圧と異なる場合があります。