Arduino演習記録06-入力検知の演習

投稿日: 作成者: ussy

今日は入力の検証の演習を行います。
※P68は入力に関して重要な情報が書かれています。概要としては
・ピンをINPUTモードにしてからピンの入力を検知する
・入力検知に使えるピンは
Digital0-13とAnalogA0-A5
ですが一読しておくとプログラムの理解が進みます。

【使用しているテキスト】

実践Arduino! 電子工作でアイデアを形にしよう

新品価格
¥2,475から
(2020/8/14 10:36時点)

 

  1. 必要部材
    1. Aruduino本体 または互換機(安価)
      1. Arduino互換機(3個入りでUSBコード、ブレッドボード、配線付き)
        ※IDEで下記設定変更をすると使えます。
        詳しくはhttp://u-style.info/2020/08/14/arduino演習記録01-ide環境を作る統合開発環境の構築)/

        1. ボード ArduinoNano
        2. プロセッサATmega328P(OldBootloder)
          ※IDE使用時はこの変更が大事!
        3. シリアルポートCOM5 ※任意:環境に応じて変更

          KeeYees Nano V3.0 Mini USB マイクロコントローラ開発ボード ATmega328P CH340G USBケーブル付き 3セット ブレッドボード 400穴 3個 ジャンパーワイヤー 20CM 40ピン オスーオス メスーメス オスーメス

          新品価格
          ¥2,280から
          (2020/8/15 10:52時点)

      2. Arduino Uno

        Arduino Uno Rev3 ATmega328 マイコンボード A000066

        新品価格
        ¥2,500から
        (2020/8/15 10:49時点)

    2. ブレットボード

      HiLetgo・ 5個セット 400穴 ミニブレッドボード 実験用ボード 8.5*5.5 CM ニューブレッドボード [並行輸入品]

      新品価格
      ¥870から
      (2020/9/5 16:24時点)

      ブレッドボードなかなか良い品質のものがなくて・・・
      値段に比例しますがこのあたりが妥当かと思われます。

    3. ジャンパーワイヤー

      ELEGOO 120pcs多色デュポンワイヤー、arduino用ワイヤ―ゲ―ジ28AWG オス-メス オス-オス メス ?メス ブレッドボードジャンパーワイヤー

      新品価格
      ¥990から
      (2020/9/5 16:28時点)

      これぐらいあれば演習には十分じゃないでしょうか。
      ブレッドボードーブレッドボード
      ブレッドボードーArduino
      ブレッドボードーセンサー類
      等オスメス全組み合わせが入ってます。

    4. タクトスイッチ

      uxcell タクトスイッチ プラスチック 金属 ブラック 10個入り 防水 押しボタン

      新品価格
      ¥384から
      (2020/9/5 16:30時点)

    5. LED

      発光ダイオード 3mm 5mm 透明LEDセット LED ダイオード 高輝度 円型頭部 白/赤/緑/青/黄 5色 200個入

      新品価格
      ¥695から
      (2020/9/5 16:44時点)

    6. 抵抗器
      色々入っている下記が便利でした

      OSOYOO(オソヨー)金属皮膜抵抗器 抵抗セット 10Ω~1MΩ 30種類 各20本入り 合計600本 (600本セット)

      新品価格
      ¥989から
      (2020/8/30 14:09時点)

  2. 演習の前に検証
    今回P70に詳しく書いてある「プルダウン抵抗」の考えですがなかなか頭に入ってきません。私の頭の中だと(誤った考え方)

    になります。
    +として5Vを流してD2をINPUTモードにして受け取る。
    これでいいと思うのですが実際に行うとLEDが最初っから(ボタンを押す前からつきっぱなしになるのです。下記の状態

    なのでやはりP70に書いてあるプルダウン抵抗が必要なんでしょうね・・・
  3. 配置図(正解)

    この回路により押されたことをしっかりと検知できるようになります
  4. 回路図
    今回無し
  5. プログラム
    下記を開きます。

    // constants won’t change. They’re used here to set pin numbers:
    const int buttonPin = 2; // the number of the pushbutton pin
    const int ledPin = 13; // the number of the LED pin// variables will change:
    int buttonState = 0; // variable for reading the pushbutton status

    void setup() {
    // initialize the LED pin as an output:
    pinMode(ledPin, OUTPUT);
    // initialize the pushbutton pin as an input:
    pinMode(buttonPin, INPUT);
    }

    void loop() {
    // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);

    // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    }
    }

    【補足】

    1. const 定数として宣言する際に使う修飾子
      buttonPin,ledPInが定数として宣言されています。
    2. pinMode (ピン番号,モード)
      指定したピンを入力にするか出力にするか指定する
      pinMode(ledPin, OUTPUT); ※ledPinが出力モードとして定義
      pinMode(buttonPin, INPUT); ※buttonPinが入力モードとして定義
    3. digitalRead(ピン番号);
      ピン番号の状態を検知
      buttonState = digitalRead(buttonPin); ※buttonPinの状態を検知
    4. if-else文で状態に応じてLed出力
      digitalWrite(指定したピン,状態指定)
      指定したピンに電流を流すHighか流さないLowを設定する
  6. 実際画像
  7. 行結果
    ボタンを押しているときだけLEDがつくようになりました。
  8. まとめ

いや、たかがボタンですが奥が深いなあ。
INPUTのピンは確実にOFFの状態にしないと電気がもれてしまうらしい。
未だによく理解できていないけど慣れていきたいと思います。