Retro Gadgets: 基本プログラミング ガイド (ボタン、スイッチ、ノブなど)

Retro Gadgets のさまざまな入力コンポーネントの使用方法と、それらをコーディングして基本的なことを行う方法を示すためのガイド。

 

概要

Retro Gadgets には、ガジェットにユーザー入力を提供するために使用できるさまざまなコンポーネントがあります。 ボタン、スイッチ、ノブ、スライダーなどを取り揃えております。 このガイドでは、これらのコンポーネントを使用してガジェットにコーディングする方法を示します。

このガイドは、プログラミングの経験がほとんどまたはまったくない人を対象としており、プログラミングと Lua の基礎に関する短期集中コースとしても役立ちます。 このガイドをできる限り迅速かつ簡潔に保つように努めます。

ガジェットの組み立て

新しいガジェットをゼロから組み立てることから始めます。 画面の左側からマルチツールを引き出し、メイン メニューから新しいガジェットを作成するか、現在のガジェットをアーカイブ ドロワーにしまいます。 私たちの新しいガジェットでは、最大の正方形のボードを使用しましょう。 ボードの引き出しに行き、そのうちのXNUMXつを引き出します。それは一番上からXNUMX番目で、机の上に置きます.

XNUMX つ目を引き出して、もう XNUMX つに接続し、はんだごてを使用してそれらを「融合」させます。

それでは、簡単なオン/オフスイッチから始めましょう。 入力ドロワーに移動し、スイッチを見つけて、選択したものの XNUMX つをガジェットに配置します (参考までに、RMB クリックを使用して回転させることができます)。 後で他のもののためにスペースを空けるために、私のものを左隅に置きました。 次に、何らかの出力コンポーネントが必要です。 出力ドロワーに向かい、LED に移動し、単一の LED (マルチ LED ではない) をつかみ、ガジェットの右側に配置します。 角型のLEDを選びました。

後で時間を節約して、このガイドで使用する残りの部分を追加しましょう. 選択したボタン、ノブ、およびスライダー (小さいもの) を左側に配置し、小さなディスプレイをガジェットの右側の LED の下に配置します。 また、先に進んで視覚化のためにペイントしましたが、そうする必要はありません。 この時点での私のセットアップは次のとおりです。

赤: オン/オフ スイッチ
黄:ボタン
青:ノブ
緑:スライダー

また、Misc ドロワーから CPU、ROM、およびビデオ チップも必要です。 後で詳しく説明しますが、とりあえず、それぞれの最小のものを取得して、ガジェットに配置します。 ボードの前面にはスペースがありませんので、カバーを外してボードを裏返し、背面に置きます。

初めてのプログラミング

私たちのデバイスはガイド用に完全に組み立てられているので、プログラミングを始めましょう。 マルチツールを左からスライドさせて、メイン メニューの [ガジェットの編集] に移動します。 次に、ガジェット ページで [編集] をクリックすると、アセット リストが表示されます。 そこに「CPU0.lua」ファイルがあります。 それをクリックし、[編集] をクリックすると、CPU をプログラムできるコーディング画面に移動します。 CPU はガジェットの「頭脳」であり、すべてのプログラミングが行われる場所です。 これは、他のすべてのコンポーネントに何をすべきかを伝えるものです。 既に存在するコードは無視してください。 Ctrl-A ですべて選択して削除します。 その内容については後で説明しますが (後で使用します)、何もないところから学ぶ方がよいと思います。 その理由がわかります。

Lua はとてもシンプルで初心者に優しい言語です。 これまでにコーディングしたことがない場合でも、心配しないでください。このガイドはあなたを対象としており、すべての意味とその仕組みについて説明します。 最初にやりたいことは、LED をオンにすることです。 次のコード行をプログラムに追加します。 大文字と小文字を区別:

gdt.Led0.State = true

入力すると、ポップアップが表示され、自動入力の提案が表示されることに気付くでしょう。 これは、新しいプログラマーにとって非常に価値のあるツールです。見逃さないでください。 コードを完成させるために利用可能な方法のリストを提供し、各項目の意味を簡単に説明します。 上矢印と下矢印を使用して、さまざまなものを強調表示し、それらの説明を表示できます。

それでは、追加したばかりのコード行を調べてみましょう。

gdt.Led0.State = true

そのコードには、ピリオドと等号で区切られたさまざまな部分があります。 最初の部分「gdt」は a と呼ばれます。 ベーシックスペース. これは、ガジェットのコンポーネント (スイッチ、ボタン、LED など) にアクセスし、現在のコード行で使用できるようにするコードです。 コンピューター上のフォルダーを開くようなものだと考えてください。 フォルダ内のファイルにアクセスするには、最初にフォルダを開く必要があります。 コーディングでも同じように機能します。コンポーネントは、ガジェット自体である「フォルダー」内の「ファイル」です。ガジェットのコンポーネントにアクセスするには、「gdt」ベーシックを呼び出して「フォルダーを開く」必要があります。スペース。 「gdt」と入力した後。 ピリオドを付けると、ガジェットのすべてのコンポーネントのリストが表示されます。

次の「Led0」は LED の名前です。 デバイスがオフのときにコンポーネントをクリックすると、コンポーネントの名前が表示されます。 その末尾にピリオドを追加すると、他の XNUMX つの可能なコマンド、Color と State が表示されます。 状態は ブール値 つまり、オンまたはオフのいずれかであり、「true」または「false」で示されます。 「true」を追加することで、デバイスに電源が供給されているときはいつでも LED をオンにすることができます。 それでは、電源ボタンを押して、LED が点灯するのを確認してください。

色も変更できます。 このコードを入力してください:

gdt.Led0.Color = color.green

ご覧のとおり、複数の色のオプションがあります。 上記のコードを使用して行ったように、事前に定義された色を選択するオプションがあります (自動入力ポップアップで使用可能な色のリストが表示されます)。または、RGB 値を自分で指定して独自の色を作成することもできます。このような:

gdt.Led0.Color = カラー(0, 255, 0)

これにより、LED も緑色になります。 ここでは「色」が大文字になっていることに注意してください。これは、以前に使用した定義済みの色と区別するためです。 Lua は大文字と小文字を区別します。常に覚えておいてください。 括弧内の 0 つの数値は、それぞれ赤、緑、青の値で、255 ~ XNUMX のスケールで表示されます。これらの数値をいじって、どのような色が得られるかを確認してください。ただし、それらをコンマで区切ることを忘れないでください。

好きな方法でLEDを好きな色にして、次に進みましょう。

スイッチ

次のタスクは、スイッチをオンにすると LED が点灯するようにすることです。

スイッチはオンまたはオフです。 わかりました、船長オブ​​ビウス。 それはブール値の視覚化だからです。 スイッチはオンまたはオフのいずれかであり、その状態に応じてブール値の「true」または「false」を出力します。

前に追加した Led State コードを削除します。

gdt.Led0.State = true

必要に応じて、カラー コードをそのままにしておくことができます。 このコードは、デバイスの電源が入っているときはいつでも LED が点灯するようにします。 スイッチがオンのときだけオンになるようにします。 これは非常に簡単に実行できます。次のコード行を使用するだけです。

gdt.Led0.State = gdt.Switch0.State

文字通り、「LED の状態はスイッチの状態と同じです」とコンピューターに伝えています。 したがって、スイッチの状態がオンまたは「true」の場合、LED の状態も true になります。 電源ボタンを押して、輝かしい LED が明るく輝くのを見てみましょう!

.. うーん、何かがおかしい。 スイッチを入れてもLEDが点灯しません。 このガイドは最悪です! でも、ちょっと待って、スイッチを入れたまま電源ボタンをオフにして、もう一度オンにすると、LED が点灯します。 驚き、私はちょうどの仕事を示しました update() 関数これは、新しいガジェットを作成して初めて CPU コーディング画面を開いたときに、デフォルトでプログラムに含まれていたコードです。 update 関数を使用しない場合、入力したコードは、ガジェットの電源を入れてから XNUMX 回だけ実行されます。 次に電源を入れるまでコードは実行されません。 そのため、電源を入れると、スイッチの状態を見て、スイッチがオフであることを確認するため、LED をオンにしません。 次に、スイッチをオンにしても、コードは既に実行されており、スイッチの状態の変化を探していないため、何も起こりません。 同様に、スイッチをオンのままにし、ガジェットの電源をオフにして再度オンにすると、コードが再度実行され、スイッチがオンになっていることが確認され、LED もオンに設定されます。

Update() 関数
update() 関数を使用するということは、関数内に配置されたすべてのコードが新しいティックごとに実行されることを意味します。 グラフィックスをレンダリングするとき、ティックは個々のフレームのように考えることができます。 デバイスは、「tps」または XNUMX 秒あたりのティック数 (グラフィックスの FPS と同様) で定義された速度で実行されます。これは、ガジェットがオンになっているときはいつでもコーディング ウィンドウから確認できます。 ガジェットが複雑で要求が厳しいほど、tps が低くなる可能性があります。これは、グラフィックの要求が高いゲームの FPS が低くなるのと同じです。

とにかく、 update() 関数を使用するには、これをコードの一番上に追加するだけです:

関数 update()

すべての関数には終了が必要なので、コードの一番下に「終了」という行を追加するだけです。


ガジェットの電源を入れて、スイッチを何度も切り替えると、スイッチで LED が希望どおりにオン/オフすることがわかります。 おめでとう!

要約すると、ライブで変更する必要があるものはすべて update() 関数内に配置する必要があります。 ボタンを押す、スイッチを切り替える、スライダーやノブを動かすなど。 update() 関数内のコードはティックごとに実行されます。 その外側のコードは一度だけ実行されます。

ボタンと if/then ステートメント

ボタンは、ブール値を出力するという点で、スイッチと非常によく似た働きをします。 しかし、それはいくつかの異なる方法でそれを行います:

ここでは、ボタンが押されている限り「true」の値を出力する「ButtonState」コマンドが理想的です。 他の XNUMX つは XNUMX つのティックのみを出力します。 それは私が望んでいることではありません。ボタンを押している限り機能するようにしたいので、この次のタスクでは ButtonState を使用します。

LEDを点灯・消灯するスイッチがあります。 スイッチコードを次のように置き換えることで、ボタンを使用して同じことを行うことができます。

gdt.Led0.State = gdt.LedButton0.ButtonState

しかし、2 つの入力で同じことを行うのではなく、ボタンを使用して別のことをしたいと考えています。 ボタンを押している間、LED を別の色に変更し、離すと元に戻すようにしたいと考えています。 そのため、スイッチを使用して LED のオンとオフを切り替えるコードを残しました。

上の画像でわかるように、LED の色を緑に変更しました。 ボタンを長押ししたときに LED を赤くしたい場合はどうすればよいですか? を使用してそれを行うことができます if / thenステートメント.

次のコードをプログラムの最後に追加します (ただし、更新関数の「終了」の前)。

gdt.LedButton0.ButtonState == true の場合 gdt.Led0.Color = color.red end

TAB キーを使用して XNUMX 行目をインデントすることは、コードを整理して読みやすくするための良い方法ですが、必須ではありません。

このコードが行うことは、「ボタンが押された場合、LED の色を赤にする」ことをコンピューターに伝えることです。 if/then ステートメントを使用する場合は、 条件 – ボタンの状態が「true」であるか、ボタンが押されていること。 ボタンが押されたときなど、条件が満たされると、LED の色を赤に設定するステートメント内のコードが実行されます。 また、条件行の二重の等号にも注意してください。 このように条件を書く必要があります。

デバイスの電源を入れてスイッチを入れると、LED が緑色に点灯します。 ボタンを押すと赤くなり、ボタンを離すと緑に戻ります。 万歳! ここで、上部に「gdt.Led0.Color = Color(0, 255, 0)」がなければ、色は緑に戻りません。 ボタンが押されていない場合の色を指定するコードがないため、赤のままです。 そのままにしておくこともできますが、そのタスクを処理する別の方法は、 ほかに if/then ステートメントの後。

gdt.LedButton0.ButtonState == true の場合 gdt.Led0.Color = color.red でなければ gdt.Led0.Color = color.green end

それはかなり自明です。 コンピューターに「ボタンの状態が true の場合、LED の色を赤に設定します。 それ以外の場合は、LED の色を緑に設定してください。」

これで、前と同じように、ライトをオンにしてボタンを前後に切り替えて LED の色を変更できます。if/then ステートメントのおかげで、コードは以前よりも少しきれいに見えます。

スライダー、ノブ、および変数

わかりました、私たちはブール値の専門家になりました。 何か違うことに取り組みましょう。 スライダーとノブは異なり、ブール値を出力せず、代わりに数値を出力します。 スライダーは 0 から 100 まで、ノブは負の範囲で -100 から 100 までです。

スライダーを使って別のことをしてみましょう。 これを使用して、LED の青色レベルを制御します。 そのためには、if/then ステートメント内の XNUMX つの「色」関数を、事前定義された色から RGB に変更しましょう。

これまで、RGB カラー関数を使用するときは常に、上に示したように、ハード ナンバーを使用して RGB 値を自分で指定していました。 255 赤、0 緑、0 青、または 0 赤、255 緑、0 青。 ハードコーディングして設定する必要はありません。数値を出力するものなら何でも設定できます。 これを見て!

gdt.Led0.Color = Color(0, 0, gdt.Slider0.Value)

このコード行は、赤と緑の値が 0 であり、青の値が Slider の値であることをコンピューターに伝えます。 しかし待ってください。スライダーは 0 ~ 100 までしか動かず、RGB 範囲は 0 ~ 255 です。 そのため、同時にそのスライダーの値を 2.55 倍にする必要があります。

gdt.Led0.Color = カラー(0, 0, gdt.Slider0.Value * 2.55)

わかりました、これは少し乱雑に見え始めています。 ここが variables 便利です。 変数は、指定した名前で情報を格納します。 この青いマンボジャンボをすべて変数に入れて、この方程式全体を何度も入力する必要がないようにしましょう。 プログラムの先頭 (更新関数内) に次を追加します。

ローカル ブルー = gdt.Slider0.Value * 2.55

「ローカル」という単語は変数を作成し、その後で変数を呼び出したいものになります。 変数の目的が青色の値を格納することであるため、変数を「青」と呼びました。 ただし、好きなように呼び出すことができます。

ここで、RGB 関数の青の値の代わりに「gdt.Slider0.Value * 2.55」と入力する代わりに、「青」という変数の名前を使用できます。

if gdt.LedButton0.ButtonState == true then gdt.Led0.Color = Color(255,0,blue) else gdt.Led0.Color = Color(0,255,blue) end

これで、ガジェットの電源を入れ、スライダーを使用して LED の青色レベルを設定できます。 かっこいいでしょ?

ノブを使用して同じことを行うこともできますが、ノブは -100 から 100 まで変化するため、負の RGB 値を持つことはできないため、範囲の半分は何もしません。 その代わりに何か別のことをしたいのですが、それを使って、ずっと前に LED の下に配置した画面にノブの値を出力したいと思います。

テキストを画面にレンダリングする方法については、既に適切なガイドがあります。 それを読んで こちら 続行する前に

画面にテキストを表示する方法がわかったら、画面を使用してノブの値を表示してみましょう。 このコードを一番下に追加し、一連の Return キーを使用して残りのコードから分離します。 ただし、更新機能内に保管してください。

local videochip = gdt.VideoChip0 local font = gdt.ROM.System.SpriteSheets[“StandardFont”] gdt.Screen0.VideoChip = videochip ローカルノブ = gdt.Knob0.Value videochip.Clear(videochip, color.black) videochip.DrawText( videochip、vec2(0,0)、フォント、ノブ、color.white、color.black)

ここで何をしているのかを段階的に明確にするために、ガジェットのビデオ チップを videochip という変数に設定し、組み込みフォントを font という変数に設定し、画面を videochip にペアリングし、次の変数を作成しました。私たちのノブ値。 次に、画面をクリアし、ノブ変数に含まれるテキストを画面に描画することで、すべてのティックを開始します。 電源ボタンを押して、魔法が起こるのを見てみましょう!

うーん、私のガイドがまたダメだ! 冗談だ。 DrawText コマンドではテキストが 文字列、数値ではありません (プログラミングでは整数と呼ばれます)。 文字列は文字どおりに解釈される、つまり入力したとおりに正確に表示される一連の文字です。

ノブの値を画面に表示するには、その値を文字列に変換する必要があります。 幸いなことに、これは非常に簡単です。変更する必要があるのは、コードの XNUMX 行 (ノブ変数を作成する行) だけです。 それ以外の:

ローカルノブ = gdt.Knob0.Value

次のように変更します。

ローカルノブ = (tostring(gdt.Knob0.Value))

これにより、ノブの値が文字列に変換されます。 これで、ガジェットの電源を入れることができます。

これが当社の完全完成品です。 スイッチは LED のオンとオフを切り替え、ボタンは LED を緑と赤の間で切り替え、スライダーは青のレベルを制御し、画面にはノブの値が表示されます。 終わったよ!

コメント

ArabicEnglishFrenchGermanItalianJapaneseKoreanPortugueseSpanish