Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

Microbit ラズパイ Midi音源〜フリーハンドで音源を鳴らす仕組み4〜

今回はラズパイに作成したリポジトリへ、PC上から作成したコードを送るところまでやります。

ちなみに、前回はラズパイに、gitコマンドとjavaコマンドをインストールしてgithubに作成したリポジトリからプルできることを確認しました。

なので、Javaコードを作成するところから行きます。

追伸使用する環境はEclipseを使用します。以下のリンクを参照ください。

開発ツール(IDE)のインストール方法

Windows版Eclipseのインストール方法

Javaの基本を学習するためのフロー(自作です)

アプローチ方法を何個か作成しました。

Java はじめて 学習フロー

Java Mid Basic〜Javaの基本Lv2〜

そしてEclipse

JavaServerを開発するのにEclipseを使用します。そして、Gitと接続してソースを下の様に渡して行きたいと思います。

Eclipse -> Github -> RPi

前回は、Github -> RPiを確認したので、今度はEclipse -> Githubを確認します。

準備

Eclipseに新しいSocketServerプロジェクトを作成します。

作成方法は、こちらを参照してください。

そして、ハローワールドを作成して、Gitへコミットします。

Eclipseからローカルのgitへコミットし、それをリモート(Guthub)へとプッシュします。

こんな感じで、コミットされました。

f:id:Takunoji:20191006195910p:plain

コミットしたソース

でわでわ。。。

 

Microbit ラズパイ Midi音源〜フリーハンドで音源を鳴らす仕組み3〜

今回は、ラズパイに開発したものをダウンロードする仕組みを作ります。

使用するのはgitコマンドを使用してやります。

開発環境など

開発環境としては自分の端末(Mac book pro)とラズパイ2(古いですが。。。)を使用します。なので下の様に接続します。

f:id:Takunoji:20191006171633p:plain

PCとラズパイ接続の絵

初めに、ラズパイのSSH接続設定が必要です、これに関しては、こちらの記事に記載していますので、接続した後から記載していきます。ちなみに失敗しているものも記載しているのでうまくいかないときはこちらの記事もどうぞ。

結局のところは、SSH接続するときはラズパイも起動してIPを確かめながらやったほうがてっとり早いということでした。ちなみに接続時に調べたことは下の様なところです。

  1. Mac(自分のPC)からifconfigコマンドを叩く
  2. 出力された内容で調べたラズパイのIPアドレス(192.169.4.2)を探す

f:id:Takunoji:20191006172952p:plain

SSH接続後

SSH接続してから?

必要なコマンドがあるかどうか調べます。必要なコマンドは以下の2つです。

  1. javaコマンド(インストール方法↓)
    sudo apt-get install openjdk-9-jdk -y
  2. gitコマンド(インストール方法↓)
    $ sudo apt-get install git-all

それぞれ、apt-getでインストール可能です。

接続して、上記のコマンドが使えるかどうか確認します。

f:id:Takunoji:20191006174115p:plain

バージョン確認=インストールされている確認

インストール済みだったので次の作業に入ります。まずは以下の確認を行います。

f:id:Takunoji:20191006174250p:plain

カレントディレクトリ、ファイルの確認

以前やったことの残骸が残っていますが、まぁ放っておきましょう。

今回のやりたいことはGitからJavaソースをダウンロードしてコンパイルしてJARファイルを作成する(ビルド)することです。なので以下の手順を踏みます。

  1. Githubに開発用のリポジトリを作成します。
  2. ローカル(ラズパイ)にGitリポジトリを作成(プルするため)します。
  3. Githubとの疎通確認をします。(ファイルをプルします)

とりあえずはここまでの作業を行います。

Gitリポジトリの作成

ラズパイの「piユーザー」ルートのディレクトリ「/home/pi」にdevelopフォルダ(ディレクトリ)を作成してその下にリポジトリを作詞します。

初めから入力したコマンドを見てみると以下の様になります。

f:id:Takunoji:20191006174918p:plain

コマンド入力履歴

実行コマンド内容

mkdir -> フォルダの作成を行います、「develop」フォルダの作成を行いました。

cd     -> カレントディレクトリを移動します。カレントディレクトリから./developに移動しました。

git init  -> gitリポジトリを作成(初期化)しました。

Githubに開発用リポジトリをつくる

まずは、Githubにアクセスします。Gitのアカウントを持っていなければアカウントを作成してください。無料です。

そしてすでにGitアカウントを持っている人であれば、下の様にある「New」ボタンから作成できます。

f:id:Takunoji:20191006175531p:plain

そして、下の様な画面が見れるので必要な情報を入力します。

f:id:Takunoji:20191006175525p:plain

そして作成したら下の様に画面が観れると思います。

 

f:id:Takunoji:20191006175849p:plain

リポジトリの画面

下の方にある「SecketServer」の文字はREADMEというファイルを編集することで変更できます。毎度おなじみのマークダウンで記載できます。

それができたら、下の様に並んでいるボタンのなからから「Clone or download」ボタンを押下します。

f:id:Takunoji:20191006180126p:plain

ボタンの並び

すると下の様にURLが表示されています。これをコピーします。

f:id:Takunoji:20191006180258p:plain

URLの表示

そして、SSH接続しているターミナルを開きgit clone コピーしたURLを入力します。

f:id:Takunoji:20191006180504p:plain

git cloneの結果

作成したローカルリポジトリ(フォルダ)に作成したリモートリポジトリ(Github)のリポジトリをコピー(クローン)できました。その証拠に「README.md」ファイルが存在します。

試しに中を見て観ます。

f:id:Takunoji:20191006180733p:plain

作成したGithubリポジトリの内容が記載されています。

これを再度プルして上の内容が更新されることを確認します。

ディレクトリを移動して作成したSocketServerのディレクトリに移動して以下のコマンドを入力します。

>git pull

そうすると。

f:id:Takunoji:20191006183423p:plain

README

こんな感じで更新されています。

 

今回はここまでにします。

でわでわ。。。。

 

 

Microbit ラズパイ Midi音源〜フリーハンドで音源を鳴らす仕組み2〜

前回、やることを決めたので、どこから着手するか?を考えます。

以下のものはやることの一覧です。

<Topレベル: 大まかな概要>

  1. マイクロビットとラズパイをBluetoothで接続して連携できること
  2. ラズパイからMidi音源Midiメッセージを送信し鳴らせること

<Middleレベル: >

  1. ラズパイでBluetoothドングルでMicrobitと連携する(特定のもので良い)
  2. ラズパイでJavaサーバー(アプリ)を起動する
  3. Javaサーバー(アプリ)でMicrobitのメッセージを受ける
  4. 同様に、受けたメッセージからMidi音源を鳴らすMidiメッセージを作成
  5. MidiメッセージをMidi音源(RT-123)へ送信する

<Lowレベル: >

  1. ラズパイにBluetoothのネットワークインターフェース設定を行い自分のマイクロビットと接続できる様にする
  2. Javaサーバーアプリケーション(Socketサーバー)を作成する
  3. JavaサーバーAPでMidiメッセージの作成と送信を行う
  4. JavaサーバーAPでマイクロビットからのメッセージを受ける
  5. マイクロビットからのメッセージにより以下のMidiメッセージを作成
    A. 12小節分のドラム・ベースの伴奏を行うMidiメッセージを生成する
    B. 上と違うパターンのものを生成する
    A, BのMidiメッセージをMidi音源に送信する

着手すること

まずは、核になるラズパイから着手していこうと思います。

ラズパイでは以下の様に動かすために必要なことは以下のの様になります。

  1. Bluetooth接続するためのネットワーク設定
    ※リンク先にはBluetooth接続に使用したコマンドなどをメモしました。
  2. 開発を行うためのLANケーブル接続の設定
  3. 作成したJavaアプリをラズパイにダウンロードして実行する設定
    ※起動時にJavaアプリを起動する設定を行う
  4. Javaアプリの作成(Midiメッセージの生成)処理
  5. Midiメッセージの送信処理の作成

なので、まずは開発を行うためのLANケーブルの接続設定を行います。というか接続設定を行いました。こちらの記事に記載しています。

そして、開発を行うのに、以下の様な手順でやりたいと思っています。

  1. Mac(PC)で作成、テスト
  2. 作成したプログラムをラズパイにダウンロード
  3. ラズパイでダウンロードしたJavaファイルをコンパイルして起動

とこの様にやりたいと思っています。

というわけで、ラズパイの起動設定を以下の様に行います。

  1. ラズパイに電源が入る
  2. Javaソースを自分のGitからダウンロード(プル)する
  3. プルしたソースをコンパイルしJARファイルに出力
  4. 出力したJARファイルを起動する
  5. BluetoothでMicrobit(自分のもの)を接続をここみる
  6. 接続ができたら、JavaサーバーでMicrobitからのメッセージ送信を待機する

この様な形で実行する様にやりますが、現状できることから考えるとラズパイに電源が入ったらGitからソースをプルしてコンパイル(ビルド)することが必要なのですが、コンパイルするものを作成する方から着手しようと考えています。

Javaサーバーを作る

上で考えた様に、ラズパイで起動する、Javaサーバーを作成することを考えます。

その進め方については次回にいたします。

 

でわでわ。。。

 

Microbit ラズパイ Midi音源〜フリーハンドで音源を鳴らす仕組み1〜

思いつきですが、Microbitからラズパイ経由でMidi音源を鳴らす仕組みを作ろうと思います。イチからやっていきますので、まずはどの様なものを作成するか?から考えます。

どんなものを作る?

タイトルにある様に「Microbit〜ラズパイ〜Midi音源」とデータを送信し、音源を鳴らす仕組みを作ろうと思います。下の様なイメージです。

f:id:Takunoji:20191006154601p:plain

仕組みのイメージ

これで一体何をするのか?

シンプルに、手に装備したマイクロビットから片手だけでMidi音源の再生と停止を行える様なものを作成しようと考えています。ちなみにマイクロビットは下の様な形で装備します。

名付けてアーマード・マイクロビット!

実際は、サポーターにマジックテープでマイクロビットをつけただけですが(笑)

このマイクロビットから直接音源を鳴らそうと試みたけどうまくいかず。。。

www.zenryokuservice.work

知り合いに話をしたら「ラズパイ経由でやれば?」とアドバイスをいただきました。

確かに、ラズパイならJavaアプリケーション(画像なしのCUI)で簡単なメッセージ(Aボタン押下など)を受けて、JavaからMidiメッセージを送信することを考えています。

そんなわけで、上の様なイメージになりました。

最終的にならすMidi音源は下のものになります。

f:id:Takunoji:20191006155937p:plain

Zoom RT-123

必要なこと

まずは、どうしたらできるか?を考えます。自分は以下の様に考えました。

<Topレベル: 大まかな概要>

  1. マイクロビットとラズパイをBluetoothで接続して連携できること
  2. ラズパイからMidi音源Midiメッセージを送信し鳴らせること

<Middleレベル: >

  1. ラズパイでBluetoothドングルでMicrobitと連携する(特定のもので良い)
  2. ラズパイでJavaサーバー(アプリ)を起動する
  3. Javaサーバー(アプリ)でMicrobitのメッセージを受ける
  4. 同様に、受けたメッセージからMidi音源を鳴らすMidiメッセージを作成
  5. MidiメッセージをMidi音源(RT-123)へ送信する

<Lowレベル: >

  1. ラズパイにBluetoothのネットワークインターフェース設定を行い自分のマイクロビットと接続できる様にする
  2. Javaサーバーアプリケーション(Socketサーバー)を作成する
  3. JavaサーバーAPでMidiメッセージの作成と送信を行う
  4. JavaサーバーAPでマイクロビットからのメッセージを受ける
  5. マイクロビットからのメッセージにより以下のMidiメッセージを作成
    A. 12小節分のドラム・ベースの伴奏を行うMidiメッセージを生成する
    B. 上と違うパターンのものを生成する
    A, BのMidiメッセージをMidi音源に送信する

ちなみに、Midi音源はUSB経由でラズパイからMidiメッセージを送信されるのでそのためのインターフェース(ここではUSBケーブル)を購入しました。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

ROLAND UM-ONE MKII USB MIDIインターフェース
価格:3960円(税込、送料無料) (2019/10/6時点)

楽天で購入

 

これで、大まかなところは決まった形になります。

結構な、作業量になってしまいました。。。

しかし、千里の道のりも一歩目からです。

 

今回はここら辺りにします。

でわでわ。。。

 

 

ラズパイ 環境構築 〜LANの設定を行う〜

今回は、ラズパイのネットワーク設定(LANケーブル使用)をやります。以前wifiの設定を行った時に使用したコマンドはこちらの記事に記載しました。

ネットワークコマンド

まずは、自分のラズパイ設定(ネットワーク)の確認を行います。久しぶりに触るので。。。

ifconfig

単純に「ifconfig」とターミナル(コマンドプロンプト)で入力するとネットワークインターフェースの一覧と各IPアドレスなどの情報が見れます。

自分のラズパイ上で実行してみるとネットワークインターフェースの一覧部分に「lo」と「wlan0」しかなく。。。こちらのサイトを参考に設定ファイルの修正を行いました。

ip aコマンド

ラズパイ上で「ip a」と入力してエンターキーを押下すると起動しているネットワークインターフェースの名前が一覧できIPアドレスも一覧できます。

lo: ループバック(自分のPCを指すIPアドレスのこと)

eth0: ほとんどのPCではLANケーブルを使用したネットワークインターフェースの名前

wlan0: wifiで使用しているネットワークインターフェースの名前

/etc/dhcpcd.congファイル

参考サイトには下の様に記載があり、その様に修正して見ました。書き方ルールは以下の通り

interface eth0
static ip_address=[設定したい固定IPアドレス]/24
static routers=[デフォルトゲートウェイIPアドレス]
static domain_name_servers=[DNSサーバーのIPアドレス]

固定IPアドレス」の部分に関しては、192.168.XXX.XXXの様に記入します。

自宅などのネットワークでは192.168.XXX.XXXの様になっているのでこの様に記載します。

細かいネットワーク関連の記事に関しては、こちらを参考にしました。

自分の設定ではLANのネットワークが起動時に動いていなかったので、動く様に設定を変更することにします。

ラズパイのネットワーク設定

「/etc/network/interfaces」が設定ファイルになります。なのでこのファイルの内容を確認してどの様になっているか見てみます。

ラズパイから以下のコマンドを入力して内容を見て見ます。

> cat /etc/network/interfaces

catコマンドで表示した後に「動かない」となったら「ctl + C」とかESCを押下してから「q」を押下するなどすれば元のコマンド入力に戻れます。

そして、自分のinterfaceファイルの内容は

iface eth0 inet dhcp

#address 192.168.0.88

の様にコメントアウトされていたので(自分でやった様にも思う。。。)これを戻します。つまり「#」を削除してコメントアウトしない様にします。

そしてラズパイを再起動、ラズパイ起動時にネットワークが起動しないと意味がないので「reboot」コマンドで再起動します。

ちなみに、テキスト編集に使用するのは「vi」(リンクは操作方法一覧)を使用しました。これはapt-getでインストールできます。「nano」を使用するのもありです。

SSH接続できなかった理由

早い話が、LANケーブルのネットワークが動いていなかったからでした。

なので、ラズパイのLANネットワークインターフェースの名前「eth0」をラズパイ起動時に動く様に設定します。

まとめ

<繋がらない理由>

・LANケーブルのネットワークインターフェース「eth0」が起動していなかった

SSHサーバーの起動設定をしていなかった

<対応>

SSHサーバーの設定をする

  1. ラズパイを起動して、「raspi-config」のコマンドを叩く
  2. SSH設定の部分を開きSSHサーバーを動く様に設定(ここを参考にしました)
  3. RPi再起動

・ネットワークインターフェースの設定

  1.  /etc/network/interfacesを開き以下の様に設定する
    もともと記載している設定に「auto eth0」の記載があるか確認
    全体的に下の様な感じです。
    auto lo # ループバックIPを自動起動
    iface lo inet loopback
    
    auto eth0 # eth0を自動起動
    iface eth0 inet static
        address 10.11.12.13
        netmask 255.255.255.0
    
    allow-hotplug ra0
    iface ra0 inet dhcp
    wpa-conf /etc/wpa.conf
  2. 再起動して「ip a」コマンドを実行しeth0が起動していることを確認する
    確認するポイントは「eth0」と書いてあるところに「192.168.XXX.XXX」の様にIPアドレスが表示されていることを確認する

やってみるとしたの様にMac(PC)からアクセスすることができました。

f:id:Takunoji:20191006122542p:plain

ラズパイにSSH接続

ちなみに、一番てっとり早いのはラズパイの画面を見ながらIPアドレスを確認して接続するのが一番です。ラズパイのIPアドレスを確認してしまえばあとはそのIPで接続します。

ssh ラズパイのユーザー名@IPアドレス」の様に入力してアクセスします。

具体的には「ssh pi@192.168.XXX.XXX」の様に入力します。接続するIPが192.168.0.1であればその様に入力します。

 

でわでわ。。。

 

 

 

WP to Twitterの設定方法〜プラグインをインストールした後にやること〜

今回は、ワードプレスで作成した記事をTwitterで投稿させるプラグインWP to Twitter」の設定方法に関して記載します。左のリンクは英語版です、つまり大元のホームページです。こちらが最終的に使用方法とか「うまく動かないとき」に参照すると解決するであろうページになります。

ちなみに、プラグインなどの説明はだいたい英語であることが多いので。。。

英語はできる範囲で学習中ですが、疲れている時などはGoogle翻訳を使用しています。
ここに説明部分であろう英文をコピペして確認します。

翻訳したものはいかに記載します。

翻訳内容
  1. TwitterTwitterを使用して開発者アカウントを申請する
    • このサイトをTwitterのアプリケーション登録ページでアプリケーションとして登録します 現在Twitterにログインしていない場合は、このサイトに関連付けるアカウントにログインします
    • <アプリ名に「Twitter」という単語を含めることはできません。
    • アプリケーションの説明は何でもかまいません。
    • WebサイトおよびコールバックURLは次のとおりです。自サイトのURL このアプリでは、他のURLフィールドは必要ありません。
    • アプリの使用方法を説明してください。
    • 例えば。 「このアプリは、新しいWordPressの投稿または他の種類のWordPressコンテンツに関する通知を、公開時または公開後にTwitterに送信するために使用されます。
    • Twitter開発者契約を読んで続行します。
  2. Twitterアプリの[権限]タブに切り替えます アクセス許可に「読み取りと書き込み」を選択します アプリケーションの設定を保存します
  3. [キーとアクセストークン]タブに切り替えて、コンシューマキーとシークレットを再生成し、アクセストークンを作成します。

こんな感じで翻訳できました。 ちょっとみづらいかもしれませんが。。。

設定を始める

f:id:Takunoji:20191005122508p:plain

WP to Twitterの設定画面ヘッダー

見た目で左のタブから入力していきます。つまりは上の1番からやっていきます。

1. Twitterの開発者アカウントを申請

ここから申請用のサイトに飛ぶことができます。このサイトに行きアカウントを作成します。自分はすでにアカウントを持っているのでアカウント作成に関しては記載しません。。。

そして、こちらのページでTwitter's application registration pageアプリケーションの登録(サイトを登録する様です)を行います。ヘッダ部分の右下らへんにあるボタン「Create an app」をクリックすると。。。

f:id:Takunoji:20191005124918p:plain

TwitterAP登録画面のヘッダー

 アプリケーションの登録画面が表示されますので上の注意書きに注意して記載します、「Twitter」という文言は使えない様です。

f:id:Takunoji:20191005125042p:plain

App登録画面

そして、入力するところの「App name(アプリ名)」「description(説明」はなんとかなるとして、「Web site url」に関してはプラグインの説明部分に表示されるのでそれを入力します。

最後に、「何にしようするか?」一番下にある「Tell us how this app will be used (required)」に入力します。

<ちょっとつまずいた>

・Web SiteのURLとCallBackのURLを入力する部分があり、2つとも同じURLになりました。ちょっとややこしいな。。。

f:id:Takunoji:20191005130646p:plain

それから「Create」ボタンを押下します。

2. Permissionタブを開く

f:id:Takunoji:20191005130910p:plain

APP登録後

アプリを登録すると、そのあとで上の様な画面が見れます。ここに「Permission」という文字があるのでそれをクリックします。

f:id:Takunoji:20191005131128p:plain

Permissionタブ

下の部分をみて「Read and Write」担っていることを確認します。

f:id:Takunoji:20191005131219p:plain

確認するところ

3. Keys and tokensタブを開く

先程と同様に、「Keyss and tokens」タブを開きます。そして、「Consumer API keys」をコピリます。

f:id:Takunoji:20191005131603p:plain

WPのプラグイン画面

上の様な入力部分にAPI KeyとSecretをコピって入力します。ちなみにこの2つの値は機密情報に入りますので公開しない様にしましょう。不幸になります。。。

ちなみに、さらに入力部分がWPの方にあります、これも入力する必要があります。まとめると「Consumer API keys」と「Access token & access token secret」の両方を入力する必要があります。

最後に「Connect to twitter」を押下します。

Twitterアクセスに成功すると下の様な感じで名前が出てきます。

 

f:id:Takunoji:20191005133334p:plain

 Twitterコネクションの取得完了

こんな感じでWPで記事を書く→Twitterへ投稿処理を自動化することができます。

でわでわ。。。

 

 

Microbit & Swift Play Grounds 〜iPadへのペアリング手順〜

今回は、iPadへのペアリングを再度記載します。というのも、接続して、別プログラムをインストールしてからまた接続するときにちょっと躓いたからです。

プログラムとしてはしたものを動かそうとしました。

f:id:Takunoji:20191004234201p:plain

そして、右上の方に「Connect microbit」というボタンが見えると思います。

ペアリング

これをクリックしてもうまくいかず。。。その隣にある「Pair microbit」を押下して下の様な画面へ移動します。

f:id:Takunoji:20191004234254p:plain

ここからは、以前と同じ様に入力します。そして、パスワードの様なものを入力します。

f:id:Takunoji:20191004234415p:plain

最後に「Pair」ボタンを押下して、ちょっとしないと正常に動きませんでしたが、正常に接続できました。

初めの「Pair microbit」ボタンがキーポイントだった様です。

今後もMicrobit + Swift PlayGroundsを続けます。プログラミングがちょっと複雑になってきました。

下の様なものが作れます。

 

そして、iPadとペアリングさせると下の様に動きます。

 

Microbit & Swift Play Grounds 〜ボタン押下:じゃんけんゲーム〜

今回は、前回に引き続きMicrobit + SwiftPlayGroundsの続きをやります。

表題の通りに「じゃんけんゲーム」を作成します。と言ってもシンプルなコードで作成できるので着手もしやすいと思います。

コード

-----------------------------------------------------------

clearScreen()

onButtonPressed( .A, handler: {

   animateFist()

   let randomNumber = random(in: 1 ... 3)

   if (randomNumber == 1) {

       rock.showImage()

   }

   if (randomNumber == 2) {

       scissors.showImage()

   }

   if (randomNumber == 3) {

      paper.showImage()

   }

})

-----------------------------------------------------------

 コード自体はこんな感じで書きました。SwiftPlayGroundsでは入力部分が決まっていてそこに穴埋めをする様な形でした。

 

f:id:Takunoji:20191004084415p:plain

コード

今回は、動画を撮る時間がなかったのでアップしていませんがのちに動画アップしようと思います。

コードの中身

clearScreen() => 表示しているLEDを全て消します。

onButtonPressed() => ボタンを押下した時のアクション処理のイベントを取得します。

このイベントハンドラメソッドの「handler」の部分でどの様な処理をするのか定義しています。

あとは、コードを見て、動かして。。。理解するのが良いと思います。

<実行結果>

余談

IPadで一度マイクロビットを接続してしまえば再接続などが簡単にできると思いますが、一度、ブラウザからダウンロードしたファイルなどをインストールすると、再度PlayGrounds用のファイルをインストールし直す必要がありますので注意です。

ちなみにセットアップはこちらの記事に記載しています。

 

Microbit カウンターを作る〜リズムを取りたいが、カウンターになってしまった〜

よく、バンドなどで「ワン・ツー。。。ワン・ツー・スリー・For!」とカウントを取ると思います。このときに、このカウントのスピードでハートをドキドキさせようとやってみました、

ちょっとうまく行かない

Microbitで、カウントをとったときにそのスピードでリズムを刻む様に作成したいと思い、作成に着手してみたものの。。。ちょっと難しい。。。

何が難しいのか?というのは理論的に(「〜を〜してやれば良い」という考え)は間違っていないと思うけど、想定通りに動かないというところ。

結局、動かないということは間違っているのであろう。作成しているプロジェクトはこちらです。

f:id:Takunoji:20190929223004p:plain

全体のコード

このコードで、マイクロビットにデプロイして動かしてみたところ、テンポを取るのにハートをドキドキさせているのですが、ドキドキのスピードがあまり変わらない現象が起きています。

表示スピードの問題なのでしょうか?

これは、正直のところ値が想定通りか確かめる必要があります。

なのでコードを修正して、デバックしようと思います。

現状のコードは長いですが。。。

f:id:Takunoji:20191001203625p:plain

コード1

f:id:Takunoji:20191001203758p:plain

コード2

f:id:Takunoji:20191001203813p:plain

コード3

デバック方法としては、このコードのWhileに入る前にrithmの値を表示して確認することです。

それではやってみます、デバック用のコードを追加してやります。

f:id:Takunoji:20191001204115p:plain

デバックコード

やってみたところ、数字の表示が流れるため読み取れず。。。

仕方ないので、点滅させる方向で実装してみました。

 

正確なところはわからない、確実にテンポ「♩=XXX」の様にはわからないがそれっぽい感じではあります。やはり。。。


表示方法を変える

この方法でやることにします、現在、ハートをドキドキさせてテンポを刻んでいますがこれを下の様な形に変更します。

<表示方法を変える>

今回は、マイクロビットの「MakeCode」から実行してみようと思います。

そのために、「6G」(衝撃を与える)から「shake」(振る)に変更して動かします。

 変更したところ

ハートをドキドキさせているところを時計の針の様に動かすことにしました。

単純に点灯させるLEDの数が少ないので処理のスピードに影響が出ないであろうと考えました。

実行結果

 

Microbit & Swift Play Grounds 〜ボタン押下イベント処理〜

https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category

今回は、マイクロビットのボタンを押下した時の処理を行います、処理内容としては以下の2パターンを作成します。

1. Aボタンを押下

LEDの部分に「Hello World」を表示します。

 

2. Bボタンを押下

ハートマークを表示します。

<実行結果>

ここのコードを見てみます。

 

clearScreen()

onButtonPressed(.A, handler: {

    let textToDisplay = "Hello World"

    showString(textToDisplay)

})

onButtonPressed(.B, handler: {

    let imageToDisplay = iconImage(.heart)

    imageToDisplay.showImage()

})

 

こんな感じになります、「onButtonPressed()」の引数に「.A」と「handler」にメソッド(関数)を渡しています。

JavaとかJSなどでよく使用する「ラムダ式」の様なものでSwiftでは「クロージャ」と呼ぶ様です。WikiPedia参照

つまり「『.A』のイベントを受けたらhandlerの処理を行います」という処理になります。

下に続く処理も同様です。

「let」に関して

以前、letは定数を示すもので値を下の様に変更するとエラーになります。と記載しました。

let value = "定数"

value = "他の値"

 

しかし、上のコードlet imageToDisplay = iconImage(.heart)の様に変数「imageToDisplay」にオブジェクトを代入している場合は固定値「オブジェクト」が変わらないので中身の値を変更しても大丈夫という虚をついた様なルールがあるので注意です。

余談

Javaでの定数の宣言方法は「final」という予約語を使用します。

コードに書くと下の様になります。

<エラーになるケース>

final String value = "定数";

https://blog.hatena.ne.jp/Takunoji/takunoji.hatenablog.com/edit?sidebar=category

value = "他の値";

<エラーにならないケース>

final MyClass cls = new MyClass();

cls.setValue("定数");

cls.setValue("他の値");

 

上の様にオブジェクト(クラスのインスタンス)を設定している場合はエラーになりません。「cls」の中にはオブジェクト(クラスのインスタンス)が入っていて、そのオブジェクト自体を変更したわけではないのでOKということです。

自分はここに気がつくのに結構な時間を要しました。。。

 

でわでわ。。。