2月22日のArduino勉強会で気づいた点、説明が不足していた部分をここで補足します。
変数は、値を保持する入れ物(箱)だと説明しましたが、配列は連続した箱を持つ入れ物で、n番目の値(インデックス)を取り出す時には、
tones[n]
のようにn番目の数字をカギ括弧[]で括って使います。配列のインデックスは0始まりで配列の長さ-1の値になります。
パソコンから読み込んだ文字chから'1'を引くことでtonesのインデックスを計算しているのは、 ASCIIコードで0から9の数字が連続して定義されていることを利用しています。
index = ch - '1'; // 1の文字から0のインデックスを求めるために、'1'を引く
「ブザーを使って音を出す」の例題では、パソコンから送られた文字(コード)をchを配列tonesの添え字 *1indexに変える部分で文字コードという名前を出しましたので、代表的な ASCIIコードで文字コードについて説明します。 *2
パソコンでは、人が使っている文字をパソコンで理解できる数値で表現しています。例えばアルファベットのAは、 ASCIIコードでは65という数値で表されます。光センサーの値をシリアルモニターで見たときにアルファベットの大文字がたくさん表示されたのは、65近辺の値をパソコンに送っていたからです。
ASCIIコードの最初の方は、制御コードと言って目に見えない文字(改行やバックスペース等)が含まれています。 このような文字コードを使ってパソコンが文字を表示していることを覚えておいて下さい。