プログラミング入門

HSP公式リンク

ラズベリーパイ版HSP 紹介ページ

OpenHSP GitHub ラズベリーパイ版HSP配布

HSPオンラインマニュアル

HSPオンライン命令一覧

HSPTV最新情報・掲示板 Windows版HSP配布

 

HSP には20年以上の歴史があり、さまざまなOS上で動くため、その解説や情報ページがたくさん存在します。はじめは大量の情報に戸惑ってしまうかもしれません。解説ページによってはHSP最新バージョンに対応した内容ではないこともあります。情報をさがしたり質問したりするときは、自分の求める情報が HSP3.5以降のRaspberryPi版の情報 であることを意識すると間違えが起きにくくなります。

【 参考 】 HSP 全体図

HSPプログラムの標準的な命令や文法に関しては、Windows版や過去のバージョンを対象に解説されているサイトからでも多くのことが学べます。

HSP は、BASIC(ベーシック)という、昔たいへん人気のあったプログラミング言語に似ていて、誰にでも覚えやすく作りやすい、はじめて挑戦するのにぴったりの言語です。

技術環境の変化と多機種への対応、さまざまなユーザーの要望を実現するために拡張と進化を遂げ、現在のHSPは、なんでも自由に実現できる力強いプログラミング言語になっていますが、そのおおもとの「だれにでもたのしく簡単にプログラミングが出来てすぐ実行できる」という根っこの部分は今もまったく変わっていません。(HSPプログラミングコンテストには、毎年たくさんの小学生や、趣味でプログラミングをはじめたという年配の方の応募があります。)


 

さて、

ここでは、ほかのサイトでも勉強できるHSPの基本レッスンは飛び越えて、いきなり Raspberry Pi の大きな特長である「GPIO」というピンと、自作した電子工作(回路)をつなげて、それを制御するプログラムについて解説します。

もちろん、実際に電子工作をするかしないか決めるのは開発者の選択です。RaspberryPi版HSP は、外部のハードウェアとGPIO接続して連携動作する装置を作り出すこともできますし、または、電子工作無しで画面上(GUI上)でのみ動作する様々なアプリケーション・ソフトウェアを開発することもできます。どちらを作るかは開発者の自由です。

GPIO入出力の基本

 

devcontrol 命令によりGPIO入出力を行います。

まずは 出力

 devcontrol "gpio", ポート番号, 出力値

・「ポート番号」は、GPIOのポートを数値で指定します。

・「出力値」は、1(ON) か 0(OFF) を数値で指定します。

つまり、実際は下記のような書き方になります

devcontrol "gpio", 2, 1

 

つぎは 入力

 devcontrol "gpioin", ポート番号

HSPのプログラム実行後に、ポートからなにか入力(変化)があれば、HSPが常時保持している システム変数 stat に 0 か 1 が代入されます。 (エラーが発生した場合は -1 が代入されます。)

プログラム中で stat を参照することで、入力を知ることができます。

実際は下記のような書き方になります

devcontrol "gpioin", 5

サンプルコード

ここにあるサンプルコードは、HSPスクリプトエディタ( hsed )を起動して、コピーペースト、または、自分で打ち込んで、上部メニュー[ HSP ] – [ run ] 実行するだけで動作します。実行の中断は [ esc ]キー か、 [ ctrl ] + [ C ] キーを押します。

Raspberry Pi 本体のGPIOポートから先に接続する電子工作は、各自が自由に用意してください。(簡単な電子工作の例をこちらのページで紹介しています。)

 

 

例) GPIO2番 を ON にしてLEDを点灯させる

 #include "hsp3dish.as"
 devcontrol "gpio", 2, 1
 repeat
 redraw 0
 redraw 1
 await 16
 loop

例) GPIO2番 を OFF にしてLEDを消す

 #include "hsp3dish.as"
 devcontrol "gpio", 2, 0
 repeat
 redraw 0
 redraw 1
 await 16
 loop

GPIOの番号は、操作したいポート(電子工作の都合)にあわせて自由に変更してください。

 

サンプルコード内のこの部分

 repeat
 redraw 0
 redraw 1
 await 16
 loop

がどういう役に立っているのか現時点ではよくわからないかもしれませんが、とりあえず、これは HSP3Dish を使用したプログラミング の際の「お約束」だと思っておいてください。

このように

  • repeat や goto 命令によって メイン処理が実行され続ける構造
  • redraw 0 と redraw 1 によって画面更新が毎回実行される構造
  • await 命令の待ち時間によって各種入力やHSPのシステム処理がまかなわれる構造

が、HSP3Dishのプログラムのなかには必要になりますので、一見、役に立っていないように思えてもこの部分のコードは消さずに、コードのなかに残しておいてください。

『 Raspberry Pi の画面上でうごかすHSPプログラムは、HSP3Dish というランタイムで動かす 』 というHSPの決まりがあります。なので、最初の一行目に #include “hsp3dish.as” と書きます。

例) LEDをつけたり消したりする(点滅)

#include "hsp3dish.as"

repeat 
redraw 0

devcontrol "gpio", 2, 1 
await 200

devcontrol "gpio", 2, 0 
await 200

redraw 1
await 16
loop

複数のポートに出力するサンプルコード

例) 5つ設置されたLEDをつけたり消したりする

#include "hsp3dish.as"

repeat 
redraw 0

devcontrol "gpio", 17, 0 
await 80
devcontrol "gpio", 18, 0 
await 80
devcontrol "gpio", 22, 0 
await 80
devcontrol "gpio", 27, 0 
await 80
devcontrol "gpio", 13, 0 
await 80

devcontrol "gpio", 17, 1 
await 80
devcontrol "gpio", 18, 1 
await 80
devcontrol "gpio", 22, 1 
await 80
devcontrol "gpio", 27, 1 
await 80
devcontrol "gpio", 13, 1 
await 80

redraw 1
await 16
loop

サンプルコード内で数値が直接書かれている箇所は、変数 に置き換えることもできます。そうすることで、プログラムを短く効率のよいものに改良していくことができます。

await の待ち時間を変えたり、LEDをつける順番、消す順番の組み合わせを工夫するだけでも、個性的な光の演出プログラムを生み出すことができます。


ポートの入力を検知するサンプルコード

例) 回路上に設置されたボタンが押された(または離された)ことを検知

#include "hsp3dish.as"

repeat 
redraw 0

devcontrol "gpioin", 5
pos 0, 10
mes stat

devcontrol "gpioin", 6
pos 100, 10
mes stat

redraw 1
await 16
loop

devcontrol 命令 の “gpioin” でポートの状態を調べます。

  • ボタンが押されていれば 0
  • ボタンが押されていなければ 1

が検出されます。

検出した結果を知るために mes 命令 で画面にその値を表示しています。 stat はシステム変数として予約・確保されていますのでいつでも参照できます。その直前にある pos 命令 は 文字をどこに表示するか(描画をどの位置から始めるか)を指定する命令です。


学習のヒント

ここまでは GPIO関連の命令だけにしぼって説明してきました。

「これでは物足りない」「もっと本格的にプログラミングしたい」という気持ちになりましたか?

通常のHSPプログラミングで使用できる 命令は、RaspberryPi版HSPのプログラムコードのなかでも その多くが同じように使用できます。一般的な if 文による条件判定や for 文による繰り返しや 、自由に処理の飛び先が指定できる ラベル も使えます。もちろん 変数 も使えます。

  • HSP公式 命令一覧 「標準機能」と「HSP3Dish」との項目が参考になるはずです。
  • HSP公式マニュアル このあたり をざっと流し読みしてみると雰囲気がつかめるかもしれません。

ただし、いくつかの命令は HSP3Dish では使用できなかったり、動作結果が異なったりするものもあります。(各種OSに対応するため。) くわしくはこちらを参照ください。HSP3Dish 解説

  • 現在 本屋さんで手に入る HSP3.5公式書籍『 HSPでつくる! はじめてのプログラミング HSP3.5+3Dish入門 』(秀和システム 刊)も参考になるかもしれません。

HSP(HSP3Dish)の命令をおぼえる一番のおすすめ方法

『 OpenHSPフォルダのなかにある Sampleフォルダ内に入っているサンプルプログラムを自分なりに改造してみる 』ことです。

末尾が ○○○.hsp となっているファイルはそれぞれが一つのミニプログラムになっていますので、いろいろ見てみましょう。

OpenHSPフォルダ内にある hsed をダブルクリックしてHSPスクリプトエディタを起動して、サンプルプログラム(例 block3.hsp)を開いてみましょう。プログラムの中身がみられます。

そこにある命令や構文はすべてHSP3Dishプログラミングで使えるものですので、自分が使いたい、試してみたい、と思える部分(処理)を見つけたら、その部分のコードを自由にコピーして貼り付けたり、お手本にして、自分のプログラム内に同じように打ち込んで、取り入れてみましょう。

さらにアイディアを進めたければ、このページで学習した内容と組み合わせて、例えば、サンプルプログラムの「ブロック崩しゲーム」を改造して、ボールとブロックが当たった判定が成功するたびに外部に接続したLEDを点滅させたり、SCOREがある得点以上になるとLEDの点灯が一つづつ増えていく、みたいなことが実現できたら、それであっという間に自分オリジナルのピンボールマシンが完成(?)します。

なにを、どこまで、できるのかは、あなたの発想次第です。

さあ、それでは、自由に たのしく 自分の好きなプログラムをつくってみましょう!