ArduinoでLチカ

# Lチカ
まずは、LEDを光らせてみましょう。LEDをチカチカさせることをLチカといいます。

# 使うLED
[LED](https://akizukidenshi.com/catalog/g/gI-16692/)


# LEDのプラス、マイナス
LEDは長い方が＋、短い方がーです。
+はアノード
ーはカソード
といいます。
![small_IMG_0101.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577027/5d4699a1-e082-a324-669c-a92f311334cf.jpeg)

# LEDとArduinoのピンを接続
LEDの
長い方（＋）を１３番ピン
短い方（ー）をGNDに
につなげます。

↑は5V用に抵抗が入ったものを使っています。そうでないものを使う時は適宜、抵抗を入れてください。

![スクリーンショット 2021-10-07 15.13.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577027/57f8c68f-fb59-5eed-fa7f-cb9d06825515.png)


![PNGイメージ-715F0B70A42C-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577027/0d80e822-d54e-5238-5760-9843d2ebaa85.png)

# Lチカプログラム
下記のプログラムをコピペし、スケッチに貼り付けし、保存後にArduinoに書き込んでみましょう。

```java
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(500);
  digitalWrite(13,LOW);
  delay(500);

}
```
## Arduinoに書き込み
プログラムの書き込みは下記の赤枠のボタンを押します。
![スクリーンショット 2023-03-07 10.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577027/0c6a59c6-571c-a96a-b1ab-fcb5ab1f5b25.png)

#### Macでエラー
macを使っている人で書き込みができなかった人は、ターミナルから下記のコマンドを実行してRosettaをupdateしてみてください。

```
softwareupdate --install-rosetta --agree-to-license
```

## プログラムの解説
### ポイント１：setupとloop

```arduino
void setup() {
}
void loop() {
}
```

Arduinoのスケッチを作成するとという２つのプログラムがもともと書いてあります。

setupは最初に一回だけ実行されるプログラム
loopはずっと繰り返し実行されるプログラム
です。
{ 〜 }の間がそれぞれのプログラムになります。

### ポイント2:約束事(文の最後はセミコロン;）
プログラムの中をみると、ところどころに;(セミコロン)があります。
Arduinoでは基本的に命令文の最後には;(セミコロン)をつけます

※ただし、ifやforのように{}でくくるループや条件分岐の場合は除きます。

### ポイント3:ピンの設定と出力
デジタルピン（1〜13）の設定
・pinMode：指定したピンを入力用に使うのか、出力用に使うのかを設定する
今回はLEDを点灯させるために13番ピンから電気を流したい（出力したい）ので、
pinMode(13,OUTPUT);

・digitalWrite：デジタルピンの出力をLOWかHIGHで設定します。
LOW→0V
HIGH→5V
が出力されます。
つまり、
digitalWrite(HIGH)でLEDがつく
digitalWrite(LOW)でLEDが消える
事になります。


### ポイント4:delayで待つ
delayは指定した時間待つ命令です。
単位はミリ秒(ms)です。
例)
delay(1000)→1秒待つ (1000/1000=1)
delay(100)→0.1秒待つ(100/1000=0.1)
delay(10)→0.01秒待つ(10/1000=0.01)

LEDを高速で点滅させると、点滅しているかわからないので、ある程度の間隔をおいてHIGHとLOWを切り替えます。

# 練習：For文を使って制御
下記のプログラムは0.3秒ごとの点滅を10回繰り返し、その後２秒ごとの点滅を３回繰り返す、というプログラムです。
最後まで行ったら、また0.3秒の繰り返しに戻ります。

```java
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  for(int i=0; i < 10; i++){
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
  }
  
  for(int i=0; i < 3; i++){
    digitalWrite(13,HIGH);
    delay(2000);
    digitalWrite(13,LOW);
    delay(2000);
  }

}
```

## プログラムの解説

### ポイント　For文

```java
for (初期化式; 条件式; 変化式){
  // 繰り返しの中で実行される処理
}
```

下記の式は
- iという変数で繰り返しを判断する
- iは0から始まる
- iが３未満の間は繰り返す（0から始まるので、３回の繰り返しになることに注意）
- i++はiが１ずつ足される

```java
  for(int i=0; i < 3; i++){
　　　　　　　　　//繰り返しの中で実行される処理
  }
```

長縄跳びを想像しましょう。跳んでる時に「いーち、にー、さーん・・・」と数えていきますよね。その数字がiに入っているということになります。

# if文
条件分岐は



```java
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // intervalという変数を作って、間隔を制御する
  int interval=0;
  
  for(int i=0; i < 13; i++){
    if(i<10){
      // もしiが10より小さかったら間隔は0.3秒
      interval=300;
    }else{
      // そうじゃなかったら間隔は2秒
      interval=2000;
    }
      digitalWrite(13,HIGH);
      delay(interval);
      digitalWrite(13,LOW);
      delay(interval);
  }

}
```

## プログラムの解説
### ポイント
```java
if (条件式){
　処理内容1 　//条件式を満たす場合にのみ実行する
}
else{
　処理内容2 　//条件式を満たさない場合にのみ実行される
}
```