Hana道場【師範】のブログ

IchigoJamの徹底解説ブログ

感謝を込めて「2人対戦型ヘビゲーム」をプレゼント【IchigoJam】

感謝を込めて僕からのゲームのプレゼントです!!

hanadojo.sblo.jp

1 'SnakeGame
2 OK2
5 CLS:CLV:X=#A50:Y=#A4F:C=236:D=237:K=29:L=65:S=2:T=2:F=1:G=1:B=101
10 POKE#900,6:POKE#91F,6
20 COPY#920,#900,32*21
30 COPY#901,#900,31
40 COPY#BA1,#BA0,31
100 R=RND(32*22)+#900
110 IF PEEK(R)||R=X||R=Y GOTO100 ELSE POKE R,255
120 POKE X,C:POKE Y,D
130 IF F=2 POKE#A4F,0,0
140 IF F=S POKE[A],0:[A]=X:A=A+1:A=A%S
150 IF G=T POKE[B],0:[B]=Y:E=E+1:B=101-E%T
160 J=INKEY():IF J>27&&J<32 K=J ELSE IF J=65||J=68||J=87||J=83 L=J
170 X=X-(K=28)+(K=29)-32*(K=30)+32*(K=31)
180 Y=Y-(L=65)+(L=68)-32*(L=87)+32*(L=83)
190 IF PEEK(X)=255 S=S+1:F=F+1:GOTO100
200 IF PEEK(Y)=255 T=T+1:G=G+1:GOTO100
210 IF PEEK(X) GSB@DRAW:?"👾 WIN!!":END
220 IF PEEK(Y) ?"🐱 WIN!!":END
230 IF S>F F=F+1
240 IF T>G G=G+1
250 GOTO120
1000 @DRAW
1100 IF ABS(X-Y)<3||PEEK(Y) ?"DRAW...":END
1200 RTN

▼ゲームをプレイしたい方▼
2人対戦型ヘビゲーム(IchigoJam web)


<遊び方>
プレイヤー1(クラゲ)、プレイヤー2ネコ)に分かれて戦います。
先頭のキャラが何か(壁、敵、自分)に当たってしまうとゲームオーバーです。
フィールドにあるイチゴをとると、味方が1体増えます。
どちらかが当たるまでゲームは続きます。

<操作方法>
■プレイヤー1(クラゲ)
左移動:Aキー
右移動:Dキー
上移動:Wキー
下移動:Sキー

■プレイヤー2(ネコ)
左移動:←キー
右移動:→キー
上移動:↑キー
下移動:↓キー

難しかったら行番号120〜250の間にWAITを入れてね!

▼一人用ヘビゲームをプレイと解説を見たかったらこちらへ▼
hanadojo-sihan.hatenablog.com


そしてIchigoJam8周年おめでとうございます!
これからもよろしくお願いします!

CC BY shoichi1031da / @shoichi1031da

twitter.com

【IchigoJamとGASでIoT入門(3)】タイピングゲームのスコアをスプレッドシートにセルに入力する

IchigoJamとGASによるIoT入門第3弾!
GETリクエストで受け取ったパラメータをスプレッドシートのセルに自動入力に挑戦します。
IchigoJamのA〜Zを打つタイムを競う「タイピングゲーム」のスコアをスプレッドシートで管理します。


まず、スプレッドシートを用意します。
(ここでは「typing_log」というシート名にしています)

セルA1,A2それぞれに「名前」「タイム(秒)」を入力しておきます。
そして「拡張機能」→「Apps Script」をクリックし、エディタを開きます。

①タイピングゲームのプレイヤーの「名前」をパラメータNAMEとして受け取り、A1列のセルに自動入力する

【GASプログラム】

//(IchigoJamからの)GETリクエスト処理
function doGet(e){
  let name = e.parameter.NAME; //パラメータNAMEの値を変数nameに格納
  setVal(name); //setVal関数に変数nameを渡す
  return ContentService.createTextOutput(JSON.stringify("completed"));
}

// スプレッドシートへの入力
function setVal(name) {
  // 現在開いているスプレッドシートを取得
  let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  // 現在開いているシートを取得
  let sheet = spreadsheet.getActiveSheet();
  
  // データがある最終行を取得
  let lastRow = sheet.getDataRange().getLastRow();

  // セルに入力する値を変数dataに格納
  let data = [[name]];

  // シートの、最終行を指定し、データ(名前)を入力
  sheet.getRange(1+lastRow,1,1,1).setValues(data); //getRange(入力する行, 入力する列 ,入力する行数 ,入力する列数)
}

保存して、デプロイしましょう。
ブラウザのアドレスバーにウェブアプリのURLを貼り付けて「?NAME=test」を追加してエンターを押しましょう。
https: //script.google.com/macros/s/(中略)/exec?NAME=test

セルA2に「test」と入力されていたら成功です!

②タイピングゲームの「タイム」をパラメータTIMEとして受け取り、A2セルに自動入力する

【GASプログラム】

//(IchigoJamからの)GETリクエスト処理
function doGet(e){
let name = e.parameter.NAME; //パラメータNAMEの値を変数nameに格納

  let time = e.parameter.TIME; //パラメータTIMEの値を変数timeに格納
  setVal(name,time); //setVal関数に変数nameとtimeを渡す

return ContentService.createTextOutput(JSON.stringify("completed"));
}

// スプレッドシートへの入力
function setVal(name,time) {

// 現在開いているスプレッドシートを取得
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// 現在開いているシートを取得
let sheet = spreadsheet.getActiveSheet();
// データがある最終行を取得
let lastRow = sheet.getDataRange().getLastRow();

  // セルに入力する値を変数dataに格納
  let data = [[name,time]];

  // シートの、最終行を指定し、データ(名前)を入力
  sheet.getRange(1+lastRow,1,1,2).setValues(data); //getRange(入力する行, 入力する列 ,入力する行数 ,入力する列数)
}

保存してデプロイしましょう。
ブラウザのアドレスバーにウェブアプリのURLにパラメータTIMEを追加します。
https ://script.google.com/macros/s/(中略)/exec?NAME=test&&TIME=100

タイムが追加されていたら成功です!

IchigoJamでタイピングゲームを作り、名前とタイムをウェブアプリに送る

IchigoJamプログラム】

10 CLS:CLT:N=65
20 ?CHR$(N);
30 IF INKEY()!=N GOTO30
40 N=N+1:IF N<91 GOTO20
50 T=TICK()/60
60 ?:?T
100 ?"MJ GETS script.google.com/macros/s/(中略)/exec?NAME=test&&TIME=";T

IchigoJam web でのMixJuice機能の使い方は、第1回目のブログをご覧ください。

これでIchigoJamからウェブアプリにパラメータNAMEとTIMEが送られ、スプレッドシートに反映されていきます。

④日時を取得し追加する


セルA1に「日時」を追加しましょう。

setVal関数内のプログラムを修正します。

  // セルに入力する値を変数dataに格納
  let now = getNow();
  let data = [[now,name,time]];

  // シートの、最終行を指定し、データ(名前)を入力
  sheet.getRange(1+lastRow,1,1,3).setValues(data); //getRange(入力する行, 入力する列 ,入力する行数 ,入力する列数)
}

getNow関数を追加します。

//日時の取得
function getNow() {
  let d = new Date();
  let year = d.getFullYear();
  let month = d.getMonth() + 1;
  let day = d.getDate();
  
  let now = year + "/" + month + "/" + day;
  return now;
}

これでウェブアプリにGETリクエストがあった日時を取得し、セルに追加することができます。

まとめ

ウェブアプリに送られてきたパラメータをスプレッドシートのセルに自動入力するプログラムをご紹介しました。
名前のパラメータで区別すれば、大勢の子供たちと同時にタイムの競うイベントもできますね!
また温度センサーと組み合わせれば日々の温度の自動管理や、距離センサーと組み合わせればIoT人流カウンターにも活用できます。

ぜひ、アイデアを出してオリジナルIoTを作成してみてください!

CC BY shoichi1031da / @shoichi1031da

twitter.com

【IchigoJamとGASでIoT入門(2)】GETリクエストのパラメータでGmailの本文の内容を選択する

前回の記事では、GETリクエストを送ると自動でGmailを送るウェブアプリをGASで作成しました。
hanadojo-sihan.hatenablog.com

前回は入門ということで、シンプルなプログラムにするため1つの本文しか送りませんでしたが、
今回は、送るメール本文を複数選択できるようなアプリにアップデートします。

目次

HTTP通信について


HTTPは「HyperText Transfer Protocol」の略で、クライアントとサーバーの間でハイパーテキストを転送するための通信プロトコルです。

ウェブサイト(アプリ)を利用する際、自分のパソコンからwebサーバーに「リクエスト」を送っています。
今回は「GETメソッド」という方法でGASで作ったウェブアプリにリクエストを送ります。

パラメータについて

GETメソッドではURLの末尾に「パラメータ」を記述することで、値を送ることができます。

<GETメソッドによるパラメータの記述>
https://script.google.com/(中略)/exec?パラメータ名=値
プロトコル ②URL ③パラメータ

  • 1つのパラメータを送る場合:?パラメータ名=値
  • 複数のパラメータを送る場合:?パラメータ名1=値1&パラメータ名2=値2&・・・


パラメータ名は任意で決めることができます。
今回は「msg」というパラメータ名を使うことにします(messageの略)。
値は「1」,「2」,「3」の3種類の値を送る想定でつくります。

GASのプログラム

プログラム全体

// GETリクエストに対する処理
function doGet(e){
  let message = e.parameter.msg; //パラメータ名msgの値を取得
  sendMessage(message); //sendMessage関数に変数messageを渡す
  return ContentService.createTextOutput("'sended.");
} 

// 送信するメール内容の決定
function sendMessage(message) {
  let address = '*******@gmail.com'; //送信先メールアドレス
  let subject = "***";//件名
  let body;
  if(message === "1"){
    body = "迎えに来て!";
  } else if(message === "2"){
    body = "行ってきます!";
  } else if(message === "3"){
    body = "ただいま!";
  }
  GmailApp.sendEmail(address, subject, body);
}  
解説1)パラメータの処理
// GETリクエストに対する処理
function doGet(e){
  let message = e.parameter.msg; //パラメータ名msgの値を取得
  sendMessage(message); //sendMessage関数に変数messageを渡す
  return ContentService.createTextOutput("'sended.");
} 

doGet関数はウェブアプリにGETリクエストがあった時に動作する関数です。doGet引数の「e」にパラメータに関するデータが格納されています。
「e.parameter.パラメータ名」で値を受け取ることができます。
今回はGETリクエストで送った値をmessageという変数に格納し、sendMessage関数に実引数として渡します。

解説2)送るメール本文の決定処理
// 送信するメール内容の決定
function sendMessage(message) {
  let address = '*******@gmail.com'; //送信先メールアドレス
  let subject = "***";//件名
  let body;
  if(message === "1"){
    body = "迎えに来て!";
  } else if(message === "2"){
    body = "行ってきます!";
  } else if(message === "3"){
    body = "ただいま!";
  }
  GmailApp.sendEmail(address, subject, body);
}  

「1」の値を受け取った時には「迎えに来て!」
「2」の値を受け取った時には「行ってきます!」
「3」の値を受け取った時には「ただいま!」という本文のメールを送るプログラムにしました。

※値は文字列として受け取るので、ifの条件式では""で囲んでいます。

それでは、デプロイしてウェブアプリを公開しましょう。

ブラウザのアドレスバーにウェブアプリのURLを貼り付け、そのURLに続けて「?msg=3」を加えてEnterキーを押しましょう。
「ただいま!」とメールが届けば成功です!

IchigoJamからウェブアプリにGETリクエスト(パラメータ付き)を送る

IchigoJam webから送ってみる


IchigoJam webの使い方は前回のブログを参照)
URLの末尾に「?msg=3」をつけて実行してみましょう。
「ただいま!」とメールが届けば成功です!

10 CLS
20 INPUT "ムカエニキテ:1 イッテキマス:2 タダイマ:3 ",A
30 ?"MJ GETS script.google.com/(中略)/exec?msg=";A

INPUT命令で1〜3どれかを打ち込んでエンターを押せば、そのメッセージがメール本文として送れるようになります!
INPUT命令で変数Aに1〜3の数が代入され、行番号30の最後に「;A」とすることで、パラメータとしてURLに付加することができます。

(行番号20の入力待ち画面)

(2と入力した時)

今回は3つのメッセージ(1〜3)を用意しましたが、もっと多くのメッセージを用意することができますね。
これでメールアドレスを持っていないお子さんもIchigoJamからメールを送れるようになります!

IchigoJam 実機から「キーボード・モニターなし」でGmailを送る

送るメッセージ選択をINポートとジャンパー線1本を使って行う方法を紹介します。

<つくるプログラム>
IN1とGNDを接続 → 1番のメッセージを送る(パラメータとして1を送信)
IN2とGNDを接続 → 2番のメッセージを送る(パラメータとして2を送信)
IN4とGNDを接続 → 3番のメッセージを送る(パラメータとして3を送信)
IN1、IN2、IN4は初期状態は「1」で、GNDを接続することで「0」を入力します。
※IN3は初期状態が0のため今回は使用しません

プログラム

10 V=0
20 IF IN(9)=0 CONT
30 FOR I=1 TO 4
40 IF I=3 I=4
50 IF IN(I)=0 V=I
60 NEXT
70 IF V=4 V=3
80 IF V=0 GOTO30
90 ?"MJ GETS script.google.com/(中略)/exec?msg=";V
100 BEEP 20,180

プログラム解説

10 パラメータの値を格納する変数Vを用意
20 もし BTNポートにGNDが接続されているときは この行を繰り返す
30 IN1〜4の状態を調べるためのFOR文(変数IはINのポート番号に対応)
40 IN3ポートは使用しない
50 INポートが0の時(GNDに接続されている時) 変数VにINのポート番号(変数I)を格納
60 変数Iが4未満の時、行番号30に戻る
70 もし 変数Vに4が格納されている時は 変数Vに3を格納する
80 もし 変数Vに何も格納されていない時は 行番号30に戻る
90 変数Vの値をパラメータとしてウェブアプリにGETリクエストを送る
100 音を鳴らして終了

実行方法
上記のプログラムを0番にSAVEし、電源を切りましょう。

SAVE 0

ジャンパー線をBTNポートとGNDポートに接続しましょう。
BTN-GNDを接続すると、プログラムの自動実行の際にIchigoJamのボタンを押しておく必要がなくなります。
(また、プログラムを使用しない時のジャンパー線の収納場所として使えます)

IchigoJamの電源を入れるだけで、0番に保存したプログラムが自動実行します。


BTNポートにさしてあるジャンパー線を抜き、IN1かIN2かIN4に差し込みましょう。
これで、IchigoJamだけ(キーボード、モニターなし)でGmailの本文を選択し送ることができます!

まとめ

今回は、GETメソッドというリクエスト方法を使って、パラメータをウェブアプリに送る方法を紹介しました。そしてウェブアプリ側で受け取ったパラメータによって、送るメールの本文内容を変えるGASのプログラムも作成しました。
実践的なHTTP入門としてもご利用いただければ幸いです。
次回はタイピングゲームのスコアをパラメータとして受け取り、スプレッドシートに入力するウェブアプリを作成します。
【IchigoJamとGASでIoT入門(3)】タイピングゲームのスコアをスプレッドシートにセルに入力する - Hana道場【師範】のブログ


IchigoJam IoTシリーズ>※GAS以外の方法

CC BY shoichi1031da / @shoichi1031da

twitter.com

【IchigoJamとGASでIoT入門(1)】Gmail自動送信ウェブアプリの作成

IchigoJam(+ MixJuice)とGASを組み合わせたIoT入門シリーズになります。

GAS(Google Apps Script)とは、Googleが提供しているJavaScriptをベースにしたプログラミング言語です。
Googleアカウントを持っている人なら無料で使え、ウェブアプリとしても公開することができます。
今回はGASで自動でGmailを送信する簡単なウェブアプリを作成します。

GAS入門の参考:
Google Apps Script(GAS)とは?できることから始め方までの基本|アナグラム株式会社


<必要なもの>

<つくるもの>

目次

GASでGmailを送るウェブアプリをつくる

まずは「URLにアクセスするとそれがトリガーとなり、自動でGmailが送られるウェブアプリ」を作ります。


Googleドライブから「Google Apps Script」を開きましょう。


エディタが開きます。

ウェブアプリにアクセスするとGmailを送るプログラムは下記の通りです。

【GASプログラム】

// GETリクエストに対する処理
function doGet(e){
  sendMessage();
  return ContentService.createTextOutput("'sended.\n");//ウェブアプリの実行(Gmail送信)が完了した際の表記
}

// Gmailの設定
function sendMessage() {
  let address = "********@gmail.com"; //送信先のGmailのアドレスを入力してください
  let subject = "***"; //送信するメールの件名を入力してください
  let body = "***********"; //送信するメールの本文を入力してください

  GmailApp.sendEmail(address, subject, body); //Gmailを送るメソッド
}  


ウェブアプリのプログラムができました!
「プロジェクトを保存する」をクリックして保存しましょう。
プロジェクト名も自由に決めてください。

ウェブアプリの公開


「デプロイ」→「新しいデプロイ」を選択


「歯車マーク」→「ウェブアプリ」を選択


「アクセスできるユーザー」を「全員」に設定 →「デプロイ」を選択


プロジェクト内で初めてウェブアプリを公開する際は、アクセスを承認する必要があります。

<アクセス承認の手順>

 (1)Googleアカウントを選択

 (2)「詳細」を選択

 (3)「Gmail送信に移動」を選択

 (4)「許可」を選択



ウェブアプリが公開されました!
ウェブアプリのURLをコピーし、アドレスバーに貼り付けてアクセス(検索)してみましょう。


"completed"とブラウザに表示され、Gmailが届いていたらウェブアプリ完成です。

IchigoJam からウェブアプリを実行する

IchigoJam webで実行する

IchigoJam webを開きましょう。
IchigoJam web by jig.jp


「I/O」を選択し、「MixJuice」にチェックを入れましょう。


10 ?"MJ GETS script.google.com/(中略)/exec
ウェブアプリのURL「script.google.com/macros/(中略)/exec 」をペーストしてください。
※「https://」は不要です。
「IMPORT」をクリックすると、IchigoJam webにインポートできるので、RUNで実行してみましょう。
Gmailが送信されれば成功です。
?"MJ GETS URL"
指定したURLにGETリクエストを送る

※GETリクエストに関しては次回のブログにて解説しています。

IchigoJam実機にセンサーを接続して、IoT防犯センサーを作ろう

接続方法


(1) MixJuiceIchigoJamに接続
(2)距離センサーをMixJuiceに接続
(白:IN2、橙:GND、黒:5V)

プログラム

(1)ネットワークに接続

?"MJ APC アクセスポイント名 パスワード"
MixJuice基板の緑色のランプが点滅→点灯していればネットワークに接続完了です。
MixJuiceリファレンス

(2)センサーの閾値を設定

10 A=ANA(2)
20 ?A
30 GOTO10
プログラムを実行し、センサーの前にモノを置いて閾値(人が通った基準となる数値)を決めましょう。
ここでは閾値を500と設定してみます。

(3)センサーの閾値(500)を超えたらウェブアプリにGETリクエストを送る

10 A=ANA(2)
20 ?A
30 IF A<500 GOTO10
40 ?"MJ GETS script.google.com/(中略)/exec

これでセンサーの数値が500を超えたらウェブアプリにGETリクエストが送られ、Gmailが送信されるGASプログラムが作動します!

(4)防犯IoTプログラムを完成させ、SAVEする

10 A=ANA(2)
20 IF A<500 GOTO10
30 ?"MJ GETS script.google.com/(中略)/exec
40 BEEP20,300:WAIT300
50 GOTO10
SAVE0
行番号40で音を5秒間鳴らし、行番号50でセンサー検知プログラムを作動するようにしました。
プログラムを0番にSAVEし、電源を切りましょう。
プログラムを自動実行(IchigoJamのボタンを押しながら電源スイッチを入れる)し、玄関や窓の近くに設置して置けば、簡単な防犯IoTセンサーの完成です。

まとめ

GASを使ってGmailを送るウェブアプリを作成、公開まで行いました。
ブラウザのアドレスバーにウェブアプリのURLを貼り付け、アクセスするだけでGmailが送られます。
ウェブアプリのURLにIchigoJam webのMixJuice機能を使ってGETリクエストを送るだけで、IchigoJamからGmailを送ることができました。

次回は、数種類のメール本文を送るためのGASとIchigoJamプログラムを作成していきます。
hanadojo-sihan.hatenablog.com

IchigoJam IoTシリーズ>※GAS以外の方法


CC BY shoichi1031da / @shoichi1031da

twitter.com

【失敗は最高の学び】プログラミングのクラブ活動や授業で起こったトラブル&対処法まとめ【IchigoJam】【鯖江市】

f:id:hanadojo_sihan:20210223200406j:plain

福井県鯖江市では2018年度から全12小学校と全3中学校でIchigoJamを使ったプログラミングクラブ活動が行われています。

2019年度からは総合学習の時間に全小学4年生を対象に授業も行っています。

ITの担い手育成事業 | エル・コミュニティ

 

www.l-community.com

 

2018〜2021年度の3年間、私中村もメイン講師として色んな学校へ支援させていただきました。

 

その中でも多く起こったトラブルを【セッティング時】と【プログラミング時】に分けてご紹介します!

※ごく稀に起こるものも念の為記載しています。

※ハードのエラーも仮説を立てて解決する大切な学びです。

 

【セッティング時】

f:id:hanadojo_sihan:20210223193659j:plain

■モニターがつかない

最も多いのがIchigoJamの電源を入れてもモニターがつかないトラブル。

原因を見つけるのにまず確認して欲しいのがこれです。

 

IchigoJamに電源を入れた時、キーボードが光るかどうか 

f:id:hanadojo_sihan:20210223193703j:plain光らない(キーボードに給電されていない)場合

IchigoJamへの給電が行われていない可能性が高いです。

f:id:hanadojo_sihan:20210223193713j:plain(以下原因の多い順)

① microUSBケーブルの故障

最も多いです。真っ先に他のケーブルと変えてみましょう。

※ごく稀にmicroUSBケーブルのUSB端子をキーボード用の端子に繋いでいる場合もあり

IchigoJamのスイッチもしくはmicroUSB差し込み口の故障

IchigoJam TやUなど少し古いIchigoJamはスイッチが壊れやすいです。

microUSBの差し込み口は、力尽くで抜き差しをして壊れることもあります。

その場は交換して、後で修理しましょう。

③ 電源アダプタの故障

ほとんどない例ですが、①②でもない場合は電源アダプタの故障が考えられます。

④ コンセント自体の故障

理科室や家庭科室のコンセントは各テーブルにあります。

古い小学校ですと、テーブル単位で故障している時があります。

その場合は、テーブル全員が同じ症状になるので、テーブルを変えるか延長コードで対応しましょう。

 

光る(キーボードには給電されている)場合

IchigoJamには給電されているので、モニター側の不良です。

f:id:hanadojo_sihan:20210223193719j:plain(以下原因の多い順)

① ビデオ端子の差し込みが甘い

IchigoJamのビデオ端子を確認しましょう。控えめな子は奥まで差し込むのに躊躇していることが多いです。

② モニターの電源コードが繋がっていない

IchigoJamの接続に安心して、肝心のモニターの電源が繋がっていないことが多いです。

③ モニターの故障

最終的にはモニター自体の故障を疑ってください。

他の正常なモニターと交換してみましょう。

 

 

■キーボードが効かない(モニターはついている)

ごく稀にモニターはついているのに、キーボードが効かない時があります。

まずはキーボードのUSB端子をIchigoJamに抜き差しして再接続して、電源を入れ直してください。

これで大体は正常に動くようになります。

 

電源を入れ直しても効かない場合は、キーボード自体の故障の可能性があります。

交換して確かめてください。

 

【プログラミング時】

■画面が消える

プログラムが残っている可能性もあるので、落ち着いて対処しましょう。

(以下原因の多い順)

①F10キーを押してしまった

F10キーは画面切り替えのショートカットキーで、画面が真っ暗になります。

もう一度F10キーを押せば、復帰しプログラムも残っているので、画面が消えた時はまずF10キーを押しましょう。

②電源部分のmicroUSB端子の接触不良が起きた

こちらは野球ゲームのようなIchigoJam本体のボタンを押すようなゲームの時に起こりやすいです。IchigoJam本体を触る際にmicroUSB端子の接触不良などで切れることが稀にあります。

この場合はIchigoJamの電源が一瞬切れたので、SAVEしていないプログラムは消えます。

バックアップの大切さを知る経験だと思いましょう笑

③他の子がコンセントから抜いてしまった

片付けの時間に起こります。まだ打ち込んでいる子がいて、同じテーブルの子に間違って抜かれてしまう場合です。クラブ活動の時は一斉にSAVEする時間を設けましょう。

 

■Syntax error

基本的に単なる打ち間違いですが、特にわかりづらいエラーを紹介します。

 

①カナ入力の「、」や「ー」

コンマ「,」と読点「、」

マイナス「-」と伸ばし棒「ー」

が特にわかりずらいです。

エラーの行でカタカナが使われていたら、疑ってみましょう。

 

②エンターの押し忘れで、2つの行が1つの行として認識される

IchigoJamは1行32文字打ち込めます。

1行のプログラムがちょうど32文字の時、改行されているのでエンターを押さずそのまま次の行を打ってエラーになることがあります。

(ダメな例:ちょうど32文字の時)

f:id:hanadojo_sihan:20210223181208p:plain

一見、10行目と20行目がミスなく打ち込まれているように見えます。

しかし実行すると

f:id:hanadojo_sihan:20210223181213p:plain

「Syntax error in 10」と返ってきます。

ここでポイントなのが in 10と返ってきているのに20行目も表示されることにあります。IchigoJamのSyntax errorメッセージはエラーの1行分のみ返答があるので、2行分errorが返ってくることはありません。

(正しい例)

f:id:hanadojo_sihan:20210223181226p:plain

32文字ある10行目の最後でエンターを押すと、1行分空いて20行目を書くことになります。

Syntax errorで2行分のプログラムが返ってきた時は、エンターの押し忘れが原因です。

 

(ごく稀なパターン)

このミスに初めて遭遇した時は、???が並びました笑

f:id:hanadojo_sihan:20210223182415p:plain

LEDが1秒間隔でチカチカするプログラムです。

これも一見正しいプログラムのようですが、実行すると

f:id:hanadojo_sihan:20210223182421p:plain

なんとエンターで改行せずに、スペースを押すことで改行していたのです!

「改行=エンター」は大人の常識で、このミスをした子にはスペースがたくさん空いているように見えたのですね。

これ以降「行の最後にエンター。エンターを押すとプログラムを覚えてくれる」を強く言うようになりました笑

(このミスはHana道場含めて3回ほど経験があります。その内一回は「なわとびさっちゃん」プログラム内でIF文が絡んだ行で、見つけるのに苦労しました。。)

 

まとめ

冒頭にも書いたように、ハード(機材)もソフト(プログラム)もエラーの原因の仮説を立てて解決することが最高に実践的な学びです。

プログラムでいくら失敗しても怒られませんし、IchigoJamや周辺機器が壊れても安価で直せたり購入できます。

 

失敗を恐れず、歓迎する気持ちがプログラミング教育の心構えだと思います!

 

沖縄の哲真くん「Hanaわらび」オープンに向けて着々と準備中!

2020年11月に鯖江を訪れて約3ヶ月。哲真くんの想いと行動力がすごい!

ameblo.jp

 

福島の「寺子屋Hana」に続いてHanaのお仲間が増えて嬉しい限り!

 

学校や拠点でIchigoJamを教える際のトラブルシューティングとしてご利用ください!

 

CC BY shoichi1031da / @shoichi1031da

twitter.com

IchigoJamアバターづくり!エルチカ→川下りゲーム→ミニゲームズの次の提案

f:id:hanadojo_sihan:20210124212927j:plain

①エルチカでコンピューターとの会話を楽しみ、②川下りゲームでプログラムを楽しみ、③ミニゲームズで一通りの動作に慣れ親しんだあとに、④としてのおすすめが「アバター(顔)づくり」

 

使うコマンドは、ゲームづくりには欠かせないLOCATE(LC)とPRINT(?)の2つだけ!写経だけでなく、自分のアイデアをプログラムで実装する経験を④番目としていかがでしょうか?

 

↑小学2年生も楽しそうに顔を作っていました^^

途中、眉毛が迷子?になり変な位置に表示されましたが、大笑いしていました。

失敗も楽しい「アバター(顔)づくり」をやってみましょう!

 

<教育的効果>
◆座標の考え方の習得
◆試行錯誤しながら自分のアイデアを実装する「プログラミング思考」

 

0. 画面の大きさを知ろう!

CLSで一旦画面を消して、Aという文字がヨコに何文字打てるか数えてみましょう!

タテは「1エンター、2エンター、3エンター、...」と打っていくと数えやすいです。

 

1.IchigoJamの画面について

f:id:hanadojo_sihan:20210124212928p:plain

ヨコは0〜31の32マス、タテは0〜23の24マスあります。

LC ヨコ,タテ 表示する位置を決める

 

2.左側の目を表示(チュートリアル

10 LC 13,5
20 ?"o"
20行目のoは好きに選んでもらいましょう。
 
3.右側の目を表示(チュートリアル
ヨコが17,タテが5の位置に目を表示してみようと問題を出してみましょう。
(答え)
30 LC 17,5
40 ?"o"
これでなんとなくLCと?の使い方が理解できます。
 
4.画面をきれいにしよう
プログラムで画面がゴチャゴチャしてきたので、CLS(クリアスクリーン)を加えましょう。
5 CLS
 
5.好きに鼻や口、眉毛などつくってみよう!
キャラクター表を渡して、好きにプログラムしてもらいましょう。
試行錯誤こそプログラミング教育!
(師範作アバター

f:id:hanadojo_sihan:20210124213908p:plain

髪の毛や舌など追加してもいいかも!
ここで一旦アバターづくりは終了。見せ合いっこしましょう。
 
6.瞬きアニメーションにチャレンジ!!(ステップアップ)
500 WAIT60
510 LC 13,5
520 ?"-"
530 LC 17,5
540 ?"-" 
550 WAIT60
560 GOTO10
 
500行目が目が開いている時間
550行目が目を閉じている時間
自由に変えてもらいましょう!!
 
RND(数)  0〜数-1の中からランダムに返す
 
500 WAIT RND(120)+180
3秒(180)は必ず目が開いているようにしています。 
 
目が開いてる時間がランダムになってよりリアルに!!
 
7.その他アニメーションにチャレンジ!!
時々セリフを話す(表示)ようにしたり、舌を出したり、ウインクしたり。
子どもたちのアイデアを引き出しましょう!
 

 
 
みんなでやると十人十色の表情が出来上がって 盛り上がります!
コンテスト形式でやってみるとイベントにもなっていいかもしれませんね。
 
「アイデア→試行錯誤→実装」が身につくとより主体的な学びに繋がります!
 
-------------------
 
<追記>2021.1.25
早速ブログを書いて次の日に鯖江の小学校のクラブでやってきました!
(20人、小学4年生〜6年生、45分)
 
ゆたかな表情でいっぱい^^

f:id:hanadojo_sihan:20210125181454j:plain

f:id:hanadojo_sihan:20210125181515j:plain

f:id:hanadojo_sihan:20210125181519j:plain

f:id:hanadojo_sihan:20210125181525j:plain

6番の瞬きプログラムにも挑戦!!
 
座標の感覚もつかめていいですね。
ぜひやってみてください! 
 

CC BY shoichi1031da / @shoichi1031da

twitter.com

楽しく二進法入門!Hana道場発のLEDサイコロ基板がUpverter公式Twitterで紹介されました。

Hana道場発の楽しく二進法が学べるキット「LEDサイコロ基板」をご紹介!

 

商品ページ:https://hanadojo.official.ec/items/24804122

はんだ付け方法:http://hanadojo.sblo.jp/article/186826146.html

 

 

 ↑僕が初めて基板設計をした作品がこのLEDサイコロ基板(基板データ

無料・web上で基板設計ができるサービスUpverterの公式アカウントで紹介もされました。

IchigoJamに接続し、LEDをサイコロの目の配置で光らせます。

 

(接続)

f:id:hanadojo_sihan:20201212200450j:plain

(6の目)明るい場所

f:id:hanadojo_sihan:20201212200550j:plain

(1の目)暗い場所

f:id:hanadojo_sihan:20201212200724j:plain

 

LEDはそれぞれIchigoJamのOUT1〜7につながっています。

f:id:hanadojo_sihan:20201212201033p:plain

1の目を光らせる時はこのように書きます。

OUT 4,1

OUT4をオン(1)

簡単ですね。

しかし、サイコロ6の目はどうなるでしょう?

OUT1,1:OUT2,1:OUT3,1:OUT5,1:OUT6,1:OUT7,1

サイコロの6の目を再現するには少々長くなりますね。

 

ここで登場するのが二進法です。

(この基板は二進法を楽しく学ぶためにつくりました)

二進法は、0と1の二つの数だけで全ての数を表現します。

 

(ただ、0と1だけでは桁が増えすぎて人間には分かりづらいので、普段は十進法0〜9の十個の数で表現しています)

 

二進法を使うとサイコロ6の目に光らせるには下のようになります。

OUT `1110111

f:id:hanadojo_sihan:20201212202125p:plain

IchigoJamOUTポート1,2,3,5,6,7をオン(1)、4をオフ(0)にしています。

 

これでも相当短くなりましたが、この二進法を十進法に変換するとより短くなります。

OUT 119

f:id:hanadojo_sihan:20201212200550j:plain

たった「OUT119」だけで6つのLEDが同時に制御されました!

 

個別に6つ制御

OUT1,1:OUT2,1:OUT3,1:OUT5,1:OUT6,1:OUT7,1
二進法で同時に6つ制御
OUT `1110111
十進法で同時に6つ制御
OUT 119
 

 

各サイコロの目の十進法への変換はこんな感じです。

(累乗のわかる人向け)

f:id:hanadojo_sihan:20201212201049p:plain

 

(累乗がわからない小学生向け)

光らせたいLEDに書いてある数字を足せばOK!

f:id:hanadojo_sihan:20201212204254p:plain

例)サイコロ4の目の時

1+4+16+64 = 85

 

(ランダムにサイコロを振るプログラム)

10 LET[0],8,20,28,85,93,119
20 OUT [RND(6)]

 

(音と光の演出付き)

10 LET[0],8,20,28,85,93,119
20 OUT [RND(6)]

30 BEEP RND(100)
40 WAIT 3
50 GOTO20
escでサイコロの目を決定します。
WAITを長くして目押しできるようにしても面白い?
 
LEDサイコロ基板で楽しく二進法を学びましょう!!

 

<やってみよう>

・LED7つ全てを十進法で光らせてみよう!

・LED7つ全てを消してみよう!

・スゴロクを作ってみよう!

 

ーーーーーーー

(補足)

ロボット(カムロボなど)のモーターを2つ同時に制御するのに十進法表現がよく使われます。

valed.press

<OUT2とOUT5をオン>

◆二進法の場合

OUT `10010

◆十進法の場合

2^4 + 2^1 = 16+2 = 18

OUT 18

 

<OUT1とOUT6をオン>

◆二進法の場合

OUT `100001

◆十進法の場合

2^5 + 2^0 = 32+1 = 33

OUT 33

 

OUT18やOUT33の謎が解けましたね!

CC BY shoichi1031da / @shoichi1031da

twitter.com

IchigoJamとMixJuiceを「SLEEP」して超省電力のIoTをつくる【IoTインターホン続編】

f:id:hanadojo_sihan:20201030124715j:plain

前回は自宅のインターホン(呼び鈴)をIoT化させました。hanadojo-sihan.hatenablog.com

 

↑のブログでは、IchigoJamのみSLEEPにしていますが、MixJuice自体もSLEEPにする方法を見つけました。

<参考記事>

IchigoJam + MixJuiceで製作するIoTセンサ – Ambient

 

今回はIchigoJamとMixJuice両方をSLEEPさせて、「超省電力IoT」に挑戦します!

 

【接続】

f:id:hanadojo_sihan:20201030131517j:plain

MixJuiceのCN4-2(RST)IchigoJamのBTNをジャンパー線で接続。

 

今回はインターホン(呼び鈴)のIoTなので、ボタンが押されるとSLEEPから起きるようにしています。

 

BTNピンにはMixJuice(RST)からの線と、インターホンのボタンからの線、計2本挿さっています(2本挿すためにホッチキスの芯を使っています笑)

 

【プログラム】 

10 VIDEO 0
20 ?"MJ APS":IF INKEY()!=49 CONT
30 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ"
40 BEEP 20,90
50 ?"MJ SLEEP 0"
60 SLEEP

 30行目でLINEメッセージを送っています。

詳しくは<その1>ブログをご覧ください。

 

【プログラム解説】

10 VIDEO 0 ビデオ出力OFF
20 ?"MJ APS":IF INKEY()!=49 CONT ネットワークに再接続するまで待機
30 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ" LINEメッセージをIFTTTのWebhoocksに送る
40 BEEP 20,90 呼び鈴の音
50 ?"MJ SLEEP 0"
MixJuiceを無限にSLEEP
60 SLEEP IchigoJamをディープSLEEP

 

20行目:ネットワークに接続するまで待機しています。

MJ APS 
WiFiアクセスポイントへの接続を確認します。
戻り値が0の場合は未接続、1の場合は接続中です。

50行目:CN4-2(RST)がHIGHになる(ボタンが押される)までSLEEPします。

MJ SLEEP sec 
スリープ(節電モード)します。sec には 0-4000(秒) を指定できます。
(sec=0の場合) 無限にスリープします。
CN4-2(RST)をHIGHで復帰します。
(sec>0の場合) CN4-2(RST)とCN4-6(IO16)を接続してください。
sec秒後に復帰します。
 

60行目:IchigoJamをSLEEPさせます。

SLEEP
プログラムを休止する (ボタンを押すと起動し、LRUN0を実行する)

 

これでインターホン(ボタン)が押されると、SLEEPが解除されLINEにメッセージを送ります。

メッセージを送った後は、MixJuice→IchigoJamの順番にSLEEPさせます。

 

<注意>

モバイルバッテリーを電源として使用すると、消費電力が低すぎてモバイルバッテリー自体がスリープしてしまいます。

 

スリープさせない方法もあるようですが、単三電池を使えば問題なく動きました!

何ヶ月持つか実験中です!!

 

ご指摘・ご質問はTwitterからお願いします。

CC BY shoichi1031da / @shoichi1031da

twitter.com

IchigoJamで【IoTインターホン】をつくってみた!LINE連携シリーズ<その3>

f:id:hanadojo_sihan:20201019105827j:plain

IchigoJamでLINEを送るシリーズ<その3>では、実践編として「IoTインターホン(呼び鈴)」をご紹介!!

IchigoJamでLINEを送る方法 <その1>

IchigoJamで"UTF-8変換"してLINEを送る方法<その2>

今回挑戦したのはこちら↓

youtu.be

 

プログラムも接続方法もとてもシンプルなので、<その1>ブログを参考につくってみてください!!

 

【目次】

 

 

1. 必要なもの

(我が家の電池式呼び鈴は古くて検索しても見つかりませんでした)

 

2. 接続方法

今回IoT化したインターホン(呼び鈴)はこちら

f:id:hanadojo_sihan:20201019111007j:plain 

(1)カバーを開ける

f:id:hanadojo_sihan:20201019111214j:plain

2箇所ボタンに繋がる接点を発見!

この2箇所をIchigoJamのピンBTNとGNDにつなげばOK!

(2)ネジを外し、ジャンパー線に接続

f:id:hanadojo_sihan:20201019111423j:plain

銅線が鋼板とネジで留められていました!

銅線をそれぞれジャンパー線メスにねじ込みます。 

(3)IchigoJamに接続&テスト

f:id:hanadojo_sihan:20201019111615j:plain

ジャンパー線オスをIchigoJamのピンBTNとGNDにそれぞれ接続します。

10 ?BTN():WAIT3:CONT

のようなプログラムを実行し、実際にインターホンを押してみましょう!

インターホンを押すと1、押さないと0が返って来たら成功です。

 

3. プログラム概要

【プログラム】

10 VIDEO 0
20 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ"
30 BEEP20,90:WAIT60
40 SLEEP

0番にSAVEしましょう。IchigoJamのボタンを押しながら電源ONで0番のプログラムが自動実行します。

ver1.4以降なら、最初の行に「@ARUN」を入れるとボタンを押さなくても自動実行されます。

5 @ARUN

 

WiFi接続は1回接続すれば、次から自動で接続されます。

?"MJ APC SSID パスワード"

MixJuice参考サイト:準備・使い方 - イチゴジャム レシピ

 

インターホンを押してメッセージが送られてきたら成功です!

f:id:hanadojo_sihan:20201019162235j:plain

(メッセージを GUSET!! にした場合)

 

【プログラム解説】

10 VIDEO 0 画面表示を停止し処理高速化
20 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ" IFTTTにパラメータvalue1を送信
30 BEEP20,90:WAIT60 ブザーを鳴らす
40 SLEEP スリープ状態にする

 

10行目:画面表示を停止すると、消費電力を抑え、処理も高速化されます。

VIDEO 数{,数2} 画面表示非表示を切り替える。0で画面表示を停止し処理高速化 

20行目<その1>ブログをご覧ください。

40行目:SLEEP状態にし、消費電力を抑えます。

SLEEP プログラムを休止する (ボタンを押すと起動し、LRUN0を実行する)

ボタン(インターホン)が押されると、0番のプログラムが自動実行されます。

 

そしてなんとSLEEP状態だとIchigoJam消費電力が1.2μA(0.0012 mA)まで下がるそうです!

IchigoJamを低電力で定期実行させる方法 - LPC810で1分定期WAKEUPするIoT! #maker #IoT #lpc1114 #lpc810 / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

IchigoJamで省エネIoT、動作周波数別消費電流とスリープモード #maker #IchigoJam #IoT / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

 

単三電池2本(2000mA)だと、約1666時間(約69日)使えます!

2ヶ月に1回交換でokですね。

ただ、MixJuiceもSLEEPにしないと省電力化したとは言えませんね。

後日やってみたのでご覧ください↓

hanadojo-sihan.hatenablog.com

 

古いインターホン(呼び鈴)だったら簡単に作れちゃう「IoTインターホン」

ぜひやってみてください!

 

質問などはTwitterからお願いします↓

CC BY shoichi1031da / @shoichi1031da

twitter.com

IchigoJamで"UTF-8変換"してLINEを送る方法<その2>【IchigoJam × MixJuice × IFTTT】

f:id:hanadojo_sihan:20201013065828j:plain

IchigoJamで文字列をUTF-8変換して、文字化けせずLINEにカタカナ(日本語)のメッセージを送るプログラムを紹介します!

IFTTT でLINEにメッセージを送る方法は<その1>のブログをご覧ください。

hanadojo-sihan.hatenablog.com

 

今回挑戦するのはこちら↓

IchigoJamBASICでUTF-8変換しています。

 

【目次】

【プログラム】

5 CLS:POKE#1E03,1,34:INPUT S

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";

20 FOR I=0 TO LEN(S)-1

30 C=ASC(S+I):D=ASC(S+I+1)

40 IF C<160 ?STR$(S+I,1);:GOTO290

50 A=#82

60 IF C>176&&C<182 [I]=#A2+2*C%177

70 IF C>181&&C<192 [I]=#AB+2*C%182

80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196)

90 IF C>196&&C<202 [I]=#8A+C%197

100 IF C>201&&C<207 [I]=#8F+3*C%202

110 IF C>206&&C<212 [I]=#9E+C%207

120 IF C>211&&C<215 [I]=#A3+2*C%212

130 IF C>214&&C<220 [I]=#A9+C%215

140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83

150 IF D=223 [I]=[I]+2:F=2

160 IF C=220 [I]=#AF

170 IF C=166 [I]=#B2:A=#83

180 IF C=221 [I]=#B3

190 IF C>166&&C<172 [I]=#A1+2*C%167

200 IF C=172 [I]=#A3:A=#83

210 IF C=173 [I]=#A5:A=#83

220 IF C=174 [I]=#A7:A=#83

230 IF C=175 [I]=#83:A=#83

240 IF C=176 [I]=#BC:A=#83

250 IF C=164 [I]=#81:A=#80

260 IF C=161 [I]=#82:A=#80

270 ?"%E3%";HEX$(A);"%";HEX$([I]);

280 IF F I=I+1:F=0

290 NEXT

300 ?:LC0,10:?”>”;STR$(S):?

5,10,300行目はWebhoocksにHTTP通信してメッセージを送っている部分です。

<その1>で解説しています。

 

【実行画面】

?"ムカエニキテ

↓Enterを押すと

f:id:hanadojo_sihan:20201013072606p:plain

文字化けせず、ちゃんと日本語が送れました!

 

【プログラム解説】

①文字列入力、HTTP通信(GETメソッド)

5 CLS:POKE#1E03,1,34:INPUT S

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";

<その1>を参照してください。

 

②文字列のUTF-8変換

UTF-8変換サイトで変換(エンコード)の実験をしてみましょう。

<変換例>

ア→%E3%82%A2 イ→%E3%82%A4 ウ→%E3%82%A6

カ→%E3%82%AB ガ→%E3%82%AC キ→%E3%82%AD

ハ→%E3%83%8F バ→%E3%83%90 パ→%E3%83%91 ヒ→%E3%83%92

法則1:16進数2桁で表記
法則2:小文字(ァィゥェォ)のある行(ア行、ヤ行)は2飛ばし
法則3:濁点がある行(カ行、サ行、タ行)も2飛ばし
法則4:濁点+半濁点があるハ行は3飛ばし
法則5:その他の行(ナ行、マ行、ラ行)は1飛ばし
補足:「つ」だけ濁点+小文字がある。句読点や「ー」などは個別で設定。「ダ」から2つ目の値が#83になる。
 
<値の呼び方>本ブログの場合
ア → %E3%82%A2
16進数822つ目の値A23つ目の値と呼ぶことにします。

 

20 FOR I=0 TO LEN(S)-1  文字列の長さ分くりかえし

30 C=ASC(S+I):D=ASC(S+I+1) 変数Cは現在の文字のコード、変数Dは次の文字のコード

40 IF C<160 ?STR$(S+I,1);:GOTO290 カナ以外の文字はUTF-8変換する必要なし

50 A=#82 2つ目の値

60 IF C>176&&C<182 [I]=#A2+2*C%177 ア行の3つ目の値を配列に代入

70 IF C>181&&C<192 [I]=#AB+2*C%182 カ行、サ行の3つ目の値を配列に代入

80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196) タ行の3つ目の値を配列に代入(「ダ」以降、2つ目の値が#83になる)

90 IF C>196&&C<202 [I]=#8A+C%197 ナ行

100 IF C>201&&C<207 [I]=#8F+3*C%202 ハ行

110 IF C>206&&C<212 [I]=#9E+C%207 マ行

120 IF C>211&&C<215 [I]=#A3+2*C%212 ヤ行

130 IF C>214&&C<220 [I]=#A9+C%215 ラ行

140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83 濁点の場合、3つ目の値を1増やす

150 IF D=223 [I]=[I]+2:F=1 半濁点の場合、3つ目の値を2増やす

160 IF C=220 [I]=#AF 「ワ」

170 IF C=166 [I]=#B2:A=#83 「ヲ」

180 IF C=221 [I]=#B3 「ン」

190 IF C>166&&C<172 [I]=#A1+2*C%167 小文字のア行

200 IF C=172 [I]=#A3:A=#83 小文字の「ヤ」

210 IF C=173 [I]=#A5:A=#83 小文字の「ユ」

220 IF C=174 [I]=#A7:A=#83 小文字の「ヨ」

230 IF C=175 [I]=#83:A=#83 小文字の「ツ」

240 IF C=176 [I]=#BC:A=#83 「ー」

250 IF C=164 [I]=#81:A=#80 「、」

260 IF C=161 [I]=#82:A=#80 「。」

270 ?"%E3%";HEX$(A);"%";HEX$([I]); URLにUTF-8変換した文字列を付加

280 IF F I=I+1:F=0 濁点、半濁点の場合は1文字飛ばす

290 NEXT 文字列全て付加するまでくりかえし

 

IchigoJamのカナ表記で気をつける必要があるのは、濁点と半濁点です。

f:id:hanadojo_sihan:20201013084910p:plain

「ガ」で1文字ではなく、「カ」と「゛」の2文字使用しています(半濁点も同様)。

 

濁点「゛」の文字コードは222、半濁点「゜」の文字コードは223です。

<濁点と半濁点の処理>

30行目:変数Dで常に次の文字に、濁点と半濁点がないか調べる

140行目:もし 次の文字が濁点なら 現在のUTF-8の値に1増やす(ダだけ2つ目の値に影響あり)

150行目:もし 次の文字が半濁点なら 現在のUTF-8の値に2増やす

280行目:もし 次の文字が濁点or半濁点なら それを飛ばして次の文字へ

例えば

「カ゛」なら「カ」の3つ目の値に1増やして(ガの値にして)、次の文字「゛」は飛ばします。

「ハ゜」なら「ハ」の3つ目の値に2増やして(パの値にして)、次の文字「゜」は飛ばします。

 

プログラムっぽい処理はそれだけで、その他の文字のUTF-8変換はゴリ押しです!

 

③送信した文字列の表示(おまけのチャットっぽさ)

300 ?:LC0,10:?”>”;STR$(S):? 

 

★完成★

音やチャットっぽさはご自由に演出してください。

 

<その3>インターン(呼び鈴)を押すとLINEが届く「IoTインターホン」の紹介もあります。

hanadojo-sihan.hatenablog.com

 

IchigoSodaでWiFi環境のない場所でもLINEを送れるサービスを実装中のHana道場インターン生がいます。

しかもGPSで自分の位置情報も送れちゃう!?

完成をお楽しみに。

 

 

何かエラーや文字化けがありましたら、Twitterにてご指摘ください!

CC BY shoichi1031da / @shoichi1031da

twitter.com