JavaScript が無効です。有効にしてください。
ななよんのホームページ
トップ > 電子工作 > 鉄道部品制御のすすめ > 【鉄道部品】表示器に一定時間表示し続ける方法

【鉄道部品】表示器に一定時間表示し続ける方法

最終更新日さいしゅうこうしんび:2023-08-10

 DUG やシフトレジスタタイプの LUM は、表示データを常に送り続ける必要があります。ずっと固定表示をするのであれば loop 内に表示データ送出プログラムを書けばいいですが、一定時間表示した後スクロールさせたりと別の表示にしたいときは、一定時間だけ表示させ続けるプログラムを書く必要があります。

 これを実現するには、while 文と millis() 関数を利用します。

 while 文は、条件式が true(1)である間繰り返す文です。millis() は Arduino 系で使える、起動からの経過ミリ秒を取得する関数です。

 まず現在の millis() を取得し、変数に格納します。オーバフローしないように、型は unsigned long にします。そして、while 文内に表示データを送出するプログラムを書き、while の条件式を、格納した millis と表示させたい時間を足したものと、今現在の millis を比較するようにします。これで一定時間だけ表示させ続けることが可能です。以下に、DUG の表示器で一定時間表示させ続けるプログラムを示します。LUM でも同様の考え方で同じことができます。

 なお、あらかじめ unsigned long tmr; と millis を格納する変数を宣言しておいてください。

tmr = millis();
while(tmr+3000 > millis()) {		// 3000 ms(3 秒)繰り返す
	digitalWrite(RESET, HIGH);
	digitalWrite(RESET, LOW);
	for(i=0; i<16; i++) {
		for(j=0; j<WIDTH; j++) {
		setColor(pgm_read_byte(&data[i][j]));
		digitalWrite(CLOCK, HIGH);
		digitalWrite(CLOCK, LOW);
		}
		digitalWrite(LATCH, LOW);
		digitalWrite(LATCH, HIGH);
	}
}

 ESP32 等、コアを複数持ちマルチタスク実行ができるマイコン限定ですが、while 内で break; を使用することで while から抜けることが可能です。while 内にフラグを監視する if 文を入れ、別タスクでフラグを立てて if 文が実行された時に break; とフラグを 0 にする処理を実行すれば次の処理に移ることができます。


戻る

広告

右メニュー

【表示がおかしい・崩れる場合】PC では Shift と F5 を同時押し。スマホではキャッシュを削除してみてください。



とうサイトでは Cookieくっきー使用しようします。くわしくは上記じょうきの「プライバシーポリシー・免責事項等めんせきじこうとう」もご確認かくにんください。



上へ戻る