差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
gimmickkouza:electronic_basic:3:4_helloworld [2024/05/22 20:58] – 作成 lutamestagimmickkouza:electronic_basic:3:4_helloworld [2024/06/21 18:25] (現在) lutamesta
行 2: 行 2:
 電子工作の世界に於けるLチカのように、プログラミングの世界にも定番の初心者通過儀礼があります。それがHello,World!です。 電子工作の世界に於けるLチカのように、プログラミングの世界にも定番の初心者通過儀礼があります。それがHello,World!です。
 プログラミング界の歴史的経緯によって、この言葉は初心者プログラマが初めてのプログラミングで表示する定番のフレーズとなっています(興味のある人は調べてみてね) プログラミング界の歴史的経緯によって、この言葉は初心者プログラマが初めてのプログラミングで表示する定番のフレーズとなっています(興味のある人は調べてみてね)
-折角なので、このHello,World!を使ってシリアル通信と、シリアルモニタの使い方を覚えましょう。 +折角なので、このHello,World!を使って"シリアル通信"と、"シリアルモニタの使い方"を覚えましょう。 
 +  
 ===== とりあえずやってみよう ===== ===== とりあえずやってみよう =====
 サンプルコードの3-4_HelloWorld.inoのファイルを開いてください。 サンプルコードの3-4_HelloWorld.inoのファイルを開いてください。
行 9: 行 9:
 {{:gimmickkouza:electronic_basic:3:3-8.png?600|}} {{:gimmickkouza:electronic_basic:3:3-8.png?600|}}
  
 +Arduinoとパソコン、或いはArduinoと一部の電子部品の間では、"シリアル通信"を使ってデータをやり取りできます。
 +(Arduino 対 電子部品のシリアル通信は6章で出てきます。お楽しみに!)
 +上記のプログラムはArduinoからパソコンあてに、シリアル通信を使って文字列のデータを送り、それをパソコン上のArduinoIDEで見るためのプログラムです。
 +  
 +==== コード解説 ====
 +まずはプログラムを解説します。今回も命令文はたったの3行だけです!ヤッタネ!!
 +
 +== 1行目 ==
 +またしても宣言部はなにもありません。空白行です。
 +
 +== 3行目 ==
 +
 +<code>Serial.begin(9600);//シリアル通信の初期化をする</code>
 +
 +Serial関数は、シリアル通信を行うための関数です。
 +Serial~の後ろにつく言葉によって、シリアル通信にまつわるいくつかの機能を使い分けます。
 +まず最初はSerial.beginです。
 +
 +Serial.beginではシリアル通信の初期化をして、送信側の転送レート(ボーレート)を設定します。
 +__シリアル通信では送信側と受信側の転送レートを同じ数字に合わせる必要があります。__
 +レートの数値は、パソコンと通信する場合は 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 のどれかにする必要があります。
 +今回は9600に設定します。
 +
 +== 7行目 ==
 +
 +<code>Serial.println("Hello,World!");//ArduinoからPCに文字列を送る</code>
 +
 +いよいよArduinoからパソコンにシリアル通信でデータを送ります。
 +使う関数は、Serial.printlnです。
 +先程のSerial.beginはシリアル通信の初期設定をして通信を開始する命令でした。
 +今回のSerial.printlnは、シリアル通信で実際にデータを送る時に使う命令の一つです。
 +
 +Serial.printlnは、後続の括弧の中にあるデータを、後ろに改行をつけた状態でシリアル通信で送ります。
 +今回は Hello,World! という文字列を送りたいのですが、この__文字列をそのまま括弧の中に書くと、ArduinoIDEはこれが「文字列のデータ」であると認識できずエラーが出てしまいます。__
 +今回のように、__Arduinoのプログラムの中で文字列のデータを扱いたい時は、その文字列は必ず「" "」(ダブルクォーテーション)で囲みます。__
 +なので "Hello,World!" となります。
 +そしてHello,World!の後ろには、目には見えませんが改行がついた状態で送られてきます。
 +
 +オマケの情報:ちなみに改行をつけたくない場合は、Serial.printを使います。
 +
 +
 +== 8行目 ==
 +
 +<code>delay(1000);//1秒待機する</code>
 +
 +3-3Lチカのコード解説の下の方で出てきたdelayが再登場です。
 +(未履修の人は前の前のページにあるので見てね)
 +ここでの用法もLチカ応用編と同じで、"Arduinoの早すぎる処理速度の調整用"です。
 +このdelayを挟まないと**凄まじい速度でHello,World!の文字列が送られ続けてきてしまう**ので、Hello,World!をひとつ送ったら次にHello,World!を送り出すまで1秒待たせる処理を挟み、適度なテンポで文字列が送られてくるようにします。
 +
 +
 +----
 +
 +解説は以上です!とりあえずこのプログラムをArduinoに書き込んでみましょう。
 +Arduinoをパソコンに繋げて、ツールバーからボードとポートの設定をします。以下はおさらいです。
 +
 +ツール→ボード→Arduino UNO R4 Minima を選択
 +ツール→ポート→COM○○(Arduino UNO R4 Minima) を選択
 +
 +ツールバーの下の「書き込み」ボタンを押して、エラーが出ずプログラムが書き込めていれば完了です。
 +
 +  
 +==== シリアルモニタを使う ====
 +プログラムをArduinoに書き込むと、Arduinoからパソコンに文字列が送られ始めます。
 +送られてきた文字列は、「シリアルモニタ」を使って見ることができます。
 +
 +{{:gimmickkouza:electronic_basic:3:3-9.png?600|}}
 +
 +シリアルモニタを出すには、ツールバーの下の緑の帯の右端、虫めがねのアイコンをクリックしてください。
 +上の図の黄色い矢印で示している部分です。
 +
 +{{:gimmickkouza:electronic_basic:3:3-10.png?600|}}
 +
 +ウィンドウの下部に「シリアルモニタ」が出現しました。
 +Arduinoに問題がなければ、この画面にHello,World!の文字が約1秒間隔で次々に表示されていくと思います。
 +
 +シリアルモニタ右端にある「9600 baud」は、パソコン側(受信側)の転送レートです。
 +コード解説のおさらいです。__シリアル通信では送信側と受信側の転送レートを合わせる必要があります。__
 +先ほどArduino(送信側)の転送レートは、9600で設定しました。
 +もしシリアルモニタ右端のパソコン側(受信側)のbaudが9600以外の数値になっている場合は、ここをクリックしてArduino(送信側)と同じ9600 baudに変えてください。
 +  
 +  
 +===== 応用編:プログラムをいじって観察しよう! =====
 +**__新しいサンプルコードに出会ったら、理解を深めるために是非ともいじくってみてください!__**
 +(元コードのバックアップを取っておくことをお忘れなく!)
 +例えば、3-4_HelloWorld.inoのプログラムに下記の改変を加えてArduinoに書き込むと、出力の様子が変化します。
 +実際にいじくってどうなるか観察してみましょう (一つずつやってみてね!)
 +<text background="success">**いじくる時は[[gimmickkouza:electronic_basic:3:2_rule|]]を守ろうね!**</text>
 +
 +  * Serial.printlnの括弧の中の文字列を好きな文字に変えてみる( " " を忘れずに!)
 +  * Serial.println を、Serial.print に変えてみる
 +  * delayの括弧の中の数値を変えてみる
 +  * delayの一文をコメントアウトしてみる
 +  
 +/*<alert type="danger">いじくるときはArduino言語のお約束を守ろうね!とあると初心者忘れなくていいかも
 +https://curiouser.sakura.ne.jp/lutamesta/doku.php/gimmickkouza/electronic_basic/3/2_rule#arduinono%E8%A8%80%E8%AA%9Eno%E6%9B%B8ki%E6%96%B9noo%E7%B4%84%E6%9D%9F
 +</alert>*/