if

ifは指定した条件を満たした場合にのみ、その後のプログラムを実行する。https://www.arduino.cc/en/Reference/If

if (someVariable > 50)
{
  // do something here
}

下記のような書き方でもOK

if (x > 120) digitalWrite(LEDpin, HIGH); 

if (x > 120)
digitalWrite(LEDpin, HIGH); 

if (x > 120){ digitalWrite(LEDpin, HIGH); } 

if (x > 120){ 
  digitalWrite(LEDpin1, HIGH);
  digitalWrite(LEDpin2, HIGH); 
}                                 // all are correct 

 

elseは条件を満たさなかった場合に実行する内容も記述できる。https://www.arduino.cc/en/Reference/Else

if (pinFiveInput < 500)
{
  // action A
}
else
{
  // action B
}

else ifと続けることで、別の条件を続けて記述することが出来る。

if (pinFiveInput < 500)
{
  // do Thing A
}
else if (pinFiveInput >= 1000)
{
  // do Thing B
}
else
{
  // do Thing C
}

条件に合った場合、そのブロックのコードが実行され他は無視される。条件に合うものがない場合、elseのブロックが実行される。

チュートリアル
https://www.arduino.cc/en/Tutorial/ifStatementConditional

for

for文は{}で囲まれた記述を繰り返す。
例えば値を少しずつ増加して、一定のところで繰り返すのをやめる。
データやピンの配列と組み合わせて使われることが多い。
https://www.arduino.cc/en/Reference/For

 

Example

// Dim an LED using a PWM pin
int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10

void setup()
{
// no setup needed
}

void loop()
{
for (int i=0; i <= 255; i++){
analogWrite(PWMpin, i);
delay(10);
}
}

forはまず()に;で区切った3つの部分がある。
for (initialization; condition; increment)
上記の例では、(変数iを0に初期化; iが255以下であること; iに加算する)となり、iが0から255まで増加したところで繰り返すのをやめる。
{}にはanalogWriteが記述されているので、この場合PWMpin(10番ピン)の出力が0.01秒ごとに増加し、2.55秒後に終了。(forはloop{}にあるので、この動作を繰り返すことになる)

forループの反復
https://www.arduino.cc/en/Tutorial/ForLoopIteration

Operator Symbol

Arduinoでプログラムを作るときに、演算子で条件などを表す必要がある。
数式とは異なる使い方をするので注意する。

 

【 = 】

=は、代入演算子(assignment operator)で、右側の値を左の変数に入れる。

Example

int sensVal; // declare an integer variable named sensVal
sensVal = analogRead(0); // store the (digitized) input voltage at analog pin 0 in SensVal

 

【 == != < > <= >= 】

if文などで使われる比較演算子
==は数学でいう「=」のように等号として使う。

 

【 && || ! 】

if文などで使われる論理演算子
&&はAND、||はOR、!はNOT

 

【 ++ -- 】

++は加算代入で変数に1を加える。 --は-1
後に++がつく場合は、1は加えるが、返すのは古い値になる。

Syntax

x++;  // increment x by one and returns the old value of x
++x;  // increment x by one and returns the new value of x

Examples

x = 2;
y = ++x;      // x now contains 3, y contains 3
y = x--;      // x contains 2 again, y still contains 3 

 

【 += -= *= /= %= &= |= 】

+=は元の変数に右の値を加える。

Examples

x = 2;
x += 4;      // x now contains 6
x -= 3;      // x now contains 3
x *= 10;     // x now contains 30
x /= 2;      // x now contains 15
x %= 5;      // x now contains 0

7 Segment LED Count Up

とりあえず0から9までの数字をカウントしてみる。

youtu.be

void setup(){
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}

void loop(){
//0を表示
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
//1
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
//2
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
delay(1000);
//3
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
delay(1000);
//4
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
//5
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
//6
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
//7
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
//8
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
//9
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
}

7 Segment LED Display

もっとも単純なディスプレイで、数字を表示する。
7セグメントLEDはそれぞれのLEDに端子がついていて、Arduinoのプログラムで個別に点灯(消灯)することで電光掲示板のようになる。

void setup(){
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}

void loop(){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}

f:id:spinspine:20170119225027j:plain

2と3のピンから出力して右端の二つのLEDを光らせると、数字の1になる。
同じように全てのセグメントを光らせると、数字の8になる。

f:id:spinspine:20170119225707p:plain

7セグメントLEDの真ん中の端子は上下ともカソード(またはアノード)になっていて、各端子共通のGND(または+)となっている。

Variable

プログラムのコードを書くのに重要なのが「変数(Variable)」。
電卓のメモリ機能のように計算結果を一時的に記憶して、それに名前をつけることで、後々呼び出せるようになる。

Example

    int ledPin = 13;

Syntax

    int var = val;
  • var - your int variable name
  • val - the value you assign to that variable

 

intは変数で使われるデータ型(Deta Type)で最も基本的なもので、整数の値を扱うことが出来る。

Circuit Board

ブレッドボードは半田ごて(soldering iron)を使わずに、ワイヤーを抜き差しすればいいので、試作には向いているが、製品化する場合は基板に半田付けした方がいい。

ブレッドボードの場合と同じように部品を電気的に繋いでいけばいいが、ユニバーサル基板(universal circuit board)の場合、個々の穴は全く繋がっていないため、自由に部品を配置できる一方、スズメッキ線やリード線などを使って上手に配線する必要がある。