Arduino UNO WiFiでLチカ

Arduino UNO WiFi R4の公式資料です．
https://docs.arduino.cc/tutorials/uno-r4-wifi/cheat-sheet


arduinoでLチカします．

```ruby:Qiita_Ltika.ino
void setup() {
    pinMode( 2, OUTPUT );
}
void loop() {
    digitalWrite( 2, HIGH );
    delay(200);
    digitalWrite( 2, LOW );
    delay(200);
}
```

できました．

void関数にして簡潔にします．

```ruby:Qiita_Ltika.ino
void setup() {
    pinMode( 2, OUTPUT );
}
void Ltika() {
    digitalWrite( 2, HIGH );
    delay(200);
    digitalWrite( 2, LOW );
    delay(200);
}
void loop(){
  Ltika();
}
```

できました．
見やすくなりましたね．
でもこれだと2ピンしかLチカできません．
他のピンでもLチカできるようにします．

```ruby:Qiita_Ltika.ino
int pinNumber = 2;

void setup() {
    pinMode( pinNumber, OUTPUT );
}
void Ltika(int ltikaPin) {
    digitalWrite( ltikaPin, HIGH );
    delay(200);
    digitalWrite( ltikaPin, LOW );
    delay(200);
}
void loop(){
  Ltika(pinNumber);
}
```

いいですね．
早速他のピンでもやってみましょう．

```ruby:Qiita_Ltika.ino
int pinNumber_2 = 2;
int pinNumber_4 = 4;

void setup() {
    pinMode( pinNumber_2, OUTPUT );
    pinMode( pinNumber_4, OUTPUT );
}
void Ltika(int ltikaPin) {
    digitalWrite( ltikaPin, HIGH );
    delay(200);
    digitalWrite( ltikaPin, LOW );
    delay(200);
}
void loop(){
  Ltika(pinNumber_2);
  Ltika(pinNumber_4);
}
```
素晴らしいです．
pinModeでarduinoのピンを出力設定にするのを忘れないでくださいね．

ですがこれだと変数名がpinNumber_◯に番号を代入しているので，
直接Ltika(2);のようにすればいいと思うはず．

ではLEDの色が異なる場合を例に挙げます．

```ruby:Qiita_Ltika.ino
int ltika_Red = 2;
int ltika_Blue = 4;

void setup() {
    pinMode( ltika_Red, OUTPUT );
    pinMode( ltika_Blue, OUTPUT );
}
void Ltika(int ltikaPin) {
    digitalWrite( ltikaPin, HIGH );
    delay(200);
    digitalWrite( ltikaPin, LOW );
    delay(200);
}
void loop(){
  Ltika(ltika_Red);
  Ltika(ltika_Blue);
}
```
このコードを見れば赤いLEDが2ピン，青いLEDが4ピンにつながっていることがわかりますね．
これがプログラムの可読性です．
変数名をa,,cとかではなく意味を持つものにしたり，
アッパーキャメル，ローワーキャメル，ダウンスネークとか色々あります．
関数名，変数名とかを使い分ければもっとそれらしいコードが書けるようになるはずです．
アッパーキャメルは関数名，ローワーキャメル,ダウンスネークあたりが変数名でしょうか？
(学習中なのであんまり自信はありません，すみません)


ではあえて変数も関数を使わずに同じコードを書きます．
```ruby:Qiita_Ltika.ino
void setup() {
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(2, HIGH);
  delay(200);
  digitalWrite(2, LOW);
  delay(200);

  digitalWrite(4, HIGH);
  delay(200);
  digitalWrite(4, LOW);
  delay(200);
}
```
なんのコードかわからなくなりました．
LEDの数を増やしてもっとわからなくします．
```ruby:Qiita_Ltika.ino
void setup() {
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop() {
  digitalWrite(2, HIGH);
  delay(200);
  digitalWrite(2, LOW);
  delay(200);

  digitalWrite(4, HIGH);
  delay(200);
  digitalWrite(4, LOW);
  delay(200);

  digitalWrite(7, HIGH);
  delay(200);
  digitalWrite(7, LOW);
  delay(200);

}
```
もっとわからなくなりました．
変数と関数を使います．
```ruby:Qiita_Ltika.ino
int Ltika_Red = 2;
int Ltika_Blue = 4;
int Ltika_Green = 7;

void setup() {
    pinMode( Ltika_Red, OUTPUT );
    pinMode( Ltika_Blue, OUTPUT );
    pinMode( Ltika_Green, OUTPUT );
}
void Ltika(int LtikaPin) {
    digitalWrite( LtikaPin, HIGH );
    delay(200);
    digitalWrite( LtikaPin, LOW );
    delay(200);
}
void loop(){
  Ltika(Ltika_Red);
  Ltika(Ltika_Blue);
  Ltika(Ltika_Green);
}
```
すごい見やすいですね．
当然，一つの関数に一つの変数という制約はありません．

```ruby:Qiita_Ltika.ino
int Ltika_Red = 2;
int Ltika_Blue = 4;
int Ltika_Green = 7;

void setup() {
    pinMode( Ltika_Red, OUTPUT );
    pinMode( Ltika_Blue, OUTPUT );
    pinMode( Ltika_Green, OUTPUT );
}
void Ltika(int LtikaPin, int lightUp, int lightOut) {
    digitalWrite( LtikaPin, HIGH );
    delay(lightUp);
    digitalWrite( LtikaPin, LOW );
    delay(lightOut);
}
void loop(){
  Ltika(Ltika_Red , 1000, 0);
  Ltika(Ltika_Blue, 200, 0);
  Ltika(Ltika_Green, 1000, 0);
}
```
こんなこともできます．
これで関数の入力する数をいじることで点灯時間を調節できるようになりました．
おめでとうございます．これであなたはLチカを通じて命名規則と関数の破壊力を学習しました．

間の鋭いあなたは
int Ltika_Red = 2;
int Ltika_Blue = 4;
int Ltika_Green = 7;
の部分に対して，1,2,3にしないのはなんでだろうと思いました．
ここからは完全に余談になります．
Arduino UNO R4 WiFi User Manualのリンクです，
https://docs.arduino.cc/tutorials/uno-r4-wifi/cheat-sheet/#pins
要するに，arduinoのピンにはそれぞれ特殊能力を持っているものがあります．
例えばD0,D1ではuart通信でarduino同士の間で通信ができます．
int Ltika_Red = 1;のように宣言しても問題なく動くはずです．
しかし，uart通信ができる特別なピンをLチカに使うのはもったいないよねという話です．
arduinoの1,2ピンをよく見るとtx,rxと描いてあります．
これはuart通信の送信，受信に必要なピンです．
他のピンにも色々書いてあると思います．
なにかしらが書いてあればそれは特殊能力を持っているピンの場合があります．
arduino公式が公開している資料からそれぞれのピンの役割を確認してみましょう．