できごとを覚えてみよう

「ボタンが押されたら何かをする」といったことは反射神経のようなものです。
特に何も考えずに「今だ!」とプログラムが動きます。

もう少しかしこくしてみましょう。「記憶」をプログラムの中で使うことで、「ボタンが押された、これは3回目だ」といったことをやってみましょう。

これが出来るようになると、「あれ、ロボットが右にばかり当たる、もっと左に動くようにしよう」や、「この人の顔さっきもカメラに写ったぞ」といったことができるようになります。

変数

プログラムの中で記憶ができるものを「変数(へんすう)」といいます。
obnizのブロックプログラムはJavaScriptという言語をベースにしているので、JavaScriptの変数を使うことができます。
その変数では何でも保存できます。数字や文字、写真やプログラムさえも覚えさせることができますが、ブロックプログラムでは数字や文字を主に使います。

好きな時に覚えさせて、好きな時に「あれってなんだったっけ」と聞くことができます。
早速使ってみましょう。

変数ブロック

早速変数を使ってみましょう。
UIボタンを押された数を覚えて、画面に何回目なのかを表示してみます。

変数は左側の「変数」の中にある「変数の作成...」ボタンから作成できます。

ボタンを押すと名前を入れるよう画面が出てきますので、こちらに半角英数で名前を入力します。
今回は

OKを押すことで変数ブロックの中に作った変数を操作するためのブロックがでてきます。

覚えさせる

実際に覚えさせてみましょう。

一番上にある「代入」というのがあるのが、変数に覚えさせるブロック、一番下にある変数の名前しか無い丸いブロックが変数の値を取り出すものになります。

変数の考え方

変数は箱のようなもので、数字や文字などを”入れて”覚えさせることになります。なので、覚えさせるときは「変数に代入」という言い方になります。

プログラムしてみよう

では、実際に覚えさせてみましょう。
countという変数に代入するブロックをループに入ってしまう前に置きます。

そして、入れる値は数字の0にしましょう。「計算」というブロックの中の一番上にすうじブロックがありますので、それを移動させて、さっき置いたブロックの右側の代入の右側のところに移動させます。

これで0という数字がcountという変数に入ります。
このあとcountに入っているものを取り出したら必ず0となります。

実際にobnizのディスプレイに表示するところでcountを使ってみましょう。
変数ブロックにある丸いcountブロックをつかんで「obnizに Hello Worldを表示する」となっているそのHello Worldのところに置いてみましょう。

これでobnizのディスプレイにcount変数に入っているものが表示されます。
いまであれば0です。

このようなプログラムが完成します。

<!-- Block Program Example -->
<xml xmlns="http://www.w3.org/1999/xhtml">
  <variables>
    <variable type="obniz" id="X2:3=S(hsdv0mk{aavHW">obniz</variable>
    <variable type="UIButton" id="80uQ37Yg!_RM@zbm[`cF">button</variable>
    <variable type="UIButton" id="#7$4fAkr(P%;.%JaKIy`">backbutton</variable>
    <variable type="UIButton" id="akidXEU*0XQ}VT^!o6Sp">rightbutton</variable>
    <variable type="UIButton" id="KBvD*sLV+fD7(ieEkq5x">leftbutton</variable>
    <variable type="" id="hpvY$6K[tgY$$/L_8%xc">count</variable>
    <variable type="dcmotor" id="V?6USN(jVhQ,P{82]/*M">dcmotor</variable>
    <variable type="airobotkit" id="Jk=/mw~HxfZs@VDVmFYY">airobotkit</variable>
    <variable type="led" id="!MAt1@Dsy)#f.p,K@;=%">led</variable>
  </variables>
  <block type="obniz_connect" id="Z8!^LPO*[5?q{e*57()u" x="154" y="225">
    <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
    <value name="obniz_id">
      <shadow type="text" id="XmI_$os3vVOeQ~scg106">
        <field name="TEXT">OBNIZ_ID_HERE</field>
      </shadow>
    </value>
    <next>
      <block type="obniz_ui_button" id="6f,*tW`x1z8QTswYk@R0">
        <field name="button" id="80uQ37Yg!_RM@zbm[`cF" variabletype="UIButton">button</field>
        <value name="text">
          <shadow type="text" id="e~!4XWXTgFHN.yxr9k{H">
            <field name="TEXT">ボタン</field>
          </shadow>
        </value>
        <next>
          <block type="variables_set" id="|@yr:97uh!{ltB3:x8}.">
            <field name="VAR" id="hpvY$6K[tgY$$/L_8%xc" variabletype="">count</field>
            <value name="VALUE">
              <block type="math_number" id="hv1Q6W`J?f4Z4;YoUGbR">
                <field name="NUM">0</field>
              </block>
            </value>
            <next>
              <block type="obniz_util_repeat" id="p0}Pg~s6Ds*c4`8cB]0`">
                <statement name="DO">
                  <block type="controls_if" id="V;yd?A05CxkfZ!NXfb=U">
                    <value name="IF0">
                      <shadow type="logic_boolean" id="dTmdKibF6A^)pV:?Fy%#">
                        <field name="BOOL">TRUE</field>
                      </shadow>
                      <block type="obniz_ui_button_click" id="VG$Xvw2AMdaR]7//M1_r">
                        <field name="button" id="80uQ37Yg!_RM@zbm[`cF" variabletype="UIButton">button</field>
                      </block>
                    </value>
                    <statement name="DO0">
                      <block type="obniz_display_clear" id="VK,b!b/7%OPN]B]^F(Nn">
                        <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
                        <next>
                          <block type="obniz_display_print" id="P[Aee+@,o#:sy(SS9,b6">
                            <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
                            <value name="print_text">
                              <shadow type="text" id="{M2N08#k{.axEHsDQqoT">
                                <field name="TEXT">Hello, World!</field>
                              </shadow>
                              <block type="variables_get" id="g[kte6Y:E74_:%:xt_yK">
                                <field name="VAR" id="hpvY$6K[tgY$$/L_8%xc" variabletype="">count</field>
                              </block>
                            </value>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

これを実行してでてくる「ボタン」というボタンを押せばobnizのディスプレイに0という数字が表示されると思います。

値を書き換える。

一度しか変数に値を入れないのであれば、変数の意味がありません。
今度はボタンが押された数を変数を使って数えてみましょう。

値を書き換える方法は2つあります、1つは中に入っている数字を増やしたり減らしたりできる専用のブロックがあるので、それを使う方法です。
これは変数に入っているのが数字で、増やしたり減らしたりしたいときだけに使えます

もう1つは新しい値を入れる方法です。
1増やしたいとして、今まで入っていた値に1を足して、新しい値としてまた変数に入れるという方法です。

今回はボタンを押した数を数えるだけなので、数字を増やすブロックを使ってみます。

ボタンが押された時に実行されるブロックに 「変数countを増減1」というのがあるので、これを入れます。すると、このようになります。

<!-- Block Program Example -->
<xml xmlns="http://www.w3.org/1999/xhtml">
  <variables>
    <variable type="obniz" id="X2:3=S(hsdv0mk{aavHW">obniz</variable>
    <variable type="UIButton" id="80uQ37Yg!_RM@zbm[`cF">button</variable>
    <variable type="UIButton" id="#7$4fAkr(P%;.%JaKIy`">backbutton</variable>
    <variable type="UIButton" id="akidXEU*0XQ}VT^!o6Sp">rightbutton</variable>
    <variable type="UIButton" id="KBvD*sLV+fD7(ieEkq5x">leftbutton</variable>
    <variable type="" id="hpvY$6K[tgY$$/L_8%xc">count</variable>
    <variable type="dcmotor" id="V?6USN(jVhQ,P{82]/*M">dcmotor</variable>
    <variable type="airobotkit" id="Jk=/mw~HxfZs@VDVmFYY">airobotkit</variable>
    <variable type="led" id="!MAt1@Dsy)#f.p,K@;=%">led</variable>
  </variables>
  <block type="obniz_connect" id="Z8!^LPO*[5?q{e*57()u" x="154" y="225">
    <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
    <value name="obniz_id">
      <shadow type="text" id="XmI_$os3vVOeQ~scg106">
        <field name="TEXT">OBNIZ_ID_HERE</field>
      </shadow>
    </value>
    <next>
      <block type="obniz_ui_button" id="6f,*tW`x1z8QTswYk@R0">
        <field name="button" id="80uQ37Yg!_RM@zbm[`cF" variabletype="UIButton">button</field>
        <value name="text">
          <shadow type="text" id="e~!4XWXTgFHN.yxr9k{H">
            <field name="TEXT">ボタン</field>
          </shadow>
        </value>
        <next>
          <block type="variables_set" id="|@yr:97uh!{ltB3:x8}.">
            <field name="VAR" id="hpvY$6K[tgY$$/L_8%xc" variabletype="">count</field>
            <value name="VALUE">
              <block type="math_number" id="hv1Q6W`J?f4Z4;YoUGbR">
                <field name="NUM">0</field>
              </block>
            </value>
            <next>
              <block type="obniz_util_repeat" id="p0}Pg~s6Ds*c4`8cB]0`">
                <statement name="DO">
                  <block type="controls_if" id="V;yd?A05CxkfZ!NXfb=U">
                    <value name="IF0">
                      <shadow type="logic_boolean" id="dTmdKibF6A^)pV:?Fy%#">
                        <field name="BOOL">TRUE</field>
                      </shadow>
                      <block type="obniz_ui_button_click" id="VG$Xvw2AMdaR]7//M1_r">
                        <field name="button" id="80uQ37Yg!_RM@zbm[`cF" variabletype="UIButton">button</field>
                      </block>
                    </value>
                    <statement name="DO0">
                      <block type="math_change" id="L!~bet)(!@QKO357x#dp">
                        <field name="VAR" id="hpvY$6K[tgY$$/L_8%xc" variabletype="">count</field>
                        <value name="DELTA">
                          <shadow type="math_number" id="OHZ6(}#si@?:yuMm#M3W">
                            <field name="NUM">1</field>
                          </shadow>
                        </value>
                        <next>
                          <block type="obniz_display_clear" id="VK,b!b/7%OPN]B]^F(Nn">
                            <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
                            <next>
                              <block type="obniz_display_print" id="P[Aee+@,o#:sy(SS9,b6">
                                <field name="obniz" id="X2:3=S(hsdv0mk{aavHW" variabletype="obniz">obniz</field>
                                <value name="print_text">
                                  <shadow type="text" id="{M2N08#k{.axEHsDQqoT">
                                    <field name="TEXT">Hello, World!</field>
                                  </shadow>
                                  <block type="variables_get" id="g[kte6Y:E74_:%:xt_yK">
                                    <field name="VAR" id="hpvY$6K[tgY$$/L_8%xc" variabletype="">count</field>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                </statement>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>

これを実行してみます。
同じようにボタンを押すとobnizのディスプレイに1と表示されます。
obnizのディスプレイに表示するよりも先に変数countに入っている数字を1増やしているので、
countは0+1で1が入っています。そしてobnizのディスプレイにcountに入っている値、つまり1が表示されます。

もう一度ボタンを押すと、こんどは1+1で2がcountに入り、obnizに2が表示されます。ちゃんと記憶できましたね!

これを使えば、何かの数を数えたり、何かが起きたのか起きていないのかを簡単に調べる高度なプログラムを作ることができます。

発展

もし、余裕があれば、こんなことをしてみてはどうでしょうか。

  1. ボタンが3回押された時にobnizのディスプレイに文字を出す。

  2. countの増減ブロックではなく、代入ブロックと足し算ブロックを使って変数の数字を増やす。



Next : AI: Find a face with a camera.

You will Get in Few Days

Circuit for Starter “obniz Board” is available on Amazon and other online stores.
You can get it at below

Our products and resellers

Forum

Visit our developer’s forum to discuss and discover technologies.

Forum

Contact

Feel free to contact out support and technical team.

Contact us