この記事をシェアしよう!

【第5回】のタクトスイッチによるスクリプト制御を使って、【第4回】の”Lチカ蛍”をon/offさせてみます。

今回は、2つのスクリプトを組合わせて新たなスクリプトを組立てる手法と変数モニターの操作に注目してください。

今回使った部品

  • Raspberry Pi 3 Model B × 1
  • 40Pinフラットリボンケーブル
  • 40Pin T型GPIO拡張ボード
  • ブレットボード × 1
  • LED × 1
  • 抵抗 220Ω × 1
  • タクトスイッチ
  • ジャンプワイヤー(オス/オス) × 4

実体配線図

Raspberry Piとブレッドボードは【第2回】で紹介したT型GPIO拡張ボードで接続します。

回路と配線は【第5回】と同じです。タクトスイッチの向きに気を付けてください。

予め、新たなプロジェクトを名前を付けて保存しておく

【第4回】のときと同じように「Scratch 1.4」を起動し、GPIOサーバーを開始しておきます。

メニューバーの「ファイル」→「開く…」をクリックします。

現れた「プロジェクトを保存」画面の右にある「pi」ボタンをクリックします。

表示されたフォルダから、ベースとするプロジェクトが保存されたフォルダを選択します。今回は、【第5回】で作ったプロジェクト”LED_SW”を保存したフォルダ「Scratch_GPIO」をダブルクリックします。

タクトスイッチでLEDをon/offさせるプロジェクト”LED_SW”を選択して「OK」ボタンをクリックします。

間違えて上書きしてしまわないように、予めメニューバーの「ファイル」→「名前を付けて保存」をクリックし、別プロジェクトとして保存しておきます。

画面上中央に保存するフォルダが表示されていることを確認し、「新しいファイル名」の入力蘭に新しいプロジェクト名を入力して「OK」ボタンをクリックします

ベースのスクリプトを作る

ブロック「もし< ( gpio4▼センサーの値 ) = ( 1 ) ]なら「」でなければ「」」の上側のブロック「 ( gpio17on▼ ) を送る」をマウスでブロックパレットに移動します。

メニューバーの「ファイル」→「保存する」をクリックしてプロジェクトを上書きします。

参照するスクリプトを名前を付けて保存しておく

メニューアイコンから「プログラミング」→「Scratch」をクリックして「Scratch 1.4」をもうひとつ起動します。

もうひとつの「Scratch 1.4」のメニューバーから「ファイル」→「開く…」をクリックします。

現れた「プロジェクトを保存」画面の右にある「pi」ボタンをクリックします。

表示されたフォルダから参照するプロジェクトが保存されたフォルダをダブルクリックします。

今回参照する【第4回】で作成したプロジェクト”LED_hotaru”をを選択して「OK」ボタンをクリックします。

間違えて上書きしてしまわないように、あらかじめメニューバーの「ファイル」→「名前を付けて保存」をクリックし、別プロジェクトとして保存しておきます。

「プロジェクトを保存」画面の上中央に保存するフォルダが表示されていることを確認し、「新しいファイル名」の入力蘭に新しいファイル名を入力して「OK」ボタンをクリックします

参照するスクリプトを作る

上側のブロック「 ( 32 ) 回繰り返す」の内側のブロックを全て、一旦、外に出します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」の下のブロックを引き離します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」を右クリックして削除します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」から引き離したブロックを元の位置に戻します。

下側のブロック「 ( 32 ) 回繰り返す」の内側のブロックを全て、一旦、外に出します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」の下のブロックを引き離します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」を右クリックして削除します。

ブロック「もし<  ( スペース▼ ) キーが押された >なら」から引き離したブロックを元の位置に戻します。

ブロック「緑の旗がクリックされたとき」から下のブロックを全て引き離します。

ブロック「緑の旗がクリックされたとき」を右クリックして削除します。

メニューバーの「ファイル」→「保存する」をクリックして参照するスクリプトを上書きします。

LEDの明滅スクリプトを作る

カテゴリー「制御」のブロック「 ( config17out▼ ) を送る」の”▼”をクリックして出るメニューから「config17outputpwm」をクリックします。

できたブロック「 ( config17outputpwm▼ ) を送る」をスクリプトエリアに引き出します。

カテゴリー「変数」のブロック「 ( pwmout▼ ) を ( 0 ) にする」をスクリプトエリアに引き出し、ブロック「 ( config17outputpwm▼ ) を送る」の下に繋ぎます。

カテゴリー「変数」のブロック「pwmout」をスクリプトエリアに引き出します。

カテゴリー「演算」のブロック「 ( ハロー ) と ( ワールド ) 」をスクリプトエリアに引き出します。

ブロック「pwmout」をブロック「 ( ハロー ) と ( ワールド ) 」の”( ワールド )”に当て嵌めます。

ブロック「 ( ハロー ) と ( pwmout ) 」の”ハロー”をクリックして”gpio17pwm”で上書きします。

カテゴリー「制御」のブロック「 ( config17out▼ ) を送る」をスクリプトエリアに引出します。

ブロック「 ( gpio17pwm ) と ( pwmout ) 」をブロック「 ( config17out▼ ) を送る」の”(  ▼ )”に当て嵌めます。

カテゴリー「制御」のブロック「 ( 1 ) 秒待つ」をブロック「{ ( gpio17pwm ) と ( pwmout ) }を送る」の下に繋ぎます。

カテゴリー「変数」のブロック「  ( pwmout▼ ) を ( 1 ) ずつ変える」をブロック「 ( 1 ) 秒待つ」の下に繋ぎます。

カテゴリー「制御」のブロック「 ( 10 ) 回繰り返す」の内側に3つのブロックを抱え込ませます。

PWMの0~1023の1024ステップを32ステップづつ変化させる為、ブロック「  ( pwmout▼ ) を ( 1 ) ずつ変える」の”1″を”32″で上書きします

PWMの0~1023の1024ステップを32ステップづつ32回で変化させる為、ブロック「 ( 10 ) 回繰り返す」の”10″を”32″で上書きします。

LEDの明滅サイクルを ( 32×2×0.02=1.28秒 ) とする為、ブロック「 ( 1 ) 秒待つ」の”1″を”0.02″で上書きします。

ブロック「 ( 32 ) 回繰り返す」を右クリックして出るメニューから「複製」をクリックします。

複製したスクリプト「 ( 32 ) 回繰り返す」を上下に繋ぎます。

複製したスクリプトの後半でLEDの明るさを下げる為、ブロック「  ( pwmout▼ ) を ( 32 ) ずつ変える」の”32″を”32″で上書きします。

ブロック「ずっと」の内側にLEDを明滅させるスクリプトを抱え込ませます。

ブロック「ずっと」をブロック「 ( pwmout▼ ) を ( 0 ) にする」の下に繋ぎます。

LEDの明滅スクリプトをベースのスクリプトに組み込む

LEDを明滅させるスクリプト全体をベースのブロック「もし<  ( スペース▼ ) キーが押された >なら」の内側に抱え込ませます。

スクリプトを実行してみる

画面右上の「緑の旗」をクリックするとスクリプトが起動し、「緑の旗」の色も明るい緑に変わります。

スクリプト起動中にタクトスイッチを押すとLEDの明滅が始まり、タクトスイッチを押している指を離すととLEDの明滅は停止するのですが、離すタイミングとLEDの消灯のタイミングが合いません。

気が付くと、ステージ上の変数モニターが「pwmout ( ) 」だけで、何故か「gpio4センサーの値 ( ) 」が消えてしまっているではありませんか。

画面右上の「赤丸」ボタンを押してスクリプトを停止します。

変数モニターの再起動

ブロック「 ( gpio4▼ )センサーの値」を一旦、ブロック「もし< ( gpio4▼センサーの値 ) = ( 1 ) >なら「」でなければ「」」から引き出します。

カテゴリー「調べる」のブロック「 ( スライダー▼ ) センサーの値」の”▼”をクリックして出るメニューから”gpio4″をクリックします。

できたブロック「 ( gpio4▼ ) センサーの値」のチェックボックスにチェックを入れます。

画面右上ステージの変数モニター「pwmout ( 0 ) 」の上に重なって「 gpio4センサーの値 (0) 」が現れるので、重ならないように下にずらします。

タクトスイッチを押すと、変数モニター「 gpio4センサーの値 (0) 」の”0″が”1″になることを確認しておきます。

ブロック「 ( gpio4▼ )センサーの値」を元の位置に戻しておきます。

もう一度、スクリプトを実行する

画面右上の「緑の旗」をクリックしてスクリプトが起動中にタクトスイッチを押すと変数モニター「 gpio4センサーの値 (0) 」の”0″が”1″になり、「pwmout (0) 」の”0″が”0から1023″の間で刻々と上下しながらLEDの明滅が始まります。タクトスイッチを押している指を離すとLEDの明滅は停止するのですが、やはり離すタイミングとLEDの消灯のタイミングが合いません。

LEDが増光中のタイミングでタクトスイッチから指を離しても、「 gpio4センサーの値 」は”0″になるのですが、「pwmout」の値はそこから一旦、”1023″まで上り詰めて、また”0″になった状態で停止し、LEDはそのときまで消灯しません。

画面右上の「赤丸」ボタンをクリックしてスクリプトを停止します。

LED明滅中の消灯スクリプトを組込む

上側のブロック「 ( 32 ) 回繰り返す」の内側のブロックを一旦、外に出します。

下側のブロック「 ( 32 ) 回繰り返す」の内側のブロックを一旦、外に出します。

ブロック「 ( 32 ) 回繰り返す」から外に出したブロックをブロック「ずっと」の内側に抱え込ませます。

もうひとつのブロック「 ( 32 ) 回繰り返す」から外に出したブロックもブロック「ずっと」の内側に抱え込ませます。

ブロック「もし< ( gpio4▼センサーの値 ) = ( 1 ) >なら「」でなければ「」」の「< ( gpio4▼センサーの値 ) = ( 1 ) >」を右クリックして現れるメニューから「複製」をクリックします。

複製したブロック「< ( gpio4▼センサーの値 ) = ( 1 ) >」をブロック「もし< >なら」の”< >”に当て嵌めます。

LED増光中の消灯スクリプト「もし< ( gpio4▼センサーの値 ) = ( 1 ) >なら」を元のスクリプトに戻します。

ブロック「もし< ( gpio4▼センサーの値 ) = ( 1 ) >なら「」でなければ「」」の「< ( gpio4▼センサーの値 ) = ( 1 ) >」を右クリックして現れるメニューから「複製」をクリックします。

複製したブロック「< ( gpio4▼センサーの値 ) = ( 1 ) >」をもうひとつのブロック「もし< >なら」の”< >”に当て嵌めます。

LED減光中の消灯スクリプト「もし< ( gpio4▼センサーの値 ) = ( 1 ) >なら」を元のスクリプトに戻します。

3度目のスクリプトを実行する

画面右上の「緑の旗」をクリックしてスクリプトが起動中にタクトスイッチを押すと、ステージの変数モニター「 gpio4センサーの値 」が”1″になってLEDが明滅します。

今度はタクトスイッチを押している指をどんなタイミングで離しても、「 gpio4センサーの値 」が”0″になるのと同時に「pwmout」はそのときの値のままで止まりますがLEDはすぅっと消灯します。

画面右上の「赤丸」ボタンをクリックしてスクリプトを停止します。

完成したプロジェクトを上書き保存する

メニューバーの「ファイル」→「保存する」をクリックしてプロジェクトを上書きします。

次回は、”Lチカ蛍”を人感センサーからの入力でon/offさせるプロジェクトを紹介したいと思います。

この記事をシェアしよう!