Button

はじめに

2番ピンに接続している押しボタンを押しているときに、13番ピンにつながっている内蔵LEDを点灯、押しボタンを押していないときにはLEDを消灯します。

プログラム

定義等

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
  Button

  Turns on and off a light emitting diode(LED) connected to digital pin 13,
  when pressing a pushbutton attached to pin 2.

  The circuit:
  - LED attached from pin 13 to ground through 220 ohm resistor
  - pushbutton attached to pin 2 from +5V
  - 10K resistor attached to pin 2 from ground

  - Note: on most Arduinos there is already an LED on the board
    attached to pin 13.

  created 2005
  by DojoDave <http://www.0j0.org>
  modified 30 Aug 2011
  by Tom Igoe

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/Button
*/

// 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
 

const int型のbuttonPinとledPinという変数を定義し、それぞれ2と13を代入します。この変数は定数なので、これ以降は値を変更することはできません。

次に、int型のbuttonStateという変数を定義し、0を代入します。この変数は後から変更することができます。

また、上記の3つの変数は、ブロックの外側で定義されているので、ファイル有効範囲を持ちます。すなわち、このファイルで定義している全ての関数から参照することができます。さらに、記憶域クラス指定子の指定がないので外部結合となり、結果としてすべてのファイルから参照することができます。また、静的記憶域期間を持つため、プログラムの実行中はいつでも参照することができます。

setup()

32
33
34
35
36
37
38
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}
 

pinMode()を使って、ledPin(13番ピン)を出力モードに、buttonPin(2番ピン)を入力モードに設定します。

loop()

39
40
41
42
43
44
45
46
47
48
49
50
51
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);
  }
}

まず、digitalRead()を使って、buttonPinの値をbuttonStateに代入します。

次にif…else文を使って、buttonStateがHIGHかどうかを調べます。HIGHの場合には、digitalWrite()を使って、ledPinにHIGHを出力します。この結果、内蔵LEDが点灯します。HIGHでなければ、elseに記述されている文を実行します。今回は、ledPinにLOWを出力し、LEDを消灯します。

if文の中で値を比較している演算子が、「==」であることに注意してください。これは、等価演算子と呼ばれる演算子で、2つの値が等しいかを判定します。「==」の代わりに、「=」を使っても、文法上間違いではありませんが、通常は望みどおりの結果になりません。

「=」は、単純代入演算子と呼ばれる演算子で、変数に値を代入します。「buttonState = HIGH」とした場合は、まず、buttonStateにHIGHが代入されます。HIGHは、0x1と定義されているため、buttonStateは1になります。よって、「if(1)」が評価されます。if文の条件式が0の場合は偽、0以外の場合は真と評価されるため、このif文「if(buttonState = HIGH」は常に真となり、ボタンの状態に関係なく、LEDを点灯させることになります。

バージョン

Hardware:Arduino Uno
Software:Arduino 1.8.16

最終更新日

September 11, 2021

inserted by FC2 system