ゆるく楽しむプログラミング

ArduinoでLチカ

Arduinoにはボード上にLED(発光ダイオード)が付いていて13番ピンに接続されています。
そして、出荷時に初期設定としてLチカが入っているようです。
※[スケッチ例]->[01.Basics]->[Brink] と思われます。
なので、そのままでもLチカ出来るのですが折角ですので一ひねりしてArudinoのアナログ出力を使ってLEDの明滅を合わせてやってみます。

Arudinoのピンで~が付いている(JapaninoではPWMが記載されている)ピンはPWM【パルス幅変調 / Pulse Width Modulation】が使えます。
超簡単に言うと超素早くON/OFFを繰り返すことで出力電圧が変化しているように見せかける「なんちゃってDA変換」です。
実際には電力量が変化しているのであって電圧が変わっている訳ではないと思うので(良くわからんので間違ってるかも)接続するモノによってはマジメにDA変換しないと動かないような気がします。
LEDは普通に消灯している時間と点灯している時間の割合で明るさが変わるので問題ありません。

ピンの出力には事前に入力で使うか出力で使うかを pinMode(ピン番号、モード) 関数で設定する必要があります。
モードは INPUT かOUTPUTです。

PWM制御によるアナログ出力には analogWrite(ピン番号、出力値) 関数を使います。
出力値は0~255までの値です。

デジタル出力にはdigitalWite(ピン番号、出力) 関数を使用します。
出力値は HIGE か LOW で HIGEで5V、LOWで0Vが出力されます。



ざっくり作ったLチカプログラム

// 深く考えてない、ざっくり作ったデジアナLチカ
#define DPIN 13 // デジタル出力ピン番号
#define APIN 11 // アナログ出力ピン番号
#define ADDSTEP 8  // アナログ出力の増分値
int outLevel = 0 ;  // アナログピン出力値
int upStep = 1 ;    // 増減方向

void setup() {
  // put your setup code here, to run once:
  pinMode(DPIN,OUTPUT) ;  // デジタル出力ピンを出力に設定
  pinMode(APIN,OUTPUT) ;  // アナログ出力ピンを出力に設定 
}

void loop() {
  // put your main code here, to run repeatedly:
  // アナログピン出力が上限・下限に達する毎にデジタル出力のON/OFFが切り替わる
  // アナログピン出力は0.1秒ごとに変化、上下・下限に達した状態で1秒停止
  if (outLevel <= 0) {  // 出力レベルが0以下(下限)になったら
    outLevel = 0 ;  // 出力レベルを0に設定:マイナスになるのを防止
    upStep = 1 ;    // 増減方向を増に
    digitalWrite(DPIN,HIGH) ;  // デジタル出力のLEDを点灯
    delay(1000) ;   // 1秒間の停止
  } else 
  if (outLevel >= 255) {  //  出力レベルが255以上(上限)になったら
    outLevel = 255 ;  // 出力レベルを255に設定:上限値を越えるのを防止
    upStep = -1 ;     // 増減方向を減に
    digitalWrite(DPIN,LOW) ;  // デジタル出力のLEDを消灯
    delay(1000) ;   // 1秒の停止
  } else {
    analogWrite(APIN,outLevel) ;  // アナログ出力ピンの出力値を変更
  }

  outLevel += ADDSTEP * upStep ;   // 次のステップのアナログ出力値を算出
  delay(100) ;  // 0.1秒の停止
}



Lチカ用チャームをつないで実行

LEDの基本的な接続方法は「LEDを点灯:Lチカ」を参照してください。
接続はArduinoの13番ピンと11番ピンにLEDを接続、抵抗は1KΩを付けてます。
今回はブレッドボードではなく「micro:bitでLチカ」の時に作ったLチカチャームを繋げています。





解説動画