0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DigisparkでパトランプのフラッシュみたいなLチカ

Last updated at Posted at 2022-09-03

Digisparkは、マイコンのATTiny85の小さなボードです。LEDも付いているのでLEDを点滅させてみたいと思います。せっかくなのでパトランプで使われてそうなフラッシュ(点滅)にしてみます。

Lチカ

マイコンを使ってLEDの点灯と消灯を繰り返すプログラムを書いて動かすことです。プログラミングの練習によく使われています。

パトランプのフラッシュ(点滅)

パトランプのフラッシュの仕方にいろいろあるのがわかりました。以下のサイトを参考にさせていただき、LEDの点滅を作成しています。

用意するもの

  1. Digispark
  2. Arduino IDE
  3. PC

プログラム

DigisparkはのLEDは、P1につながっていたので、PB1を指定しています。

Blink.ino
// Digispark の LED のピン番号
#define LED_PIN PB1

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // LED を点灯と消灯を繰り返すタイミング。単位はミリ秒です
  // ランダムフォーのような点滅
  const int sequence[12] = {
      40,   // On
      40,   // Off
      40,   // On
      40,   // Off
      40,   // On
      40,   // Off
      40,   // On
      160,  // Off
      100,  // On
      120,  // Off
      50,   // On
      150,  // Off
    };
  bool ledOn = false;

  for (int i = 0; i < 12; i++) {  // sequence の個数を繰り返す
    ledOn = !ledOn;               // LED の点灯と消灯の切替
    digitalWrite(LED_PIN, ledOn);
    delay(sequence[i]);
  }
}

sequence でLEDの点灯と点滅の時間を書いて、その順番でLEDを点灯と消灯をしています。
3回の点滅(トリプルフラッシュ)を繰り返す場合は、次のようになります。

Blink.ino
// Digispark の LED のピン番号
#define LED_PIN PB1

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // LED を点灯と消灯を繰り返すタイミング。単位はミリ秒です
  // トリプルフラッシュのような点滅
  const int sequence[6] = {
      50,   // On
      75,   // Off
      50,   // On
      75,   // Off
      50,   // On
      500,  // Off
    };
  bool ledOn = false;

  for (int i = 0; i < 6; i++) {  // sequence の個数を繰り返す
    ledOn = !ledOn;              // LED の点灯と消灯の切替
    digitalWrite(LED_PIN, ledOn);
    delay(sequence[i]);
  }
}

sequence の個数を繰り返すところに数字を直接書いていますが、いろいろ修正して試すのなら(sizeof(sequence)/sizeof(int))を書いたほうが間違えが少なくなるのでそのほうがよいです。

sequence の個数を繰り返す部分の修正
  for (int i = 0; i < (sizeof(sequence)/sizeof(int)); i++) {
    ledOn = !ledOn;
    digitalWrite(LED_PIN, ledOn);
    delay(sequence[i]);
  }

Lチカでも点滅の仕方を変えれば面白いです。
sequenceは、点灯と消灯の時間をミリ秒で書いていました。
sequenceを10ミリ秒単位で書くこともできます。

Blink.ino
#define H true
#define L false
#define LED_PIN PB1  // Digispark のLED

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // LED を点灯と消灯を繰り返すタイミング
  const bool sequence[] = {
    H, H, H, H,  // 40ms
    L, L, L, L,  // 40ms
    H, H, H, H,  // 40ms
    L, L, L, L,  // 40ms
    H, H, H, H,  // 40ms
    L, L, L, L,  // 40ms
    H, H, H, H,  // 40ms
    L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,  // 160ms
    H, H, H, H, H, H, H, H, H, H,  // 100ms
    L, L, L, L, L, L, L, L, L, L, L, L,  // 120ms
    H, H, H, H, H,  // 50ms
    L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,  // 150ms
  };
  bool ledOn = L;

  for (int i = 0; i < (sizeof(sequence)/sizeof(bool)); i++) {  // sequence の個数を繰り返す
    if (ledOn != sequence[i]) {
      ledOn = sequence[i];
      digitalWrite(LED_PIN, ledOn);
    }
    delay(10);  // 10ms
  }
}

これは、sequence を書くのが面倒です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?