teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

1619閲覧

Adafruit I2C通信の7セグメント4桁ディスプレイでカウントダウンした時に不要になった桁の表示を消したい

Q_1986-kt

総合スコア13

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/01/15 00:58

0

0

カウントダウン・タイマーをAdafruit I2C通信の7セグメント4桁ディスプレイ(スイッチサイエンスで販売している)を利用して2桁のタイムを表示しています。基本となるコードは、https://github.com/adafruit/Adafruit_LED_Backpack/blob/master/examples/sevenseg/
sevenseg.ino このサンプル・コードをベースにしています。
2桁した使わないので、センター部分の2つを使ってタイムを表示させています。
その時に使うコードは、以下のコードをベースにしています。もちろん、実際に使っているコードの表示するタイム部分はちゃんと時間を測って表示させています。あくまでも、表示に関する質問です。

#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc. #include <Adafruit_GFX.h> #include "Adafruit_LEDBackpack.h" Adafruit_7segment matrix = Adafruit_7segment(); void setup() { #ifndef __AVR_ATtiny85__ Serial.begin(9600); #endif matrix.begin(0x70); } void loop() { uint16_t blinkcounter = 0; boolean drawDots = false; for (uint16_t counter = 25; counter > 0; counter --) { matrix.writeDigitNum(1, (counter / 10) % 10); matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); } }

このコードでは、1の位になった時に、10の位の部分は、0が表示されたままです。もちろんこのままでも問題はありませんが、0を消灯させたいのですが一度つけた部分を消す方法がわかりません。

今は簡易的に、両端のディスプレイ部分をテープで隠して、ダミーの信号を入れて対処しています。そのコードが以下になります。

uint16_t blinkcounter = 0; boolean drawDots = false; for (uint16_t counter = 25; counter > 0; counter --) { if (counter >= 10){ matrix.writeDigitNum(1, (counter / 10) % 10); matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); }else{ matrix.print(1); // ダミーとして入れるコード matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); } }

これで、一番右に1を表示させることで対応しています。このライブラリーでは、一旦表示させた部分は、表示したままで電源をオフしてリセットしないと出来ないような気がします。各桁の表示をオン、オフできれば、もっとスマートに表示できると思うのですが、どなたか良いアイデアがあれば、よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/01/15 01:03

その7セグメント4桁ディスプレイとはなんでしょうか。 回路図は提示できますか?
Q_1986-kt

2020/01/15 01:12

スイッチサイエンスさんや、そのたいろんなところで販売されている物で、特に回路図などは載っていませんでした。 メーカーはAdafruitだと思いますが、メーカーの商品のページです。https://www.adafruit.com/product/878
guest

回答2

0

リンク先見てると、

void Adafruit_AlphaNum4::writeDigitAscii(uint8_t n, uint8_t a, boolean d) {

という関数がありますんで、これでスペース出力すればどうでしょう

投稿2020/01/15 04:04

y_waiwai

総合スコア88178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Q_1986-kt

2020/01/15 11:42

いろいろ調べていただいてありがとうございます。 ただ、この関数は、14セグのモノ用のようで、7セグでは動かないようです。 でも、同じような考え方で、いろいろ試してみます。
guest

0

自己解決

意外と簡単に解決しました。
自分で考えていた時には、難しく考え過ぎていたようです。
y_waiwaiさんのスペースを出力するというヒントを元に、やってみたら簡単に表示を消すことが出来ました。
ダミーで入れていた、matrix.print(1); このコード部分を
matrix.writeDigitNum(1, ' '); こんな感じで、消したい部分にスペースを入れると消灯出来ました。
成功したコードが以下のコードです。

#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc. #include <Adafruit_GFX.h> #include "Adafruit_LEDBackpack.h" Adafruit_7segment matrix = Adafruit_7segment(); void setup() { #ifndef __AVR_ATtiny85__ Serial.begin(9600); #endif matrix.begin(0x70); } void loop() { uint16_t blinkcounter = 0; boolean drawDots = false; for (uint16_t counter = 25; counter > 0; counter --) { if (counter >= 10){ matrix.writeDigitNum(1, (counter / 10) % 10); matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); }else{ matrix.writeDigitNum(1, ' '); // ダミーのスペースを入れる matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); } } }

投稿2020/01/15 16:17

Q_1986-kt

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/01/16 00:46

ああ、改めてソース見ると > matrix.writeDigitNum(1, ' '); // ダミーのスペースを入れる これだと中で配列のアクセス違反となってしまうので、 matrix.writeDigitRaw(1, 0); のほうがいいですね
Q_1986-kt

2020/01/16 09:51

いろいろありがとうございます。 しかし残念ながら matrix.writeDigitRaw(1, 0); だと、0 を表示します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問