課題3 LCD

課題3-1

  1. TINKERCADのサイトにアクセスしてログインする。
  2. 「新規作成」→「回路」をクリックする。
  3. 入れる部品の種類を「スターター Arduino」に切り替え、「2線 LCD」を選んで入れる。


  4. 「シミュレーションを開始」をクリックして動作を確認する。
  5. (上の行には「Hello World!」、下の行にはシミュレーションを開始してからの経過時間(秒)が表示される)
    (ダイヤルはLCDの輝度をコントロールするもの。左に回すと表示が消え、右に戻せばまた表示される)


  6. 入れる部品の種類を「コンポーネント 基本」に戻し、「押しボタン」「抵抗 (10kΩ)」を追加して配線する。
  7. (デフォルトで入っていた配線は変えない)
    (ブレッドボードでは、a~e, f~jはそれぞれ中で縦一列につながっている。また、上下の+, -は中で横一列につながっている。そのため、押しボタンと抵抗の配線は結局前回と同じつながり方になる)


  8. コードを「文字」に切り替え、以下のコードをコピー&ペーストする。
  9. // LCDを使うためのライブラリ
    #include <LiquidCrystal.h>
    int n = 0; // 表示する数値
    int pre; // 直前の押しボタンの状態
    int buttonPin = 13; // 押しボタン用のピン
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCDの初期化
    
    void setup(){
      pinMode(buttonPin, INPUT); // 押しボタン用のピンを出力モードにする
      lcd.begin(16, 2); // 横・縦の文字数を指定して開始
      lcd.print("Press Count"); // 上の行に文字を表示
      lcd.setCursor(0, 1); // カーソル位置を下の行の左端に指定
      lcd.print(n); // nをLCDに表示
    }
    
    void loop(){
      // 直前にボタンが押されておらず、今は押されていたらnを1増やす
      if (digitalRead(buttonPin)==HIGH && pre==LOW){
        n++;
        lcd.setCursor(0, 1); // カーソル位置を下の行の左端に指定
        lcd.print(n); // nをLCDに表示
      }
      // 現在のボタンの状態をpreに記憶
      pre = digitalRead(buttonPin);
      delay(10);
    }

  10. 実行してボタンを押し、図のようにカウントが増えることを確認する。


  11. トップページに戻り、今回追加したもののデザイン名を「課題3-1」に変更して公開する。

課題3-2

  1. 新しい回路「課題3-2」を作って公開する (「新しい回路」ボタンからでもよいし、「課題3-1」のコピーでも構わない)。

  2. 「課題3-2」を編集し、LCDを使った機能をつくる。
以下に例を挙げるが、これらと全く同じものはNG。

例1 : ボタンが押されていたら右へ、そうでなければ左へスクロールする (配線は課題3-1と同じ)
(ここではscrollDisplayRight関数とscrollDisplayLeft関数を使っている。LCD関連ではほかにもいろいろな関数が使える (参考))
コード


実行結果



例2 : 土の水分センサーを使い、生データと判定結果を表示する
素子・配線
(課題3-1の押しボタンとそれにつながる抵抗は削除)
(水分センサーは「コンポーネント 基本」の「Soil Moisture Sensor」)
(「SIG」が出力データの端子。これをArduinoのアナログ入力端子につなぐ)


コード


実行結果
(センサーをクリックしてバーをドラッグすれば、仮想的に水分を増減させられる)

水分センサー以外にもいくつかセンサーが使える。
「PIRセンサー」では、感知範囲にものがなければ0、あれば1のデジタル信号が「信号」の端子から出力される (検出してからしばらくたつと出力は0に戻る)。
Arduinoでは「digitalRead(ピン番号)」で出力を読み込む。
「超音波距離センサー」では、センサーからの距離に応じて0~1024のアナログ出力が「SIG」の端子から出力される。
Arduinoでは「analogRead(ピン番号)」で出力を読み込む (例2と同じ)。

例3 : オリジナルの絵を作って表示させる
(ステップ5で追加した押しボタン、抵抗、配線を削除し、ステップ3のときと同じ状態にする)

コード


実行結果
(爆弾と旗の絵が交互にランダムな位置に表示される)

このLCDでは一文字が5x8ピクセルでできている。
5~26行目で絵のデータを記述している。0が黒、1が白に対応する。
オリジナルの文字(絵)を登録できるのは0x00~0x07の8文字分。
つまり、createChar関数の第1引数に入れられるのは0~7の値になる。
cが0→1→2→0→...と変わっていくようにするには、42行目を「c=(c+1)%3」とすればよい。

提出

inserted by FC2 system